System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact bbf660c5f2a6154cc4cb1935eb3eceebeb1a61cf:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20 75  ns.Generic;..  u
0180: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0190: 69 6d 65 2e 49 6e 74 65 72 6f 70 53 65 72 76 69  ime.InteropServi
01a0: 63 65 73 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79  ces;..  using Sy
01b0: 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69  stem.Globalizati
01c0: 6f 6e 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75  on;....  /// <su
01d0: 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68  mmary>..  /// Th
01e0: 69 73 20 61 62 73 74 72 61 63 74 20 63 6c 61 73  is abstract clas
01f0: 73 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f  s is designed to
0200: 20 68 61 6e 64 6c 65 20 75 73 65 72 2d 64 65 66   handle user-def
0210: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 65  ined functions e
0220: 61 73 69 6c 79 2e 20 20 41 6e 20 69 6e 73 74 61  asily.  An insta
0230: 6e 63 65 20 6f 66 20 74 68 65 20 64 65 72 69 76  nce of the deriv
0240: 65 64 20 63 6c 61 73 73 20 69 73 20 6d 61 64 65  ed class is made
0250: 20 66 6f 72 20 65 61 63 68 0d 0a 20 20 2f 2f 2f   for each..  ///
0260: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74   connection to t
0270: 68 65 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20  he database...  
0280: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0290: 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d    /// <remarks>.
02a0: 0a 20 20 2f 2f 2f 20 41 6c 74 68 6f 75 67 68 20  .  /// Although 
02b0: 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73  there is one ins
02c0: 74 61 6e 63 65 20 6f 66 20 61 20 63 6c 61 73 73  tance of a class
02d0: 20 64 65 72 69 76 65 64 20 66 72 6f 6d 20 53 51   derived from SQ
02e0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 70 65 72  LiteFunction per
02f0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
0300: 74 69 6f 6e 2c 20 74 68 65 20 64 65 72 69 76 65  tion, the derive
0310: 64 20 63 6c 61 73 73 20 68 61 73 20 6e 6f 20 61  d class has no a
0320: 63 63 65 73 73 0d 0a 20 20 2f 2f 2f 20 74 6f 20  ccess..  /// to 
0330: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63  the underlying c
0340: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 69 73  onnection.  This
0350: 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f   is necessary to
0360: 20 64 65 74 65 72 20 69 6d 70 6c 65 6d 65 6e 74   deter implement
0370: 65 72 73 20 66 72 6f 6d 20 74 68 69 6e 6b 69 6e  ers from thinkin
0380: 67 20 69 74 20 77 6f 75 6c 64 20 62 65 20 61 20  g it would be a 
0390: 67 6f 6f 64 20 69 64 65 61 20 74 6f 20 6d 61 6b  good idea to mak
03a0: 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20 2f 2f  e database..  //
03b0: 2f 20 63 61 6c 6c 73 20 64 75 72 69 6e 67 20 70  / calls during p
03c0: 72 6f 63 65 73 73 69 6e 67 2e 0d 0a 20 20 2f 2f  rocessing...  //
03d0: 2f 0d 0a 20 20 2f 2f 2f 20 49 74 20 69 73 20 69  /..  /// It is i
03e0: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 64 69 73 74  mportant to dist
03f0: 69 6e 67 75 69 73 68 20 62 65 74 77 65 65 6e 20  inguish between 
0400: 61 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e  a per-connection
0410: 20 69 6e 73 74 61 6e 63 65 2c 20 61 6e 64 20 61   instance, and a
0420: 20 70 65 72 2d 53 51 4c 20 73 74 61 74 65 6d 65   per-SQL stateme
0430: 6e 74 20 63 6f 6e 74 65 78 74 2e 20 20 4f 6e 65  nt context.  One
0440: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
0450: 73 20 63 6c 61 73 73 0d 0a 20 20 2f 2f 2f 20 73  s class..  /// s
0460: 65 72 76 69 63 65 73 20 61 6c 6c 20 53 51 4c 20  ervices all SQL 
0470: 73 74 61 74 65 6d 65 6e 74 73 20 62 65 69 6e 67  statements being
0480: 20 73 74 65 70 70 65 64 20 74 68 72 6f 75 67 68   stepped through
0490: 20 6f 6e 20 74 68 61 74 20 63 6f 6e 6e 65 63 74   on that connect
04a0: 69 6f 6e 2c 20 61 6e 64 20 74 68 65 72 65 20 63  ion, and there c
04b0: 61 6e 20 62 65 20 6d 61 6e 79 2e 20 20 4f 6e 65  an be many.  One
04c0: 20 73 68 6f 75 6c 64 20 6e 65 76 65 72 20 73 74   should never st
04d0: 6f 72 65 20 70 65 72 2d 73 74 61 74 65 6d 65 6e  ore per-statemen
04e0: 74 0d 0a 20 20 2f 2f 2f 20 69 6e 66 6f 72 6d 61  t..  /// informa
04f0: 74 69 6f 6e 20 69 6e 20 6d 65 6d 62 65 72 20 76  tion in member v
0500: 61 72 69 61 62 6c 65 73 20 6f 66 20 75 73 65 72  ariables of user
0510: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
0520: 6e 20 63 6c 61 73 73 65 73 2e 0d 0a 20 20 2f 2f  n classes...  //
0530: 2f 0d 0a 20 20 2f 2f 2f 20 46 6f 72 20 61 67 67  /..  /// For agg
0540: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
0550: 2c 20 61 6c 77 61 79 73 20 63 72 65 61 74 65 20  , always create 
0560: 61 6e 64 20 73 74 6f 72 65 20 79 6f 75 72 20 70  and store your p
0570: 65 72 2d 73 74 61 74 65 6d 65 6e 74 20 64 61 74  er-statement dat
0580: 61 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  a in the context
0590: 44 61 74 61 20 6f 62 6a 65 63 74 20 6f 6e 20 74  Data object on t
05a0: 68 65 20 31 73 74 20 73 74 65 70 2e 20 20 54 68  he 1st step.  Th
05b0: 69 73 20 64 61 74 61 20 77 69 6c 6c 0d 0a 20 20  is data will..  
05c0: 2f 2f 2f 20 62 65 20 61 75 74 6f 6d 61 74 69 63  /// be automatic
05d0: 61 6c 6c 79 20 66 72 65 65 64 20 66 6f 72 20 79  ally freed for y
05e0: 6f 75 20 28 61 6e 64 20 44 69 73 70 6f 73 65 28  ou (and Dispose(
05f0: 29 20 63 61 6c 6c 65 64 20 69 66 20 74 68 65 20  ) called if the 
0600: 69 74 65 6d 20 73 75 70 70 6f 72 74 73 20 49 44  item supports ID
0610: 69 73 70 6f 73 61 62 6c 65 29 20 77 68 65 6e 20  isposable) when 
0620: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  the statement co
0630: 6d 70 6c 65 74 65 73 2e 0d 0a 20 20 2f 2f 2f 20  mpletes...  /// 
0640: 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 70 75  </remarks>..  pu
0650: 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 63 6c  blic abstract cl
0660: 61 73 73 20 53 51 4c 69 74 65 46 75 6e 63 74 69  ass SQLiteFuncti
0670: 6f 6e 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65  on : IDisposable
0680: 0d 0a 20 20 7b 0d 0a 20 20 20 20 70 72 69 76 61  ..  {..    priva
0690: 74 65 20 63 6c 61 73 73 20 41 67 67 72 65 67 61  te class Aggrega
06a0: 74 65 44 61 74 61 0d 0a 20 20 20 20 7b 0d 0a 20  teData..    {.. 
06b0: 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e       internal in
06c0: 74 20 5f 63 6f 75 6e 74 20 3d 20 31 3b 0d 0a 20  t _count = 1;.. 
06d0: 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 62       internal ob
06e0: 6a 65 63 74 20 5f 64 61 74 61 3b 0d 0a 20 20 20  ject _data;..   
06f0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
0700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0740: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
0750: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0760: 2f 20 54 68 65 20 62 61 73 65 20 63 6f 6e 6e 65  / The base conne
0770: 63 74 69 6f 6e 20 74 68 69 73 20 66 75 6e 63 74  ction this funct
0780: 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20  ion is attached 
0790: 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  to..    /// </su
07a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65  mmary>..    inte
07b0: 72 6e 61 6c 20 53 51 4c 69 74 65 42 61 73 65 20  rnal SQLiteBase 
07c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 62 61               _ba
07d0: 73 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  se;....    /// <
07e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
07f0: 2f 20 49 6e 74 65 72 6e 61 6c 20 61 72 72 61 79  / Internal array
0800: 20 75 73 65 64 20 74 6f 20 6b 65 65 70 20 74 72   used to keep tr
0810: 61 63 6b 20 6f 66 20 61 67 67 72 65 67 61 74 65  ack of aggregate
0820: 20 66 75 6e 63 74 69 6f 6e 20 63 6f 6e 74 65 78   function contex
0830: 74 20 64 61 74 61 0d 0a 20 20 20 20 2f 2f 2f 20  t data..    /// 
0840: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0850: 70 72 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61  private Dictiona
0860: 72 79 3c 49 6e 74 50 74 72 2c 20 41 67 67 72 65  ry<IntPtr, Aggre
0870: 67 61 74 65 44 61 74 61 3e 20 5f 63 6f 6e 74 65  gateData> _conte
0880: 78 74 44 61 74 61 4c 69 73 74 3b 0d 0a 0d 0a 20  xtDataList;.... 
0890: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
08a0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f  ..    /// The co
08b0: 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61  nnection flags a
08c0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
08d0: 68 69 73 20 6f 62 6a 65 63 74 20 28 74 68 69 73  his object (this
08e0: 20 73 68 6f 75 6c 64 20 62 65 20 74 68 65 0d 0a   should be the..
08f0: 20 20 20 20 2f 2f 2f 20 73 61 6d 65 20 76 61 6c      /// same val
0900: 75 65 20 61 73 20 74 68 65 20 66 6c 61 67 73 20  ue as the flags 
0910: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
0920: 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65  the parent conne
0930: 63 74 69 6f 6e 20 6f 62 6a 65 63 74 29 2e 0d 0a  ction object)...
0940: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0950: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
0960: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
0970: 46 6c 61 67 73 20 5f 66 6c 61 67 73 3b 0d 0a 0d  Flags _flags;...
0980: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0990: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 6f 6c 64  y>..    /// Hold
09a0: 73 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 6f  s a reference to
09b0: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75   the callback fu
09c0: 6e 63 74 69 6f 6e 20 66 6f 72 20 75 73 65 72 20  nction for user 
09d0: 66 75 6e 63 74 69 6f 6e 73 0d 0a 20 20 20 20 2f  functions..    /
09e0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
09f0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0a00: 65 43 61 6c 6c 62 61 63 6b 20 20 5f 49 6e 76 6f  eCallback  _Invo
0a10: 6b 65 46 75 6e 63 3b 0d 0a 20 20 20 20 2f 2f 2f  keFunc;..    ///
0a20: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0a30: 2f 2f 2f 20 48 6f 6c 64 73 20 61 20 72 65 66 65  /// Holds a refe
0a40: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 63 61 6c  rence to the cal
0a50: 6c 62 61 6b 63 20 66 75 6e 63 74 69 6f 6e 20 66  lbakc function f
0a60: 6f 72 20 73 74 65 70 70 69 6e 67 20 69 6e 20 61  or stepping in a
0a70: 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
0a80: 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  tion..    /// </
0a90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
0aa0: 69 76 61 74 65 20 53 51 4c 69 74 65 43 61 6c 6c  ivate SQLiteCall
0ab0: 62 61 63 6b 20 20 5f 53 74 65 70 46 75 6e 63 3b  back  _StepFunc;
0ac0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0ad0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 6f 6c  ry>..    /// Hol
0ae0: 64 73 20 61 20 72 65 66 65 72 65 6e 63 65 20 74  ds a reference t
0af0: 6f 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 66  o the callback f
0b00: 75 6e 63 74 69 6f 6e 20 66 6f 72 20 66 69 6e 61  unction for fina
0b10: 6c 69 7a 69 6e 67 20 61 6e 20 61 67 67 72 65 67  lizing an aggreg
0b20: 61 74 65 20 66 75 6e 63 74 69 6f 6e 0d 0a 20 20  ate function..  
0b30: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0b40: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 53 51  ..    private SQ
0b50: 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63  LiteFinalCallbac
0b60: 6b 20 20 5f 46 69 6e 61 6c 46 75 6e 63 3b 0d 0a  k  _FinalFunc;..
0b70: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0b80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 6f 6c 64 73  >..    /// Holds
0b90: 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20   a reference to 
0ba0: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  the callback fun
0bb0: 63 74 69 6f 6e 20 66 6f 72 20 63 6f 6c 6c 61 74  ction for collat
0bc0: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0d 0a 20  ing sequences.. 
0bd0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0be0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 53  >..    private S
0bf0: 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 5f  QLiteCollation _
0c00: 43 6f 6d 70 61 72 65 46 75 6e 63 3b 0d 0a 0d 0a  CompareFunc;....
0c10: 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
0c20: 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 5f 43 6f 6d  teCollation _Com
0c30: 70 61 72 65 46 75 6e 63 31 36 3b 0d 0a 0d 0a 20  pareFunc16;.... 
0c40: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0c50: 0d 0a 20 20 20 20 2f 2f 2f 20 43 75 72 72 65 6e  ..    /// Curren
0c60: 74 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65  t context of the
0c70: 20 63 75 72 72 65 6e 74 20 63 61 6c 6c 62 61 63   current callbac
0c80: 6b 2e 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 64  k.  Only valid d
0c90: 75 72 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b  uring a callback
0ca0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
0cb0: 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ary>..    intern
0cc0: 61 6c 20 49 6e 74 50 74 72 20 5f 63 6f 6e 74 65  al IntPtr _conte
0cd0: 78 74 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  xt;....    /// <
0ce0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0cf0: 2f 20 54 68 69 73 20 73 74 61 74 69 63 20 64 69  / This static di
0d00: 63 74 69 6f 6e 61 72 79 20 63 6f 6e 74 61 69 6e  ctionary contain
0d10: 73 20 61 6c 6c 20 74 68 65 20 72 65 67 69 73 74  s all the regist
0d20: 65 72 65 64 20 28 6b 6e 6f 77 6e 29 20 75 73 65  ered (known) use
0d30: 72 2d 64 65 66 69 6e 65 64 0d 0a 20 20 20 20 2f  r-defined..    /
0d40: 2f 2f 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 63  // functions dec
0d50: 6c 61 72 65 64 20 75 73 69 6e 67 20 74 68 65 20  lared using the 
0d60: 70 72 6f 70 65 72 20 61 74 74 72 69 62 75 74 65  proper attribute
0d70: 73 2e 20 20 54 68 65 20 63 6f 6e 74 61 69 6e 65  s.  The containe
0d80: 64 20 64 69 63 74 69 6f 6e 61 72 79 0d 0a 20 20  d dictionary..  
0d90: 20 20 2f 2f 2f 20 76 61 6c 75 65 73 20 61 72 65    /// values are
0da0: 20 61 6c 77 61 79 73 20 6e 75 6c 6c 20 61 6e 64   always null and
0db0: 20 61 72 65 20 6e 6f 74 20 63 75 72 72 65 6e 74   are not current
0dc0: 6c 79 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  ly used...    //
0dd0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0de0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
0df0: 20 49 44 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c   IDictionary<SQL
0e00: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
0e10: 62 75 74 65 2c 20 6f 62 6a 65 63 74 3e 20 5f 72  bute, object> _r
0e20: 65 67 69 73 74 65 72 65 64 46 75 6e 63 74 69 6f  egisteredFunctio
0e30: 6e 73 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ns;....    /// <
0e40: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0e50: 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74  / Internal const
0e60: 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c 69  ructor, initiali
0e70: 7a 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  zes the function
0e80: 27 73 20 69 6e 74 65 72 6e 61 6c 20 76 61 72 69  's internal vari
0e90: 61 62 6c 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ables...    /// 
0ea0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0eb0: 70 72 6f 74 65 63 74 65 64 20 53 51 4c 69 74 65  protected SQLite
0ec0: 46 75 6e 63 74 69 6f 6e 28 29 0d 0a 20 20 20 20  Function()..    
0ed0: 7b 0d 0a 20 20 20 20 20 20 5f 63 6f 6e 74 65 78  {..      _contex
0ee0: 74 44 61 74 61 4c 69 73 74 20 3d 20 6e 65 77 20  tDataList = new 
0ef0: 44 69 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74  Dictionary<IntPt
0f00: 72 2c 20 41 67 67 72 65 67 61 74 65 44 61 74 61  r, AggregateData
0f10: 3e 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  >();..    }.... 
0f20: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0f30: 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72  ..    /// Constr
0f40: 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ucts an instance
0f50: 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 20 75   of this class u
0f60: 73 69 6e 67 20 74 68 65 20 73 70 65 63 69 66 69  sing the specifi
0f70: 65 64 20 64 61 74 61 2d 74 79 70 65 0d 0a 20 20  ed data-type..  
0f80: 20 20 2f 2f 2f 20 63 6f 6e 76 65 72 73 69 6f 6e    /// conversion
0f90: 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20   parameters...  
0fa0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0fb0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0fc0: 20 6e 61 6d 65 3d 22 66 6f 72 6d 61 74 22 3e 0d   name="format">.
0fd0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 44 61 74  .    /// The Dat
0fe0: 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20  eTime format to 
0ff0: 62 65 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6e  be used when con
1000: 76 65 72 74 69 6e 67 20 73 74 72 69 6e 67 20 76  verting string v
1010: 61 6c 75 65 73 20 74 6f 20 61 0d 0a 20 20 20 20  alues to a..    
1020: 2f 2f 2f 20 44 61 74 65 54 69 6d 65 20 61 6e 64  /// DateTime and
1030: 20 62 69 6e 64 69 6e 67 20 44 61 74 65 54 69 6d   binding DateTim
1040: 65 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20  e parameters... 
1050: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1060: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1070: 6e 61 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20 20  name="kind">..  
1080: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
1090: 72 65 66 3d 22 44 61 74 65 54 69 6d 65 4b 69 6e  ref="DateTimeKin
10a0: 64 22 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64  d" /> to be used
10b0: 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 44   when creating D
10c0: 61 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f  ateTime..    ///
10d0: 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f   values...    //
10e0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
10f0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1100: 22 66 6f 72 6d 61 74 53 74 72 69 6e 67 22 3e 0d  "formatString">.
1110: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6f 72  .    /// The for
1120: 6d 61 74 20 73 74 72 69 6e 67 20 74 6f 20 62 65  mat string to be
1130: 20 75 73 65 64 20 77 68 65 6e 20 70 61 72 73 69   used when parsi
1140: 6e 67 20 61 6e 64 20 66 6f 72 6d 61 74 74 69 6e  ng and formattin
1150: 67 20 44 61 74 65 54 69 6d 65 0d 0a 20 20 20 20  g DateTime..    
1160: 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20  /// values...   
1170: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1180: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1190: 6d 65 3d 22 75 74 66 31 36 22 3e 0d 0a 20 20 20  me="utf16">..   
11a0: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f   /// Non-zero to
11b0: 20 63 72 65 61 74 65 20 61 20 55 54 46 2d 31 36   create a UTF-16
11c0: 20 64 61 74 61 2d 74 79 70 65 20 63 6f 6e 76 65   data-type conve
11d0: 72 73 69 6f 6e 20 63 6f 6e 74 65 78 74 3b 20 6f  rsion context; o
11e0: 74 68 65 72 77 69 73 65 2c 0d 0a 20 20 20 20 2f  therwise,..    /
11f0: 2f 2f 20 61 20 55 54 46 2d 38 20 64 61 74 61 2d  // a UTF-8 data-
1200: 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20  type conversion 
1210: 63 6f 6e 74 65 78 74 20 77 69 6c 6c 20 62 65 20  context will be 
1220: 63 72 65 61 74 65 64 2e 0d 0a 20 20 20 20 2f 2f  created...    //
1230: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1240: 70 72 6f 74 65 63 74 65 64 20 53 51 4c 69 74 65  protected SQLite
1250: 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
1260: 20 20 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72     SQLiteDateFor
1270: 6d 61 74 73 20 66 6f 72 6d 61 74 2c 0d 0a 20 20  mats format,..  
1280: 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 4b 69        DateTimeKi
1290: 6e 64 20 6b 69 6e 64 2c 0d 0a 20 20 20 20 20 20  nd kind,..      
12a0: 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 53    string formatS
12b0: 74 72 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  tring,..        
12c0: 62 6f 6f 6c 20 75 74 66 31 36 0d 0a 20 20 20 20  bool utf16..    
12d0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 3a      )..        :
12e0: 20 74 68 69 73 28 29 0d 0a 20 20 20 20 7b 0d 0a   this()..    {..
12f0: 20 20 20 20 20 20 20 20 69 66 20 28 75 74 66 31          if (utf1
1300: 36 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  6)..            
1310: 5f 62 61 73 65 20 3d 20 6e 65 77 20 53 51 4c 69  _base = new SQLi
1320: 74 65 33 5f 55 54 46 31 36 28 66 6f 72 6d 61 74  te3_UTF16(format
1330: 2c 20 6b 69 6e 64 2c 20 66 6f 72 6d 61 74 53 74  , kind, formatSt
1340: 72 69 6e 67 2c 20 49 6e 74 50 74 72 2e 5a 65 72  ring, IntPtr.Zer
1350: 6f 2c 20 6e 75 6c 6c 2c 20 66 61 6c 73 65 29 3b  o, null, false);
1360: 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a  ..        else..
1370: 20 20 20 20 20 20 20 20 20 20 20 20 5f 62 61 73              _bas
1380: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 33 28  e = new SQLite3(
1390: 66 6f 72 6d 61 74 2c 20 6b 69 6e 64 2c 20 66 6f  format, kind, fo
13a0: 72 6d 61 74 53 74 72 69 6e 67 2c 20 49 6e 74 50  rmatString, IntP
13b0: 74 72 2e 5a 65 72 6f 2c 20 6e 75 6c 6c 2c 20 66  tr.Zero, null, f
13c0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  alse);..    }...
13d0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1430: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
1440: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
1450: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 2f 2f 2f  Members..    ///
1460: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1470: 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 66 20  /// Disposes of 
1480: 61 6e 79 20 61 63 74 69 76 65 20 63 6f 6e 74 65  any active conte
1490: 78 74 44 61 74 61 20 76 61 72 69 61 62 6c 65 73  xtData variables
14a0: 20 74 68 61 74 20 77 65 72 65 20 6e 6f 74 20 61   that were not a
14b0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6c 65  utomatically cle
14c0: 61 6e 65 64 20 75 70 2e 20 20 53 6f 6d 65 74 69  aned up.  Someti
14d0: 6d 65 73 20 74 68 69 73 20 63 61 6e 20 68 61 70  mes this can hap
14e0: 70 65 6e 20 69 66 0d 0a 20 20 20 20 2f 2f 2f 20  pen if..    /// 
14f0: 73 6f 6d 65 6f 6e 65 20 63 6c 6f 73 65 73 20 74  someone closes t
1500: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68  he connection wh
1510: 69 6c 65 20 61 20 44 61 74 61 52 65 61 64 65 72  ile a DataReader
1520: 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f   is open...    /
1530: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1540: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
1550: 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 7b 0d  ispose()..    {.
1560: 0a 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65  .        Dispose
1570: 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  (true);..       
1580: 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61   GC.SuppressFina
1590: 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20  lize(this);..   
15a0: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
15b0: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
15c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1620: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
1630: 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d  able "Pattern" M
1640: 65 6d 62 65 72 73 0d 0a 20 20 20 20 70 72 69 76  embers..    priv
1650: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
1660: 64 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  d;..    private 
1670: 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73  void CheckDispos
1680: 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ed() /* throw */
1690: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52  ..    {..#if THR
16a0: 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a  OW_ON_DISPOSED..
16b0: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
16c0: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
16d0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a     throw new Obj
16e0: 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70  ectDisposedExcep
16f0: 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c 69  tion(typeof(SQLi
1700: 74 65 46 75 6e 63 74 69 6f 6e 29 2e 4e 61 6d 65  teFunction).Name
1710: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
1720: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
1730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1780: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1790: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
17a0: 20 20 20 2f 2f 2f 20 50 6c 61 63 65 68 6f 6c 64     /// Placehold
17b0: 65 72 20 66 6f 72 20 61 20 75 73 65 72 2d 64 65  er for a user-de
17c0: 66 69 6e 65 64 20 64 69 73 70 6f 73 61 6c 20 72  fined disposal r
17d0: 6f 75 74 69 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20  outine..    /// 
17e0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
17f0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1800: 22 64 69 73 70 6f 73 69 6e 67 22 3e 54 72 75 65  "disposing">True
1810: 20 69 66 20 74 68 65 20 6f 62 6a 65 63 74 20 69   if the object i
1820: 73 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64  s being disposed
1830: 20 65 78 70 6c 69 63 69 74 6c 79 3c 2f 70 61 72   explicitly</par
1840: 61 6d 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  am>..    protect
1850: 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20  ed virtual void 
1860: 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73  Dispose(bool dis
1870: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a  posing)..    {..
1880: 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
1890: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
18a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
18b0: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
18c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1900: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1910: 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
1920: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
1930: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
1940: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1980: 20 20 49 44 69 73 70 6f 73 61 62 6c 65 20 64 69    IDisposable di
1990: 73 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  sp;....         
19a0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
19b0: 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 49 6e 74  KeyValuePair<Int
19c0: 50 74 72 2c 20 41 67 67 72 65 67 61 74 65 44 61  Ptr, AggregateDa
19d0: 74 61 3e 20 6b 76 20 69 6e 20 5f 63 6f 6e 74 65  ta> kv in _conte
19e0: 78 74 44 61 74 61 4c 69 73 74 29 0d 0a 20 20 20  xtDataList)..   
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a10: 20 20 20 20 64 69 73 70 20 3d 20 6b 76 2e 56 61      disp = kv.Va
1a20: 6c 75 65 2e 5f 64 61 74 61 20 61 73 20 49 44 69  lue._data as IDi
1a30: 73 70 6f 73 61 62 6c 65 3b 0d 0a 20 20 20 20 20  sposable;..     
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a50: 66 20 28 64 69 73 70 20 21 3d 20 6e 75 6c 6c 29  f (disp != null)
1a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a70: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 2e 44            disp.D
1a80: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
1a90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 63                _c
1ab0: 6f 6e 74 65 78 74 44 61 74 61 4c 69 73 74 2e 43  ontextDataList.C
1ac0: 6c 65 61 72 28 29 3b 0d 0a 20 20 20 20 20 20 20  lear();..       
1ad0: 20 20 20 20 20 20 20 20 20 5f 63 6f 6e 74 65 78           _contex
1ae0: 74 44 61 74 61 4c 69 73 74 20 3d 20 6e 75 6c 6c  tDataList = null
1af0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1b00: 20 20 20 20 20 5f 66 6c 61 67 73 20 3d 20 53 51       _flags = SQ
1b10: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
1b20: 61 67 73 2e 4e 6f 6e 65 3b 0d 0a 0d 0a 20 20 20  ags.None;....   
1b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 49 6e               _In
1b40: 76 6f 6b 65 46 75 6e 63 20 3d 20 6e 75 6c 6c 3b  vokeFunc = null;
1b50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b60: 20 20 5f 53 74 65 70 46 75 6e 63 20 3d 20 6e 75    _StepFunc = nu
1b70: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
1b80: 20 20 20 20 20 5f 46 69 6e 61 6c 46 75 6e 63 20       _FinalFunc 
1b90: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
1ba0: 20 20 20 20 20 20 20 20 20 5f 43 6f 6d 70 61 72           _Compar
1bb0: 65 46 75 6e 63 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  eFunc = null;.. 
1bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
1bd0: 62 61 73 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  base = null;..  
1be0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1bf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c20: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
1c30: 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61  / release unmana
1c40: 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65  ged resources he
1c50: 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20  re.....         
1c60: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1c90: 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65           dispose
1ca0: 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
1cb0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20     }..    }..   
1cc0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1cd0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d30: 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
1d40: 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
1d50: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1d60: 0a 20 20 20 20 2f 2f 2f 20 43 6c 65 61 6e 73 20  .    /// Cleans 
1d70: 75 70 20 72 65 73 6f 75 72 63 65 73 20 61 73 73  up resources ass
1d80: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
1d90: 20 63 75 72 72 65 6e 74 20 69 6e 73 74 61 6e 63   current instanc
1da0: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
1db0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 7e 53 51 4c  mmary>..    ~SQL
1dc0: 69 74 65 46 75 6e 63 74 69 6f 6e 28 29 0d 0a 20  iteFunction().. 
1dd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 69     {..        Di
1de0: 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20  spose(false);.. 
1df0: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
1e00: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
1e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1e70: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1e80: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
1e90: 73 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 6f  s a reference to
1ea0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
1eb0: 63 6f 6e 6e 65 63 74 69 6f 6e 27 73 20 53 51 4c  connection's SQL
1ec0: 69 74 65 43 6f 6e 76 65 72 74 20 63 6c 61 73 73  iteConvert class
1ed0: 2c 20 77 68 69 63 68 20 63 61 6e 20 62 65 20 75  , which can be u
1ee0: 73 65 64 20 74 6f 20 63 6f 6e 76 65 72 74 0d 0a  sed to convert..
1ef0: 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 73 20      /// strings 
1f00: 61 6e 64 20 44 61 74 65 54 69 6d 65 27 73 20 69  and DateTime's i
1f10: 6e 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20  nto the current 
1f20: 63 6f 6e 6e 65 63 74 69 6f 6e 27 73 20 65 6e 63  connection's enc
1f30: 6f 64 69 6e 67 20 73 63 68 65 6d 61 2e 0d 0a 20  oding schema... 
1f40: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1f50: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 53 51  >..    public SQ
1f60: 4c 69 74 65 43 6f 6e 76 65 72 74 20 53 51 4c 69  LiteConvert SQLi
1f70: 74 65 43 6f 6e 76 65 72 74 0d 0a 20 20 20 20 7b  teConvert..    {
1f80: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
1f90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
1fa0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
1fb0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
1fc0: 62 61 73 65 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  base;..      }..
1fd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
1fe0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1ff0: 2f 2f 2f 20 53 63 61 6c 61 72 20 66 75 6e 63 74  /// Scalar funct
2000: 69 6f 6e 73 20 6f 76 65 72 72 69 64 65 20 74 68  ions override th
2010: 69 73 20 6d 65 74 68 6f 64 20 74 6f 20 64 6f 20  is method to do 
2020: 74 68 65 69 72 20 6d 61 67 69 63 2e 0d 0a 20 20  their magic...  
2030: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2040: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72  ..    /// <remar
2050: 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 50 61 72  ks>..    /// Par
2060: 61 6d 65 74 65 72 73 20 70 61 73 73 65 64 20 74  ameters passed t
2070: 6f 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65  o functions have
2080: 20 6f 6e 6c 79 20 61 6e 20 61 66 66 69 6e 69 74   only an affinit
2090: 79 20 66 6f 72 20 61 20 63 65 72 74 61 69 6e 20  y for a certain 
20a0: 64 61 74 61 20 74 79 70 65 2c 20 74 68 65 72 65  data type, there
20b0: 20 69 73 20 6e 6f 20 75 6e 64 65 72 6c 79 69 6e   is no underlyin
20c0: 67 20 73 63 68 65 6d 61 20 61 76 61 69 6c 61 62  g schema availab
20d0: 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 66  le..    /// to f
20e0: 6f 72 63 65 20 74 68 65 6d 20 69 6e 74 6f 20 61  orce them into a
20f0: 20 63 65 72 74 61 69 6e 20 74 79 70 65 2e 20 20   certain type.  
2100: 54 68 65 72 65 66 6f 72 65 20 74 68 65 20 6f 6e  Therefore the on
2110: 6c 79 20 74 79 70 65 73 20 79 6f 75 20 77 69 6c  ly types you wil
2120: 6c 20 65 76 65 72 20 73 65 65 20 61 73 20 70 61  l ever see as pa
2130: 72 61 6d 65 74 65 72 73 20 61 72 65 0d 0a 20 20  rameters are..  
2140: 20 20 2f 2f 2f 20 44 42 4e 75 6c 6c 2e 56 61 6c    /// DBNull.Val
2150: 75 65 2c 20 49 6e 74 36 34 2c 20 44 6f 75 62 6c  ue, Int64, Doubl
2160: 65 2c 20 53 74 72 69 6e 67 20 6f 72 20 62 79 74  e, String or byt
2170: 65 5b 5d 20 61 72 72 61 79 2e 0d 0a 20 20 20 20  e[] array...    
2180: 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a  /// </remarks>..
2190: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
21a0: 61 6d 65 3d 22 61 72 67 73 22 3e 54 68 65 20 61  ame="args">The a
21b0: 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68 65  rguments for the
21c0: 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 70 72 6f 63   command to proc
21d0: 65 73 73 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ess</param>..   
21e0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 59 6f   /// <returns>Yo
21f0: 75 20 6d 61 79 20 72 65 74 75 72 6e 20 6d 6f 73  u may return mos
2200: 74 20 73 69 6d 70 6c 65 20 74 79 70 65 73 20 61  t simple types a
2210: 73 20 61 20 72 65 74 75 72 6e 20 76 61 6c 75 65  s a return value
2220: 2c 20 6e 75 6c 6c 20 6f 72 20 44 42 4e 75 6c 6c  , null or DBNull
2230: 2e 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e  .Value to return
2240: 20 6e 75 6c 6c 2c 20 44 61 74 65 54 69 6d 65 2c   null, DateTime,
2250: 20 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 79 6f 75   or..    /// you
2260: 20 6d 61 79 20 72 65 74 75 72 6e 20 61 6e 20 45   may return an E
2270: 78 63 65 70 74 69 6f 6e 2d 64 65 72 69 76 65 64  xception-derived
2280: 20 63 6c 61 73 73 20 69 66 20 79 6f 75 20 77 69   class if you wi
2290: 73 68 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20  sh to return an 
22a0: 65 72 72 6f 72 20 74 6f 20 53 51 4c 69 74 65 2e  error to SQLite.
22b0: 20 20 44 6f 20 6e 6f 74 20 61 63 74 75 61 6c 6c    Do not actuall
22c0: 79 20 74 68 72 6f 77 20 74 68 65 20 65 72 72 6f  y throw the erro
22d0: 72 2c 0d 0a 20 20 20 20 2f 2f 2f 20 6a 75 73 74  r,..    /// just
22e0: 20 72 65 74 75 72 6e 20 69 74 21 3c 2f 72 65 74   return it!</ret
22f0: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
2300: 63 20 76 69 72 74 75 61 6c 20 6f 62 6a 65 63 74  c virtual object
2310: 20 49 6e 76 6f 6b 65 28 6f 62 6a 65 63 74 5b 5d   Invoke(object[]
2320: 20 61 72 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20   args)..    {.. 
2330: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2340: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 72 65 74  ed();..      ret
2350: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 7d  urn null;..    }
2360: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2370: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  mary>..    /// A
2380: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
2390: 6e 73 20 6f 76 65 72 72 69 64 65 20 74 68 69 73  ns override this
23a0: 20 6d 65 74 68 6f 64 20 74 6f 20 64 6f 20 74 68   method to do th
23b0: 65 69 72 20 6d 61 67 69 63 2e 0d 0a 20 20 20 20  eir magic...    
23c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
23d0: 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73      /// <remarks
23e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 79 70 69 63  >..    /// Typic
23f0: 61 6c 6c 79 20 79 6f 75 27 6c 6c 20 62 65 20 75  ally you'll be u
2400: 70 64 61 74 69 6e 67 20 77 68 61 74 65 76 65 72  pdating whatever
2410: 20 79 6f 75 27 76 65 20 70 6c 61 63 65 64 20 69   you've placed i
2420: 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 44 61 74  n the contextDat
2430: 61 20 66 69 65 6c 64 20 61 6e 64 20 72 65 74 75  a field and retu
2440: 72 6e 69 6e 67 20 61 73 20 71 75 69 63 6b 6c 79  rning as quickly
2450: 20 61 73 20 70 6f 73 73 69 62 6c 65 2e 0d 0a 20   as possible... 
2460: 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73     /// </remarks
2470: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
2480: 6d 20 6e 61 6d 65 3d 22 61 72 67 73 22 3e 54 68  m name="args">Th
2490: 65 20 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20  e arguments for 
24a0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 70  the command to p
24b0: 72 6f 63 65 73 73 3c 2f 70 61 72 61 6d 3e 0d 0a  rocess</param>..
24c0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
24d0: 61 6d 65 3d 22 73 74 65 70 4e 75 6d 62 65 72 22  ame="stepNumber"
24e0: 3e 54 68 65 20 31 2d 62 61 73 65 64 20 73 74 65  >The 1-based ste
24f0: 70 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20  p number.  This 
2500: 69 73 20 69 6e 63 72 65 6d 65 6d 74 65 64 20 65  is incrememted e
2510: 61 63 68 20 74 69 6d 65 20 74 68 65 20 73 74 65  ach time the ste
2520: 70 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c  p method is call
2530: 65 64 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ed.</param>..   
2540: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2550: 3d 22 63 6f 6e 74 65 78 74 44 61 74 61 22 3e 41  ="contextData">A
2560: 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 66 6f 72   placeholder for
2570: 20 69 6d 70 6c 65 6d 65 6e 74 65 72 73 20 74 6f   implementers to
2580: 20 73 74 6f 72 65 20 63 6f 6e 74 65 78 74 75 61   store contextua
2590: 6c 20 64 61 74 61 20 70 65 72 74 61 69 6e 69 6e  l data pertainin
25a0: 67 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  g to the current
25b0: 20 63 6f 6e 74 65 78 74 2e 3c 2f 70 61 72 61 6d   context.</param
25c0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 76 69  >..    public vi
25d0: 72 74 75 61 6c 20 76 6f 69 64 20 53 74 65 70 28  rtual void Step(
25e0: 6f 62 6a 65 63 74 5b 5d 20 61 72 67 73 2c 20 69  object[] args, i
25f0: 6e 74 20 73 74 65 70 4e 75 6d 62 65 72 2c 20 72  nt stepNumber, r
2600: 65 66 20 6f 62 6a 65 63 74 20 63 6f 6e 74 65 78  ef object contex
2610: 74 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d 0a 20  tData)..    {.. 
2620: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2630: 65 64 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ed();..    }....
2640: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2650: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 67 67 72 65  >..    /// Aggre
2660: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f  gate functions o
2670: 76 65 72 72 69 64 65 20 74 68 69 73 20 6d 65 74  verride this met
2680: 68 6f 64 20 74 6f 20 66 69 6e 69 73 68 20 74 68  hod to finish th
2690: 65 69 72 20 61 67 67 72 65 67 61 74 65 20 70 72  eir aggregate pr
26a0: 6f 63 65 73 73 69 6e 67 2e 0d 0a 20 20 20 20 2f  ocessing...    /
26b0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
26c0: 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e     /// <remarks>
26d0: 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 79 6f 75  ..    /// If you
26e0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 79 6f 75   implemented you
26f0: 72 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  r aggregate func
2700: 74 69 6f 6e 20 70 72 6f 70 65 72 6c 79 2c 0d 0a  tion properly,..
2710: 20 20 20 20 2f 2f 2f 20 79 6f 75 27 76 65 20 62      /// you've b
2720: 65 65 6e 20 72 65 63 6f 72 64 69 6e 67 20 61 6e  een recording an
2730: 64 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20  d keeping track 
2740: 6f 66 20 79 6f 75 72 20 64 61 74 61 20 69 6e 20  of your data in 
2750: 74 68 65 20 63 6f 6e 74 65 78 74 44 61 74 61 20  the contextData 
2760: 6f 62 6a 65 63 74 20 70 72 6f 76 69 64 65 64 2c  object provided,
2770: 20 61 6e 64 20 6e 6f 77 20 61 74 20 74 68 69 73   and now at this
2780: 20 73 74 61 67 65 20 79 6f 75 20 73 68 6f 75 6c   stage you shoul
2790: 64 20 68 61 76 65 0d 0a 20 20 20 20 2f 2f 2f 20  d have..    /// 
27a0: 61 6c 6c 20 74 68 65 20 69 6e 66 6f 72 6d 61 74  all the informat
27b0: 69 6f 6e 20 79 6f 75 20 6e 65 65 64 20 69 6e 20  ion you need in 
27c0: 74 68 65 72 65 20 74 6f 20 66 69 67 75 72 65 20  there to figure 
27d0: 6f 75 74 20 77 68 61 74 20 74 6f 20 72 65 74 75  out what to retu
27e0: 72 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 4f 54  rn...    /// NOT
27f0: 45 3a 20 20 49 74 20 69 73 20 70 6f 73 73 69 62  E:  It is possib
2800: 6c 65 20 74 6f 20 61 72 72 69 76 65 20 68 65 72  le to arrive her
2810: 65 20 77 69 74 68 6f 75 74 20 72 65 63 65 69 76  e without receiv
2820: 69 6e 67 20 61 20 70 72 65 76 69 6f 75 73 20 63  ing a previous c
2830: 61 6c 6c 20 74 6f 20 53 74 65 70 28 29 2c 20 69  all to Step(), i
2840: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
2850: 20 63 6f 6e 74 65 78 74 44 61 74 61 20 77 69 6c   contextData wil
2860: 6c 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20 6e 75  l..    /// be nu
2870: 6c 6c 2e 20 20 54 68 69 73 20 63 61 6e 20 68 61  ll.  This can ha
2880: 70 70 65 6e 20 77 68 65 6e 20 6e 6f 20 72 6f 77  ppen when no row
2890: 73 20 77 65 72 65 20 72 65 74 75 72 6e 65 64 2e  s were returned.
28a0: 20 20 59 6f 75 20 63 61 6e 20 65 69 74 68 65 72    You can either
28b0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 2c 20 6f 72   return null, or
28c0: 20 30 20 6f 72 20 73 6f 6d 65 20 6f 74 68 65 72   0 or some other
28d0: 20 63 75 73 74 6f 6d 20 72 65 74 75 72 6e 20 76   custom return v
28e0: 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 66  alue..    /// if
28f0: 20 74 68 61 74 20 69 73 20 74 68 65 20 63 61 73   that is the cas
2900: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  e...    /// </re
2910: 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  marks>..    /// 
2920: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e  <param name="con
2930: 74 65 78 74 44 61 74 61 22 3e 59 6f 75 72 20 6f  textData">Your o
2940: 77 6e 20 61 73 73 69 67 6e 65 64 20 63 6f 6e 74  wn assigned cont
2950: 65 78 74 44 61 74 61 2c 20 70 72 6f 76 69 64 65  extData, provide
2960: 64 20 66 6f 72 20 79 6f 75 20 73 6f 20 79 6f 75  d for you so you
2970: 20 63 61 6e 20 72 65 74 75 72 6e 20 79 6f 75 72   can return your
2980: 20 66 69 6e 61 6c 20 72 65 73 75 6c 74 73 2e 3c   final results.<
2990: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
29a0: 20 3c 72 65 74 75 72 6e 73 3e 59 6f 75 20 6d 61   <returns>You ma
29b0: 79 20 72 65 74 75 72 6e 20 6d 6f 73 74 20 73 69  y return most si
29c0: 6d 70 6c 65 20 74 79 70 65 73 20 61 73 20 61 20  mple types as a 
29d0: 72 65 74 75 72 6e 20 76 61 6c 75 65 2c 20 6e 75  return value, nu
29e0: 6c 6c 20 6f 72 20 44 42 4e 75 6c 6c 2e 56 61 6c  ll or DBNull.Val
29f0: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 6e 75 6c  ue to return nul
2a00: 6c 2c 20 44 61 74 65 54 69 6d 65 2c 20 6f 72 0d  l, DateTime, or.
2a10: 0a 20 20 20 20 2f 2f 2f 20 79 6f 75 20 6d 61 79  .    /// you may
2a20: 20 72 65 74 75 72 6e 20 61 6e 20 45 78 63 65 70   return an Excep
2a30: 74 69 6f 6e 2d 64 65 72 69 76 65 64 20 63 6c 61  tion-derived cla
2a40: 73 73 20 69 66 20 79 6f 75 20 77 69 73 68 20 74  ss if you wish t
2a50: 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  o return an erro
2a60: 72 20 74 6f 20 53 51 4c 69 74 65 2e 20 20 44 6f  r to SQLite.  Do
2a70: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 74 68   not actually th
2a80: 72 6f 77 20 74 68 65 20 65 72 72 6f 72 2c 0d 0a  row the error,..
2a90: 20 20 20 20 2f 2f 2f 20 6a 75 73 74 20 72 65 74      /// just ret
2aa0: 75 72 6e 20 69 74 21 0d 0a 20 20 20 20 2f 2f 2f  urn it!..    ///
2ab0: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2ac0: 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20   public virtual 
2ad0: 6f 62 6a 65 63 74 20 46 69 6e 61 6c 28 6f 62 6a  object Final(obj
2ae0: 65 63 74 20 63 6f 6e 74 65 78 74 44 61 74 61 29  ect contextData)
2af0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43  ..    {..      C
2b00: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
2b10: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75  .      return nu
2b20: 6c 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ll;..    }....  
2b30: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2b40: 0a 20 20 20 20 2f 2f 2f 20 55 73 65 72 2d 64 65  .    /// User-de
2b50: 66 69 6e 65 64 20 63 6f 6c 6c 61 74 69 6e 67 20  fined collating 
2b60: 73 65 71 75 65 6e 63 65 73 20 6f 76 65 72 72 69  sequences overri
2b70: 64 65 20 74 68 69 73 20 6d 65 74 68 6f 64 20 74  de this method t
2b80: 6f 20 70 72 6f 76 69 64 65 20 61 20 63 75 73 74  o provide a cust
2b90: 6f 6d 20 73 74 72 69 6e 67 20 73 6f 72 74 69 6e  om string sortin
2ba0: 67 20 61 6c 67 6f 72 69 74 68 6d 2e 0d 0a 20 20  g algorithm...  
2bb0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2bc0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
2bd0: 20 6e 61 6d 65 3d 22 70 61 72 61 6d 31 22 3e 54   name="param1">T
2be0: 68 65 20 66 69 72 73 74 20 73 74 72 69 6e 67 20  he first string 
2bf0: 74 6f 20 63 6f 6d 70 61 72 65 2e 3c 2f 70 61 72  to compare.</par
2c00: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
2c10: 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d 32  ram name="param2
2c20: 22 3e 54 68 65 20 73 65 63 6f 6e 64 20 73 74 72  ">The second str
2c30: 6e 69 67 20 74 6f 20 63 6f 6d 70 61 72 65 2e 3c  nig to compare.<
2c40: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
2c50: 20 3c 72 65 74 75 72 6e 73 3e 31 20 69 66 20 70   <returns>1 if p
2c60: 61 72 61 6d 31 20 69 73 20 67 72 65 61 74 65 72  aram1 is greater
2c70: 20 74 68 61 6e 20 70 61 72 61 6d 32 2c 20 30 20   than param2, 0 
2c80: 69 66 20 74 68 65 79 20 61 72 65 20 65 71 75 61  if they are equa
2c90: 6c 2c 20 6f 72 20 2d 31 20 69 66 20 70 61 72 61  l, or -1 if para
2ca0: 6d 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  m1 is less than 
2cb0: 70 61 72 61 6d 32 2e 3c 2f 72 65 74 75 72 6e 73  param2.</returns
2cc0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 76 69  >..    public vi
2cd0: 72 74 75 61 6c 20 69 6e 74 20 43 6f 6d 70 61 72  rtual int Compar
2ce0: 65 28 73 74 72 69 6e 67 20 70 61 72 61 6d 31 2c  e(string param1,
2cf0: 20 73 74 72 69 6e 67 20 70 61 72 61 6d 32 29 0d   string param2).
2d00: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68  .    {..      Ch
2d10: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
2d20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d        return 0;.
2d30: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
2d40: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2d50: 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 6e   /// Converts an
2d60: 20 49 6e 74 50 74 72 20 61 72 72 61 79 20 6f 66   IntPtr array of
2d70: 20 63 6f 6e 74 65 78 74 20 61 72 67 75 6d 65 6e   context argumen
2d80: 74 73 20 74 6f 20 61 6e 20 6f 62 6a 65 63 74 20  ts to an object 
2d90: 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 69 6e 67  array containing
2da0: 20 74 68 65 20 72 65 73 6f 6c 76 65 64 20 70 61   the resolved pa
2db0: 72 61 6d 65 74 65 72 73 20 74 68 65 20 70 6f 69  rameters the poi
2dc0: 6e 74 65 72 73 20 70 6f 69 6e 74 20 74 6f 2e 0d  nters point to..
2dd0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
2de0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
2df0: 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  marks>..    /// 
2e00: 50 61 72 61 6d 65 74 65 72 73 20 70 61 73 73 65  Parameters passe
2e10: 64 20 74 6f 20 66 75 6e 63 74 69 6f 6e 73 20 68  d to functions h
2e20: 61 76 65 20 6f 6e 6c 79 20 61 6e 20 61 66 66 69  ave only an affi
2e30: 6e 69 74 79 20 66 6f 72 20 61 20 63 65 72 74 61  nity for a certa
2e40: 69 6e 20 64 61 74 61 20 74 79 70 65 2c 20 74 68  in data type, th
2e50: 65 72 65 20 69 73 20 6e 6f 20 75 6e 64 65 72 6c  ere is no underl
2e60: 79 69 6e 67 20 73 63 68 65 6d 61 20 61 76 61 69  ying schema avai
2e70: 6c 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 74  lable..    /// t
2e80: 6f 20 66 6f 72 63 65 20 74 68 65 6d 20 69 6e 74  o force them int
2e90: 6f 20 61 20 63 65 72 74 61 69 6e 20 74 79 70 65  o a certain type
2ea0: 2e 20 20 54 68 65 72 65 66 6f 72 65 20 74 68 65  .  Therefore the
2eb0: 20 6f 6e 6c 79 20 74 79 70 65 73 20 79 6f 75 20   only types you 
2ec0: 77 69 6c 6c 20 65 76 65 72 20 73 65 65 20 61 73  will ever see as
2ed0: 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 0d   parameters are.
2ee0: 0a 20 20 20 20 2f 2f 2f 20 44 42 4e 75 6c 6c 2e  .    /// DBNull.
2ef0: 56 61 6c 75 65 2c 20 49 6e 74 36 34 2c 20 44 6f  Value, Int64, Do
2f00: 75 62 6c 65 2c 20 53 74 72 69 6e 67 20 6f 72 20  uble, String or 
2f10: 62 79 74 65 5b 5d 20 61 72 72 61 79 2e 0d 0a 20  byte[] array... 
2f20: 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73     /// </remarks
2f30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
2f40: 6d 20 6e 61 6d 65 3d 22 6e 41 72 67 73 22 3e 54  m name="nArgs">T
2f50: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
2f60: 75 6d 65 6e 74 73 3c 2f 70 61 72 61 6d 3e 0d 0a  uments</param>..
2f70: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2f80: 61 6d 65 3d 22 61 72 67 73 70 74 72 22 3e 41 20  ame="argsptr">A 
2f90: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 61  pointer to the a
2fa0: 72 72 61 79 20 6f 66 20 61 72 67 75 6d 65 6e 74  rray of argument
2fb0: 73 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  s</param>..    /
2fc0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 6e 20 6f  // <returns>An o
2fd0: 62 6a 65 63 74 20 61 72 72 61 79 20 6f 66 20 74  bject array of t
2fe0: 68 65 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 63  he arguments onc
2ff0: 65 20 74 68 65 79 27 76 65 20 62 65 65 6e 20 63  e they've been c
3000: 6f 6e 76 65 72 74 65 64 20 74 6f 20 2e 4e 45 54  onverted to .NET
3010: 20 76 61 6c 75 65 73 3c 2f 72 65 74 75 72 6e 73   values</returns
3020: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
3030: 6f 62 6a 65 63 74 5b 5d 20 43 6f 6e 76 65 72 74  object[] Convert
3040: 50 61 72 61 6d 73 28 69 6e 74 20 6e 41 72 67 73  Params(int nArgs
3050: 2c 20 49 6e 74 50 74 72 20 61 72 67 73 70 74 72  , IntPtr argsptr
3060: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3070: 6f 62 6a 65 63 74 5b 5d 20 70 61 72 6d 73 20 3d  object[] parms =
3080: 20 6e 65 77 20 6f 62 6a 65 63 74 5b 6e 41 72 67   new object[nArg
3090: 73 5d 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  s];..#if !PLATFO
30a0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
30b0: 4f 52 4b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ORK..      IntPt
30c0: 72 5b 5d 20 61 72 67 69 6e 74 20 3d 20 6e 65 77  r[] argint = new
30d0: 20 49 6e 74 50 74 72 5b 6e 41 72 67 73 5d 3b 0d   IntPtr[nArgs];.
30e0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 69 6e  .#else..      in
30f0: 74 5b 5d 20 61 72 67 69 6e 74 20 3d 20 6e 65 77  t[] argint = new
3100: 20 69 6e 74 5b 6e 41 72 67 73 5d 3b 0d 0a 23 65   int[nArgs];..#e
3110: 6e 64 69 66 0d 0a 20 20 20 20 20 20 4d 61 72 73  ndif..      Mars
3120: 68 61 6c 2e 43 6f 70 79 28 61 72 67 73 70 74 72  hal.Copy(argsptr
3130: 2c 20 61 72 67 69 6e 74 2c 20 30 2c 20 6e 41 72  , argint, 0, nAr
3140: 67 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f  gs);....      fo
3150: 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20  r (int n = 0; n 
3160: 3c 20 6e 41 72 67 73 3b 20 6e 2b 2b 29 0d 0a 20  < nArgs; n++).. 
3170: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3180: 73 77 69 74 63 68 20 28 5f 62 61 73 65 2e 47 65  switch (_base.Ge
3190: 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28  tParamValueType(
31a0: 28 49 6e 74 50 74 72 29 61 72 67 69 6e 74 5b 6e  (IntPtr)argint[n
31b0: 5d 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ]))..        {..
31c0: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54            case T
31d0: 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c  ypeAffinity.Null
31e0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  :..            p
31f0: 61 72 6d 73 5b 6e 5d 20 3d 20 44 42 4e 75 6c 6c  arms[n] = DBNull
3200: 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  .Value;..       
3210: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
3220: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
3230: 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d  Affinity.Int64:.
3240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72  .            par
3250: 6d 73 5b 6e 5d 20 3d 20 5f 62 61 73 65 2e 47 65  ms[n] = _base.Ge
3260: 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 36 34  tParamValueInt64
3270: 28 28 49 6e 74 50 74 72 29 61 72 67 69 6e 74 5b  ((IntPtr)argint[
3280: 6e 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n]);..          
3290: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
32a0: 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
32b0: 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20  inity.Double:.. 
32c0: 20 20 20 20 20 20 20 20 20 20 20 70 61 72 6d 73             parms
32d0: 5b 6e 5d 20 3d 20 5f 62 61 73 65 2e 47 65 74 50  [n] = _base.GetP
32e0: 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65 28  aramValueDouble(
32f0: 28 49 6e 74 50 74 72 29 61 72 67 69 6e 74 5b 6e  (IntPtr)argint[n
3300: 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]);..           
3310: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
3320: 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
3330: 6e 69 74 79 2e 54 65 78 74 3a 0d 0a 20 20 20 20  nity.Text:..    
3340: 20 20 20 20 20 20 20 20 70 61 72 6d 73 5b 6e 5d          parms[n]
3350: 20 3d 20 5f 62 61 73 65 2e 47 65 74 50 61 72 61   = _base.GetPara
3360: 6d 56 61 6c 75 65 54 65 78 74 28 28 49 6e 74 50  mValueText((IntP
3370: 74 72 29 61 72 67 69 6e 74 5b 6e 5d 29 3b 0d 0a  tr)argint[n]);..
3380: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3390: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61  k;..          ca
33a0: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
33b0: 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 20  Blob:..         
33c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33d0: 20 20 20 20 69 6e 74 20 78 3b 0d 0a 20 20 20 20      int x;..    
33e0: 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
33f0: 20 62 6c 6f 62 3b 0d 0a 0d 0a 20 20 20 20 20 20   blob;....      
3400: 20 20 20 20 20 20 20 20 78 20 3d 20 28 69 6e 74          x = (int
3410: 29 5f 62 61 73 65 2e 47 65 74 50 61 72 61 6d 56  )_base.GetParamV
3420: 61 6c 75 65 42 79 74 65 73 28 28 49 6e 74 50 74  alueBytes((IntPt
3430: 72 29 61 72 67 69 6e 74 5b 6e 5d 2c 20 30 2c 20  r)argint[n], 0, 
3440: 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20 20  null, 0, 0);..  
3450: 20 20 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62              blob
3460: 20 3d 20 6e 65 77 20 62 79 74 65 5b 78 5d 3b 0d   = new byte[x];.
3470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
3480: 62 61 73 65 2e 47 65 74 50 61 72 61 6d 56 61 6c  base.GetParamVal
3490: 75 65 42 79 74 65 73 28 28 49 6e 74 50 74 72 29  ueBytes((IntPtr)
34a0: 61 72 67 69 6e 74 5b 6e 5d 2c 20 30 2c 20 62 6c  argint[n], 0, bl
34b0: 6f 62 2c 20 30 2c 20 78 29 3b 0d 0a 20 20 20 20  ob, 0, x);..    
34c0: 20 20 20 20 20 20 20 20 20 20 70 61 72 6d 73 5b            parms[
34d0: 6e 5d 20 3d 20 62 6c 6f 62 3b 0d 0a 20 20 20 20  n] = blob;..    
34e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
34f0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
3500: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79           case Ty
3510: 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54  peAffinity.DateT
3520: 69 6d 65 3a 20 2f 2f 20 4e 65 76 65 72 20 68 61  ime: // Never ha
3530: 70 70 65 6e 73 20 68 65 72 65 20 62 75 74 20 77  ppens here but w
3540: 68 61 74 20 74 68 65 20 68 65 63 6b 2c 20 6d 61  hat the heck, ma
3550: 79 62 65 20 69 74 20 77 69 6c 6c 20 6f 6e 65 20  ybe it will one 
3560: 64 61 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  day...          
3570: 20 20 70 61 72 6d 73 5b 6e 5d 20 3d 20 5f 62 61    parms[n] = _ba
3580: 73 65 2e 54 6f 44 61 74 65 54 69 6d 65 28 5f 62  se.ToDateTime(_b
3590: 61 73 65 2e 47 65 74 50 61 72 61 6d 56 61 6c 75  ase.GetParamValu
35a0: 65 54 65 78 74 28 28 49 6e 74 50 74 72 29 61 72  eText((IntPtr)ar
35b0: 67 69 6e 74 5b 6e 5d 29 29 3b 0d 0a 20 20 20 20  gint[n]));..    
35c0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
35d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
35e0: 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   }..      return
35f0: 20 70 61 72 6d 73 3b 0d 0a 20 20 20 20 7d 0d 0a   parms;..    }..
3600: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
3610: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 61 6b  ry>..    /// Tak
3620: 65 73 20 74 68 65 20 72 65 74 75 72 6e 20 76 61  es the return va
3630: 6c 75 65 20 66 72 6f 6d 20 49 6e 76 6f 6b 65 28  lue from Invoke(
3640: 29 20 61 6e 64 20 46 69 6e 61 6c 28 29 20 61 6e  ) and Final() an
3650: 64 20 66 69 67 75 72 65 73 20 6f 75 74 20 68 6f  d figures out ho
3660: 77 20 74 6f 20 72 65 74 75 72 6e 20 69 74 20 74  w to return it t
3670: 6f 20 53 51 4c 69 74 65 27 73 20 63 6f 6e 74 65  o SQLite's conte
3680: 78 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  xt...    /// </s
3690: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
36a0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f   <param name="co
36b0: 6e 74 65 78 74 22 3e 54 68 65 20 63 6f 6e 74 65  ntext">The conte
36c0: 78 74 20 74 68 65 20 72 65 74 75 72 6e 20 76 61  xt the return va
36d0: 6c 75 65 20 61 70 70 6c 69 65 73 20 74 6f 3c 2f  lue applies to</
36e0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
36f0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74  <param name="ret
3700: 75 72 6e 56 61 6c 75 65 22 3e 54 68 65 20 70 61  urnValue">The pa
3710: 72 61 6d 65 74 65 72 20 74 6f 20 72 65 74 75 72  rameter to retur
3720: 6e 20 74 6f 20 53 51 4c 69 74 65 3c 2f 70 61 72  n to SQLite</par
3730: 61 6d 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  am>..    private
3740: 20 76 6f 69 64 20 53 65 74 52 65 74 75 72 6e 56   void SetReturnV
3750: 61 6c 75 65 28 49 6e 74 50 74 72 20 63 6f 6e 74  alue(IntPtr cont
3760: 65 78 74 2c 20 6f 62 6a 65 63 74 20 72 65 74 75  ext, object retu
3770: 72 6e 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  rnValue)..    {.
3780: 0a 20 20 20 20 20 20 69 66 20 28 72 65 74 75 72  .      if (retur
3790: 6e 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 20 7c  nValue == null |
37a0: 7c 20 72 65 74 75 72 6e 56 61 6c 75 65 20 3d 3d  | returnValue ==
37b0: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 29 0d 0a   DBNull.Value)..
37c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37d0: 20 5f 62 61 73 65 2e 52 65 74 75 72 6e 4e 75 6c   _base.ReturnNul
37e0: 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20  l(context);..   
37f0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20       return;..  
3800: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 54      }....      T
3810: 79 70 65 20 74 20 3d 20 72 65 74 75 72 6e 56 61  ype t = returnVa
3820: 6c 75 65 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a  lue.GetType();..
3830: 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
3840: 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29 29  ypeof(DateTime))
3850: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
3860: 20 20 20 5f 62 61 73 65 2e 52 65 74 75 72 6e 54     _base.ReturnT
3870: 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 5f 62 61  ext(context, _ba
3880: 73 65 2e 54 6f 53 74 72 69 6e 67 28 28 44 61 74  se.ToString((Dat
3890: 65 54 69 6d 65 29 72 65 74 75 72 6e 56 61 6c 75  eTime)returnValu
38a0: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  e));..        re
38b0: 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  turn;..      }..
38c0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
38d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 45 78 63    {..        Exc
38e0: 65 70 74 69 6f 6e 20 72 20 3d 20 72 65 74 75 72  eption r = retur
38f0: 6e 56 61 6c 75 65 20 61 73 20 45 78 63 65 70 74  nValue as Except
3900: 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ion;....        
3910: 69 66 20 28 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a  if (r != null)..
3920: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3930: 20 20 20 20 20 5f 62 61 73 65 2e 52 65 74 75 72       _base.Retur
3940: 6e 45 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20  nError(context, 
3950: 72 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20  r.Message);..   
3960: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
3970: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3980: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74   }....      swit
3990: 63 68 20 28 53 51 4c 69 74 65 43 6f 6e 76 65 72  ch (SQLiteConver
39a0: 74 2e 54 79 70 65 54 6f 41 66 66 69 6e 69 74 79  t.TypeToAffinity
39b0: 28 74 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  (t))..      {.. 
39c0: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
39d0: 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 3a 0d 0a  Affinity.Null:..
39e0: 20 20 20 20 20 20 20 20 20 20 5f 62 61 73 65 2e            _base.
39f0: 52 65 74 75 72 6e 4e 75 6c 6c 28 63 6f 6e 74 65  ReturnNull(conte
3a00: 78 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  xt);..          
3a10: 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 20  return;..       
3a20: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
3a30: 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20  ty.Int64:..     
3a40: 20 20 20 20 20 5f 62 61 73 65 2e 52 65 74 75 72       _base.Retur
3a50: 6e 49 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20  nInt64(context, 
3a60: 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 36 34 28  Convert.ToInt64(
3a70: 72 65 74 75 72 6e 56 61 6c 75 65 2c 20 43 75 6c  returnValue, Cul
3a80: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
3a90: 43 75 6c 74 75 72 65 29 29 3b 0d 0a 20 20 20 20  Culture));..    
3aa0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20        return;.. 
3ab0: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
3ac0: 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a  Affinity.Double:
3ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 62 61 73  ..          _bas
3ae0: 65 2e 52 65 74 75 72 6e 44 6f 75 62 6c 65 28 63  e.ReturnDouble(c
3af0: 6f 6e 74 65 78 74 2c 20 43 6f 6e 76 65 72 74 2e  ontext, Convert.
3b00: 54 6f 44 6f 75 62 6c 65 28 72 65 74 75 72 6e 56  ToDouble(returnV
3b10: 61 6c 75 65 2c 20 43 75 6c 74 75 72 65 49 6e 66  alue, CultureInf
3b20: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
3b30: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72  ));..          r
3b40: 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20  eturn;..        
3b50: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
3b60: 79 2e 54 65 78 74 3a 0d 0a 20 20 20 20 20 20 20  y.Text:..       
3b70: 20 20 20 5f 62 61 73 65 2e 52 65 74 75 72 6e 54     _base.ReturnT
3b80: 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 72 65 74  ext(context, ret
3b90: 75 72 6e 56 61 6c 75 65 2e 54 6f 53 74 72 69 6e  urnValue.ToStrin
3ba0: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
3bb0: 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20   return;..      
3bc0: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
3bd0: 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20  ity.Blob:..     
3be0: 20 20 20 20 20 5f 62 61 73 65 2e 52 65 74 75 72       _base.Retur
3bf0: 6e 42 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20 28  nBlob(context, (
3c00: 62 79 74 65 5b 5d 29 72 65 74 75 72 6e 56 61 6c  byte[])returnVal
3c10: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
3c20: 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 7d  return;..      }
3c30: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
3c40: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
3c50: 20 20 2f 2f 2f 20 49 6e 74 65 72 6e 61 6c 20 73    /// Internal s
3c60: 63 61 6c 61 72 20 63 61 6c 6c 62 61 63 6b 20 66  calar callback f
3c70: 75 6e 63 74 69 6f 6e 2c 20 77 68 69 63 68 20 77  unction, which w
3c80: 72 61 70 73 20 74 68 65 20 72 61 77 20 63 6f 6e  raps the raw con
3c90: 74 65 78 74 20 70 6f 69 6e 74 65 72 20 61 6e 64  text pointer and
3ca0: 20 63 61 6c 6c 73 20 74 68 65 20 76 69 72 74 75   calls the virtu
3cb0: 61 6c 20 49 6e 76 6f 6b 65 28 29 20 6d 65 74 68  al Invoke() meth
3cc0: 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57 41 52  od...    /// WAR
3cd0: 4e 49 4e 47 3a 20 4d 75 73 74 20 6e 6f 74 20 74  NING: Must not t
3ce0: 68 72 6f 77 20 65 78 63 65 70 74 69 6f 6e 73 2e  hrow exceptions.
3cf0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
3d00: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
3d10: 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65  aram name="conte
3d20: 78 74 22 3e 41 20 72 61 77 20 63 6f 6e 74 65 78  xt">A raw contex
3d30: 74 20 70 6f 69 6e 74 65 72 3c 2f 70 61 72 61 6d  t pointer</param
3d40: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
3d50: 6d 20 6e 61 6d 65 3d 22 6e 41 72 67 73 22 3e 4e  m name="nArgs">N
3d60: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
3d70: 74 73 20 70 61 73 73 65 64 20 69 6e 3c 2f 70 61  ts passed in</pa
3d80: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
3d90: 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 73 70  aram name="argsp
3da0: 74 72 22 3e 41 20 70 6f 69 6e 74 65 72 20 74 6f  tr">A pointer to
3db0: 20 74 68 65 20 61 72 72 61 79 20 6f 66 20 61 72   the array of ar
3dc0: 67 75 6d 65 6e 74 73 3c 2f 70 61 72 61 6d 3e 0d  guments</param>.
3dd0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f  .    internal vo
3de0: 69 64 20 53 63 61 6c 61 72 43 61 6c 6c 62 61 63  id ScalarCallbac
3df0: 6b 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  k(IntPtr context
3e00: 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20 49 6e 74  , int nArgs, Int
3e10: 50 74 72 20 61 72 67 73 70 74 72 29 0d 0a 20 20  Ptr argsptr)..  
3e20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79    {..        try
3e30: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
3e40: 20 20 20 20 20 20 20 20 20 5f 63 6f 6e 74 65 78           _contex
3e50: 74 20 3d 20 63 6f 6e 74 65 78 74 3b 0d 0a 20 20  t = context;..  
3e60: 20 20 20 20 20 20 20 20 20 20 53 65 74 52 65 74            SetRet
3e70: 75 72 6e 56 61 6c 75 65 28 63 6f 6e 74 65 78 74  urnValue(context
3e80: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3e90: 20 20 20 49 6e 76 6f 6b 65 28 43 6f 6e 76 65 72     Invoke(Conver
3ea0: 74 50 61 72 61 6d 73 28 6e 41 72 67 73 2c 20 61  tParams(nArgs, a
3eb0: 72 67 73 70 74 72 29 29 29 3b 20 2f 2a 20 74 68  rgsptr))); /* th
3ec0: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
3ed0: 7d 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  }..        catch
3ee0: 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f   (Exception e) /
3ef0: 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74  * NOTE: Must cat
3f00: 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20  ch ALL. */..    
3f10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3f20: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
3f30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3f40: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
3f50: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
3f60: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 43 61  ctionFlags.LogCa
3f70: 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e 29  llbackException)
3f80: 20 3d 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ==..           
3f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
3fa0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
3fb0: 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78  gs.LogCallbackEx
3fc0: 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  ception)..      
3fd0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ff0: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
4000: 73 73 61 67 65 28 53 51 4c 69 74 65 42 61 73 65  ssage(SQLiteBase
4010: 2e 43 4f 52 5f 45 5f 45 58 43 45 50 54 49 4f 4e  .COR_E_EXCEPTION
4020: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4030: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
4040: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53  eNativeMethods.S
4050: 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74  tringFormat(Cult
4060: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
4070: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
4080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4090: 20 22 43 61 75 67 68 74 20 65 78 63 65 70 74 69   "Caught excepti
40a0: 6f 6e 20 69 6e 20 5c 22 49 6e 76 6f 6b 65 5c 22  on in \"Invoke\"
40b0: 20 6d 65 74 68 6f 64 3a 20 7b 30 7d 22 2c 0d 0a   method: {0}",..
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40d0: 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f 2a 20          e)); /* 
40e0: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
40f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4100: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4110: 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
4120: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4140: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
4150: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4160: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
4170: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
4180: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e 74 65  y>..    /// Inte
4190: 72 6e 61 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73  rnal collating s
41a0: 65 71 75 65 6e 63 65 20 66 75 6e 63 74 69 6f 6e  equence function
41b0: 2c 20 77 68 69 63 68 20 77 72 61 70 73 20 75 70  , which wraps up
41c0: 20 74 68 65 20 72 61 77 20 73 74 72 69 6e 67 20   the raw string 
41d0: 70 6f 69 6e 74 65 72 73 20 61 6e 64 20 65 78 65  pointers and exe
41e0: 63 75 74 65 73 20 74 68 65 20 43 6f 6d 70 61 72  cutes the Compar
41f0: 65 28 29 20 76 69 72 74 75 61 6c 20 66 75 6e 63  e() virtual func
4200: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57  tion...    /// W
4210: 41 52 4e 49 4e 47 3a 20 4d 75 73 74 20 6e 6f 74  ARNING: Must not
4220: 20 74 68 72 6f 77 20 65 78 63 65 70 74 69 6f 6e   throw exception
4230: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
4240: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
4250: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 74 72  <param name="ptr
4260: 22 3e 4e 6f 74 20 75 73 65 64 3c 2f 70 61 72 61  ">Not used</para
4270: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
4280: 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 31 22 3e 4c  am name="len1">L
4290: 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
42a0: 69 6e 67 20 70 76 31 3c 2f 70 61 72 61 6d 3e 0d  ing pv1</param>.
42b0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
42c0: 6e 61 6d 65 3d 22 70 74 72 31 22 3e 50 6f 69 6e  name="ptr1">Poin
42d0: 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
42e0: 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6d 70 61   string to compa
42f0: 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  re</param>..    
4300: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
4310: 22 6c 65 6e 32 22 3e 4c 65 6e 67 74 68 20 6f 66  "len2">Length of
4320: 20 74 68 65 20 73 74 72 69 6e 67 20 70 76 32 3c   the string pv2<
4330: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
4340: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 74   <param name="pt
4350: 72 32 22 3e 50 6f 69 6e 74 65 72 20 74 6f 20 74  r2">Pointer to t
4360: 68 65 20 73 65 63 6f 6e 64 20 73 74 72 69 6e 67  he second string
4370: 20 74 6f 20 63 6f 6d 70 61 72 65 3c 2f 70 61 72   to compare</par
4380: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
4390: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 2d 31  turns>Returns -1
43a0: 20 69 66 20 74 68 65 20 66 69 72 73 74 20 73 74   if the first st
43b0: 72 69 6e 67 20 69 73 20 6c 65 73 73 20 74 68 61  ring is less tha
43c0: 6e 20 74 68 65 20 73 65 63 6f 6e 64 2e 20 20 30  n the second.  0
43d0: 20 69 66 20 74 68 65 79 20 61 72 65 20 65 71 75   if they are equ
43e0: 61 6c 2c 20 6f 72 20 31 20 69 66 20 74 68 65 20  al, or 1 if the 
43f0: 66 69 72 73 74 20 73 74 72 69 6e 67 20 69 73 20  first string is 
4400: 67 72 65 61 74 65 72 0d 0a 20 20 20 20 2f 2f 2f  greater..    ///
4410: 20 74 68 61 6e 20 74 68 65 20 73 65 63 6f 6e 64   than the second
4420: 2e 20 20 52 65 74 75 72 6e 73 20 30 20 69 66 20  .  Returns 0 if 
4430: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 73 20  an exception is 
4440: 63 61 75 67 68 74 2e 3c 2f 72 65 74 75 72 6e 73  caught.</returns
4450: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
4460: 69 6e 74 20 43 6f 6d 70 61 72 65 43 61 6c 6c 62  int CompareCallb
4470: 61 63 6b 28 49 6e 74 50 74 72 20 70 74 72 2c 20  ack(IntPtr ptr, 
4480: 69 6e 74 20 6c 65 6e 31 2c 20 49 6e 74 50 74 72  int len1, IntPtr
4490: 20 70 74 72 31 2c 20 69 6e 74 20 6c 65 6e 32 2c   ptr1, int len2,
44a0: 20 49 6e 74 50 74 72 20 70 74 72 32 29 0d 0a 20   IntPtr ptr2).. 
44b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72     {..        tr
44c0: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
44d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
44e0: 20 43 6f 6d 70 61 72 65 28 53 51 4c 69 74 65 43   Compare(SQLiteC
44f0: 6f 6e 76 65 72 74 2e 55 54 46 38 54 6f 53 74 72  onvert.UTF8ToStr
4500: 69 6e 67 28 70 74 72 31 2c 20 6c 65 6e 31 29 2c  ing(ptr1, len1),
4510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4520: 20 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e    SQLiteConvert.
4530: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72  UTF8ToString(ptr
4540: 32 2c 20 6c 65 6e 32 29 29 3b 20 2f 2a 20 74 68  2, len2)); /* th
4550: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
4560: 7d 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  }..        catch
4570: 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f   (Exception e) /
4580: 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74  * NOTE: Must cat
4590: 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20  ch ALL. */..    
45a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
45b0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
45c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
45d0: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
45e0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
45f0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 43 61  ctionFlags.LogCa
4600: 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e 29  llbackException)
4610: 20 3d 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ==..           
4620: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
4630: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
4640: 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78  gs.LogCallbackEx
4650: 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  ception)..      
4660: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4680: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
4690: 73 73 61 67 65 28 53 51 4c 69 74 65 42 61 73 65  ssage(SQLiteBase
46a0: 2e 43 4f 52 5f 45 5f 45 58 43 45 50 54 49 4f 4e  .COR_E_EXCEPTION
46b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
46c0: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
46d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53  eNativeMethods.S
46e0: 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74  tringFormat(Cult
46f0: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
4700: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
4710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4720: 20 22 43 61 75 67 68 74 20 65 78 63 65 70 74 69   "Caught excepti
4730: 6f 6e 20 69 6e 20 5c 22 43 6f 6d 70 61 72 65 5c  on in \"Compare\
4740: 22 20 28 55 54 46 38 29 20 6d 65 74 68 6f 64 3a  " (UTF8) method:
4750: 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
4760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4770: 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  e)); /* throw */
4780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4790: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
47a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
47b0: 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
47c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
47d0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
47e0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
47f0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
4800: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
4810: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
4820: 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65  his must be done
4830: 20 74 6f 20 70 72 65 76 65 6e 74 20 74 68 65 20   to prevent the 
4840: 63 6f 72 65 20 53 51 4c 69 74 65 20 6c 69 62 72  core SQLite libr
4850: 61 72 79 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20  ary from..      
4860: 20 20 2f 2f 20 20 20 20 20 20 20 75 73 69 6e 67    //       using
4870: 20 6f 75 72 20 28 69 6e 76 61 6c 69 64 29 20 72   our (invalid) r
4880: 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20  esult...        
4890: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  //..        if (
48a0: 28 5f 62 61 73 65 20 21 3d 20 6e 75 6c 6c 29 20  (_base != null) 
48b0: 26 26 20 5f 62 61 73 65 2e 49 73 4f 70 65 6e 28  && _base.IsOpen(
48c0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
48d0: 5f 62 61 73 65 2e 43 61 6e 63 65 6c 28 29 3b 0d  _base.Cancel();.
48e0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
48f0: 6e 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  n 0;..    }.... 
4900: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
4910: 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e 74 65 72 6e  ..    /// Intern
4920: 61 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  al collating seq
4930: 75 65 6e 63 65 20 66 75 6e 63 74 69 6f 6e 2c 20  uence function, 
4940: 77 68 69 63 68 20 77 72 61 70 73 20 75 70 20 74  which wraps up t
4950: 68 65 20 72 61 77 20 73 74 72 69 6e 67 20 70 6f  he raw string po
4960: 69 6e 74 65 72 73 20 61 6e 64 20 65 78 65 63 75  inters and execu
4970: 74 65 73 20 74 68 65 20 43 6f 6d 70 61 72 65 28  tes the Compare(
4980: 29 20 76 69 72 74 75 61 6c 20 66 75 6e 63 74 69  ) virtual functi
4990: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57 41 52  on...    /// WAR
49a0: 4e 49 4e 47 3a 20 4d 75 73 74 20 6e 6f 74 20 74  NING: Must not t
49b0: 68 72 6f 77 20 65 78 63 65 70 74 69 6f 6e 73 2e  hrow exceptions.
49c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
49d0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
49e0: 61 72 61 6d 20 6e 61 6d 65 3d 22 70 74 72 22 3e  aram name="ptr">
49f0: 4e 6f 74 20 75 73 65 64 3c 2f 70 61 72 61 6d 3e  Not used</param>
4a00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
4a10: 20 6e 61 6d 65 3d 22 6c 65 6e 31 22 3e 4c 65 6e   name="len1">Len
4a20: 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
4a30: 67 20 70 76 31 3c 2f 70 61 72 61 6d 3e 0d 0a 20  g pv1</param>.. 
4a40: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
4a50: 6d 65 3d 22 70 74 72 31 22 3e 50 6f 69 6e 74 65  me="ptr1">Pointe
4a60: 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 73  r to the first s
4a70: 74 72 69 6e 67 20 74 6f 20 63 6f 6d 70 61 72 65  tring to compare
4a80: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
4a90: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c  / <param name="l
4aa0: 65 6e 32 22 3e 4c 65 6e 67 74 68 20 6f 66 20 74  en2">Length of t
4ab0: 68 65 20 73 74 72 69 6e 67 20 70 76 32 3c 2f 70  he string pv2</p
4ac0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
4ad0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 74 72 32  param name="ptr2
4ae0: 22 3e 50 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  ">Pointer to the
4af0: 20 73 65 63 6f 6e 64 20 73 74 72 69 6e 67 20 74   second string t
4b00: 6f 20 63 6f 6d 70 61 72 65 3c 2f 70 61 72 61 6d  o compare</param
4b10: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
4b20: 72 6e 73 3e 52 65 74 75 72 6e 73 20 2d 31 20 69  rns>Returns -1 i
4b30: 66 20 74 68 65 20 66 69 72 73 74 20 73 74 72 69  f the first stri
4b40: 6e 67 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ng is less than 
4b50: 74 68 65 20 73 65 63 6f 6e 64 2e 20 20 30 20 69  the second.  0 i
4b60: 66 20 74 68 65 79 20 61 72 65 20 65 71 75 61 6c  f they are equal
4b70: 2c 20 6f 72 20 31 20 69 66 20 74 68 65 20 66 69  , or 1 if the fi
4b80: 72 73 74 20 73 74 72 69 6e 67 20 69 73 20 67 72  rst string is gr
4b90: 65 61 74 65 72 0d 0a 20 20 20 20 2f 2f 2f 20 74  eater..    /// t
4ba0: 68 61 6e 20 74 68 65 20 73 65 63 6f 6e 64 2e 20  han the second. 
4bb0: 20 52 65 74 75 72 6e 73 20 30 20 69 66 20 61 6e   Returns 0 if an
4bc0: 20 65 78 63 65 70 74 69 6f 6e 20 69 73 20 63 61   exception is ca
4bd0: 75 67 68 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ught.</returns>.
4be0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e  .    internal in
4bf0: 74 20 43 6f 6d 70 61 72 65 43 61 6c 6c 62 61 63  t CompareCallbac
4c00: 6b 31 36 28 49 6e 74 50 74 72 20 70 74 72 2c 20  k16(IntPtr ptr, 
4c10: 69 6e 74 20 6c 65 6e 31 2c 20 49 6e 74 50 74 72  int len1, IntPtr
4c20: 20 70 74 72 31 2c 20 69 6e 74 20 6c 65 6e 32 2c   ptr1, int len2,
4c30: 20 49 6e 74 50 74 72 20 70 74 72 32 29 0d 0a 20   IntPtr ptr2).. 
4c40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72     {..        tr
4c50: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
4c60: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4c70: 20 43 6f 6d 70 61 72 65 28 53 51 4c 69 74 65 33   Compare(SQLite3
4c80: 5f 55 54 46 31 36 2e 55 54 46 31 36 54 6f 53 74  _UTF16.UTF16ToSt
4c90: 72 69 6e 67 28 70 74 72 31 2c 20 6c 65 6e 31 29  ring(ptr1, len1)
4ca0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4cb0: 20 20 20 53 51 4c 69 74 65 33 5f 55 54 46 31 36     SQLite3_UTF16
4cc0: 2e 55 54 46 31 36 54 6f 53 74 72 69 6e 67 28 70  .UTF16ToString(p
4cd0: 74 72 32 2c 20 6c 65 6e 32 29 29 3b 20 2f 2a 20  tr2, len2)); /* 
4ce0: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
4cf0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 63 61 74    }..        cat
4d00: 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
4d10: 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63   /* NOTE: Must c
4d20: 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20  atch ALL. */..  
4d30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4d40: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
4d50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4d60: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66           if ((_f
4d70: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
4d80: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
4d90: 43 61 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f  CallbackExceptio
4da0: 6e 29 20 3d 3d 0d 0a 20 20 20 20 20 20 20 20 20  n) ==..         
4db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
4dc0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
4dd0: 6c 61 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b  lags.LogCallback
4de0: 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20  Exception)..    
4df0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e10: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
4e20: 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65 42 61  Message(SQLiteBa
4e30: 73 65 2e 43 4f 52 5f 45 5f 45 58 43 45 50 54 49  se.COR_E_EXCEPTI
4e40: 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ON,..           
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73               Uns
4e60: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
4e70: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75  .StringFormat(Cu
4e80: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
4e90: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4eb0: 20 20 20 22 43 61 75 67 68 74 20 65 78 63 65 70     "Caught excep
4ec0: 74 69 6f 6e 20 69 6e 20 5c 22 43 6f 6d 70 61 72  tion in \"Compar
4ed0: 65 5c 22 20 28 55 54 46 31 36 29 20 6d 65 74 68  e\" (UTF16) meth
4ee0: 6f 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  od: {0}",..     
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f00: 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77     e)); /* throw
4f10: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
4f20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4f30: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
4f40: 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
4f50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4f60: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
4f70: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
4f80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4f90: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  }....        //.
4fa0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
4fb0: 3a 20 54 68 69 73 20 6d 75 73 74 20 62 65 20 64  : This must be d
4fc0: 6f 6e 65 20 74 6f 20 70 72 65 76 65 6e 74 20 74  one to prevent t
4fd0: 68 65 20 63 6f 72 65 20 53 51 4c 69 74 65 20 6c  he core SQLite l
4fe0: 69 62 72 61 72 79 20 66 72 6f 6d 0d 0a 20 20 20  ibrary from..   
4ff0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 73       //       us
5000: 69 6e 67 20 6f 75 72 20 28 69 6e 76 61 6c 69 64  ing our (invalid
5010: 29 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20  ) result...     
5020: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 69     //..        i
5030: 66 20 28 28 5f 62 61 73 65 20 21 3d 20 6e 75 6c  f ((_base != nul
5040: 6c 29 20 26 26 20 5f 62 61 73 65 2e 49 73 4f 70  l) && _base.IsOp
5050: 65 6e 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  en())..         
5060: 20 20 20 5f 62 61 73 65 2e 43 61 6e 63 65 6c 28     _base.Cancel(
5070: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
5080: 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a  turn 0;..    }..
5090: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
50a0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
50b0: 20 69 6e 74 65 72 6e 61 6c 20 61 67 67 72 65 67   internal aggreg
50c0: 61 74 65 20 53 74 65 70 20 66 75 6e 63 74 69 6f  ate Step functio
50d0: 6e 20 63 61 6c 6c 62 61 63 6b 2c 20 77 68 69 63  n callback, whic
50e0: 68 20 77 72 61 70 73 20 74 68 65 20 72 61 77 20  h wraps the raw 
50f0: 63 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20  context pointer 
5100: 61 6e 64 20 63 61 6c 6c 73 20 74 68 65 20 76 69  and calls the vi
5110: 72 74 75 61 6c 20 53 74 65 70 28 29 20 6d 65 74  rtual Step() met
5120: 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57 41  hod...    /// WA
5130: 52 4e 49 4e 47 3a 20 4d 75 73 74 20 6e 6f 74 20  RNING: Must not 
5140: 74 68 72 6f 77 20 65 78 63 65 70 74 69 6f 6e 73  throw exceptions
5150: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
5160: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
5170: 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f  remarks>..    //
5180: 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  / This function 
5190: 74 61 6b 65 73 20 63 61 72 65 20 6f 66 20 64 6f  takes care of do
51a0: 69 6e 67 20 74 68 65 20 6c 6f 6f 6b 75 70 73 20  ing the lookups 
51b0: 61 6e 64 20 67 65 74 74 69 6e 67 20 74 68 65 20  and getting the 
51c0: 69 6d 70 6f 72 74 61 6e 74 20 69 6e 66 6f 72 6d  important inform
51d0: 61 74 69 6f 6e 20 70 75 74 20 74 6f 67 65 74 68  ation put togeth
51e0: 65 72 20 74 6f 20 63 61 6c 6c 20 74 68 65 20 53  er to call the S
51f0: 74 65 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0d  tep() function..
5200: 0a 20 20 20 20 2f 2f 2f 20 54 68 61 74 20 69 6e  .    /// That in
5210: 63 6c 75 64 65 73 20 70 75 6c 6c 69 6e 67 20 6f  cludes pulling o
5220: 75 74 20 74 68 65 20 75 73 65 72 27 73 20 63 6f  ut the user's co
5230: 6e 74 65 78 74 44 61 74 61 20 61 6e 64 20 75 70  ntextData and up
5240: 64 61 74 69 6e 67 20 69 74 20 61 66 74 65 72 20  dating it after 
5250: 74 68 65 20 63 61 6c 6c 20 69 73 20 6d 61 64 65  the call is made
5260: 2e 20 20 57 65 20 75 73 65 20 61 20 73 6f 72 74  .  We use a sort
5270: 65 64 20 6c 69 73 74 20 66 6f 72 20 74 68 69 73  ed list for this
5280: 20 73 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62 69 6e   so..    /// bin
5290: 61 72 79 20 73 65 61 72 63 68 65 73 20 63 61 6e  ary searches can
52a0: 20 62 65 20 64 6f 6e 65 20 74 6f 20 66 69 6e 64   be done to find
52b0: 20 74 68 65 20 64 61 74 61 2e 0d 0a 20 20 20 20   the data...    
52c0: 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a  /// </remarks>..
52d0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
52e0: 61 6d 65 3d 22 63 6f 6e 74 65 78 74 22 3e 41 20  ame="context">A 
52f0: 72 61 77 20 63 6f 6e 74 65 78 74 20 70 6f 69 6e  raw context poin
5300: 74 65 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ter</param>..   
5310: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
5320: 3d 22 6e 41 72 67 73 22 3e 4e 75 6d 62 65 72 20  ="nArgs">Number 
5330: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73  of arguments pas
5340: 73 65 64 20 69 6e 3c 2f 70 61 72 61 6d 3e 0d 0a  sed in</param>..
5350: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5360: 61 6d 65 3d 22 61 72 67 73 70 74 72 22 3e 41 20  ame="argsptr">A 
5370: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 61  pointer to the a
5380: 72 72 61 79 20 6f 66 20 61 72 67 75 6d 65 6e 74  rray of argument
5390: 73 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69  s</param>..    i
53a0: 6e 74 65 72 6e 61 6c 20 76 6f 69 64 20 53 74 65  nternal void Ste
53b0: 70 43 61 6c 6c 62 61 63 6b 28 49 6e 74 50 74 72  pCallback(IntPtr
53c0: 20 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 6e 41   context, int nA
53d0: 72 67 73 2c 20 49 6e 74 50 74 72 20 61 72 67 73  rgs, IntPtr args
53e0: 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
53f0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
5400: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5410: 20 41 67 67 72 65 67 61 74 65 44 61 74 61 20 64   AggregateData d
5420: 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ata = null;.... 
5430: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
5440: 62 61 73 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  base != null).. 
5450: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
5470: 74 50 74 72 20 6e 41 75 78 20 3d 20 5f 62 61 73  tPtr nAux = _bas
5480: 65 2e 41 67 67 72 65 67 61 74 65 43 6f 6e 74 65  e.AggregateConte
5490: 78 74 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 0d 0a  xt(context);....
54a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
54b0: 69 66 20 28 28 5f 63 6f 6e 74 65 78 74 44 61 74  if ((_contextDat
54c0: 61 4c 69 73 74 20 21 3d 20 6e 75 6c 6c 29 20 26  aList != null) &
54d0: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
54e0: 20 20 20 20 20 20 20 21 5f 63 6f 6e 74 65 78 74         !_context
54f0: 44 61 74 61 4c 69 73 74 2e 54 72 79 47 65 74 56  DataList.TryGetV
5500: 61 6c 75 65 28 6e 41 75 78 2c 20 6f 75 74 20 64  alue(nAux, out d
5510: 61 74 61 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ata))..         
5520: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
5540: 74 61 20 3d 20 6e 65 77 20 41 67 67 72 65 67 61  ta = new Aggrega
5550: 74 65 44 61 74 61 28 29 3b 0d 0a 20 20 20 20 20  teData();..     
5560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
5570: 63 6f 6e 74 65 78 74 44 61 74 61 4c 69 73 74 5b  contextDataList[
5580: 6e 41 75 78 5d 20 3d 20 64 61 74 61 3b 0d 0a 20  nAux] = data;.. 
5590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
55a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
55b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
55c0: 66 20 28 64 61 74 61 20 3d 3d 20 6e 75 6c 6c 29  f (data == null)
55d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
55e0: 20 20 64 61 74 61 20 3d 20 6e 65 77 20 41 67 67    data = new Agg
55f0: 72 65 67 61 74 65 44 61 74 61 28 29 3b 0d 0a 0d  regateData();...
5600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
5610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5630: 20 5f 63 6f 6e 74 65 78 74 20 3d 20 63 6f 6e 74   _context = cont
5640: 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
5650: 20 20 20 20 20 20 53 74 65 70 28 43 6f 6e 76 65        Step(Conve
5660: 72 74 50 61 72 61 6d 73 28 6e 41 72 67 73 2c 20  rtParams(nArgs, 
5670: 61 72 67 73 70 74 72 29 2c 0d 0a 20 20 20 20 20  argsptr),..     
5680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
5690: 61 74 61 2e 5f 63 6f 75 6e 74 2c 20 72 65 66 20  ata._count, ref 
56a0: 64 61 74 61 2e 5f 64 61 74 61 29 3b 20 2f 2a 20  data._data); /* 
56b0: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
56c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
56d0: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
56e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
56f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
5700: 61 2e 5f 63 6f 75 6e 74 2b 2b 3b 0d 0a 20 20 20  a._count++;..   
5710: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5720: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 63      }..        c
5730: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
5740: 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74  e) /* NOTE: Must
5750: 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a   catch ALL. */..
5760: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5770: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
5780: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5790: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
57a0: 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
57b0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
57c0: 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63 65 70 74  ogCallbackExcept
57d0: 69 6f 6e 29 20 3d 3d 0d 0a 20 20 20 20 20 20 20  ion) ==..       
57e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57f0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5800: 6e 46 6c 61 67 73 2e 4c 6f 67 43 61 6c 6c 62 61  nFlags.LogCallba
5810: 63 6b 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20  ckException)..  
5820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
5830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5840: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
5850: 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65  ogMessage(SQLite
5860: 42 61 73 65 2e 43 4f 52 5f 45 5f 45 58 43 45 50  Base.COR_E_EXCEP
5870: 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20 20  TION,..         
5880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
5890: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
58a0: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
58b0: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
58c0: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
58d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58e0: 20 20 20 20 20 22 43 61 75 67 68 74 20 65 78 63       "Caught exc
58f0: 65 70 74 69 6f 6e 20 69 6e 20 5c 22 53 74 65 70  eption in \"Step
5900: 5c 22 20 6d 65 74 68 6f 64 3a 20 7b 31 7d 22 2c  \" method: {1}",
5910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5920: 20 20 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f            e)); /
5930: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
5940: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5950: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
5960: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
5970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5990: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
59a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
59b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
59c0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
59d0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6e  ary>..    /// An
59e0: 20 69 6e 74 65 72 6e 61 6c 20 61 67 67 72 65 67   internal aggreg
59f0: 61 74 65 20 46 69 6e 61 6c 20 66 75 6e 63 74 69  ate Final functi
5a00: 6f 6e 20 63 61 6c 6c 62 61 63 6b 2c 20 77 68 69  on callback, whi
5a10: 63 68 20 77 72 61 70 73 20 74 68 65 20 63 6f 6e  ch wraps the con
5a20: 74 65 78 74 20 70 6f 69 6e 74 65 72 20 61 6e 64  text pointer and
5a30: 20 63 61 6c 6c 73 20 74 68 65 20 76 69 72 74 75   calls the virtu
5a40: 61 6c 20 46 69 6e 61 6c 28 29 20 6d 65 74 68 6f  al Final() metho
5a50: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57 41 52 4e  d...    /// WARN
5a60: 49 4e 47 3a 20 4d 75 73 74 20 6e 6f 74 20 74 68  ING: Must not th
5a70: 72 6f 77 20 65 78 63 65 70 74 69 6f 6e 73 2e 0d  row exceptions..
5a80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
5a90: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
5aa0: 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78  ram name="contex
5ab0: 74 22 3e 41 20 72 61 77 20 63 6f 6e 74 65 78 74  t">A raw context
5ac0: 20 70 6f 69 6e 74 65 72 3c 2f 70 61 72 61 6d 3e   pointer</param>
5ad0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76  ..    internal v
5ae0: 6f 69 64 20 46 69 6e 61 6c 43 61 6c 6c 62 61 63  oid FinalCallbac
5af0: 6b 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  k(IntPtr context
5b00: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5b10: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
5b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
5b30: 6a 65 63 74 20 6f 62 6a 20 3d 20 6e 75 6c 6c 3b  ject obj = null;
5b40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5b50: 69 66 20 28 5f 62 61 73 65 20 21 3d 20 6e 75 6c  if (_base != nul
5b60: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
5b70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5b80: 20 20 20 49 6e 74 50 74 72 20 6e 20 3d 20 5f 62     IntPtr n = _b
5b90: 61 73 65 2e 41 67 67 72 65 67 61 74 65 43 6f 6e  ase.AggregateCon
5ba0: 74 65 78 74 28 63 6f 6e 74 65 78 74 29 3b 0d 0a  text(context);..
5bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5bc0: 41 67 67 72 65 67 61 74 65 44 61 74 61 20 61 67  AggregateData ag
5bd0: 67 44 61 74 61 3b 0d 0a 0d 0a 20 20 20 20 20 20  gData;....      
5be0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 5f            if ((_
5bf0: 63 6f 6e 74 65 78 74 44 61 74 61 4c 69 73 74 20  contextDataList 
5c00: 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20  != null) &&..   
5c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c20: 20 5f 63 6f 6e 74 65 78 74 44 61 74 61 4c 69 73   _contextDataLis
5c30: 74 2e 54 72 79 47 65 74 56 61 6c 75 65 28 6e 2c  t.TryGetValue(n,
5c40: 20 6f 75 74 20 61 67 67 44 61 74 61 29 29 0d 0a   out aggData))..
5c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5c70: 20 20 20 20 20 20 20 6f 62 6a 20 3d 20 61 67 67         obj = agg
5c80: 44 61 74 61 2e 5f 64 61 74 61 3b 0d 0a 20 20 20  Data._data;..   
5c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ca0: 20 5f 63 6f 6e 74 65 78 74 44 61 74 61 4c 69 73   _contextDataLis
5cb0: 74 2e 52 65 6d 6f 76 65 28 6e 29 3b 0d 0a 20 20  t.Remove(n);..  
5cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
5cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5ce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
5cf0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
5d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5d10: 20 20 5f 63 6f 6e 74 65 78 74 20 3d 20 63 6f 6e    _context = con
5d20: 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
5d30: 20 20 20 20 20 20 20 53 65 74 52 65 74 75 72 6e         SetReturn
5d40: 56 61 6c 75 65 28 63 6f 6e 74 65 78 74 2c 20 46  Value(context, F
5d50: 69 6e 61 6c 28 6f 62 6a 29 29 3b 20 2f 2a 20 74  inal(obj)); /* t
5d60: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
5d70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5d80: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
5d90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5da0: 20 20 20 20 20 20 20 20 20 20 20 20 49 44 69 73              IDis
5db0: 70 6f 73 61 62 6c 65 20 64 69 73 70 20 3d 20 6f  posable disp = o
5dc0: 62 6a 20 61 73 20 49 44 69 73 70 6f 73 61 62 6c  bj as IDisposabl
5dd0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
5de0: 20 20 20 20 69 66 20 28 64 69 73 70 20 21 3d 20      if (disp != 
5df0: 6e 75 6c 6c 29 20 64 69 73 70 2e 44 69 73 70 6f  null) disp.Dispo
5e00: 73 65 28 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  se(); /* throw *
5e10: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  /..            }
5e20: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
5e30: 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
5e40: 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45  ption e) /* NOTE
5e50: 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c  : Must catch ALL
5e60: 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d  . */..        {.
5e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
5e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5ea0: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
5eb0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5ec0: 6c 61 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b  lags.LogCallback
5ed0: 45 78 63 65 70 74 69 6f 6e 29 20 3d 3d 0d 0a 20  Exception) ==.. 
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ef0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
5f00: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
5f10: 43 61 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f  CallbackExceptio
5f20: 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
5f30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5f40: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
5f50: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
5f60: 53 51 4c 69 74 65 42 61 73 65 2e 43 4f 52 5f 45  SQLiteBase.COR_E
5f70: 5f 45 58 43 45 50 54 49 4f 4e 2c 0d 0a 20 20 20  _EXCEPTION,..   
5f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f90: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
5fa0: 65 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  eMethods.StringF
5fb0: 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
5fc0: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
5fd0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
5fe0: 20 20 20 20 20 20 20 20 20 20 20 22 43 61 75 67             "Caug
5ff0: 68 74 20 65 78 63 65 70 74 69 6f 6e 20 69 6e 20  ht exception in 
6000: 5c 22 46 69 6e 61 6c 5c 22 20 6d 65 74 68 6f 64  \"Final\" method
6010: 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6030: 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a   e)); /* throw *
6040: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
6050: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
6060: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
6070: 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
6080: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6090: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
60a0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
60b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
60c0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
60d0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
60e0: 20 2f 2f 2f 20 55 73 69 6e 67 20 72 65 66 6c 65   /// Using refle
60f0: 63 74 69 6f 6e 2c 20 65 6e 75 6d 65 72 61 74 65  ction, enumerate
6100: 20 61 6c 6c 20 61 73 73 65 6d 62 6c 69 65 73 20   all assemblies 
6110: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 61  in the current a
6120: 70 70 64 6f 6d 61 69 6e 20 6c 6f 6f 6b 69 6e 67  ppdomain looking
6130: 20 66 6f 72 20 63 6c 61 73 73 65 73 20 74 68 61   for classes tha
6140: 74 0d 0a 20 20 20 20 2f 2f 2f 20 68 61 76 65 20  t..    /// have 
6150: 61 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  a SQLiteFunction
6160: 41 74 74 72 69 62 75 74 65 20 61 74 74 72 69 62  Attribute attrib
6170: 75 74 65 2c 20 61 6e 64 20 72 65 67 69 73 74 65  ute, and registe
6180: 72 69 6e 67 20 74 68 65 6d 20 61 63 63 6f 72 64  ring them accord
6190: 69 6e 67 6c 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ingly...    /// 
61a0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 23 69 66 20  </summary>..#if 
61b0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
61c0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
61d0: 5b 53 65 63 75 72 69 74 79 2e 50 65 72 6d 69 73  [Security.Permis
61e0: 73 69 6f 6e 73 2e 46 69 6c 65 49 4f 50 65 72 6d  sions.FileIOPerm
61f0: 69 73 73 69 6f 6e 28 53 65 63 75 72 69 74 79 2e  ission(Security.
6200: 50 65 72 6d 69 73 73 69 6f 6e 73 2e 53 65 63 75  Permissions.Secu
6210: 72 69 74 79 41 63 74 69 6f 6e 2e 41 73 73 65 72  rityAction.Asser
6220: 74 2c 20 41 6c 6c 46 69 6c 65 73 20 3d 20 53 65  t, AllFiles = Se
6230: 63 75 72 69 74 79 2e 50 65 72 6d 69 73 73 69 6f  curity.Permissio
6240: 6e 73 2e 46 69 6c 65 49 4f 50 65 72 6d 69 73 73  ns.FileIOPermiss
6250: 69 6f 6e 41 63 63 65 73 73 2e 50 61 74 68 44 69  ionAccess.PathDi
6260: 73 63 6f 76 65 72 79 29 5d 0d 0a 23 65 6e 64 69  scovery)]..#endi
6270: 66 0d 0a 20 20 20 20 73 74 61 74 69 63 20 53 51  f..    static SQ
6280: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 28 29 0d 0a  LiteFunction()..
6290: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 5f 72 65      {..      _re
62a0: 67 69 73 74 65 72 65 64 46 75 6e 63 74 69 6f 6e  gisteredFunction
62b0: 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  s = new Dictiona
62c0: 72 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ry<SQLiteFunctio
62d0: 6e 41 74 74 72 69 62 75 74 65 2c 20 6f 62 6a 65  nAttribute, obje
62e0: 63 74 3e 28 29 3b 0d 0a 20 20 20 20 20 20 74 72  ct>();..      tr
62f0: 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  y..      {..#if 
6300: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
6310: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
6320: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
6330: 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20  // NOTE: If the 
6340: 22 4e 6f 5f 53 51 4c 69 74 65 46 75 6e 63 74 69  "No_SQLiteFuncti
6350: 6f 6e 73 22 20 65 6e 76 69 72 6f 6e 6d 65 6e 74  ons" environment
6360: 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
6370: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  ,..        //   
6380: 20 20 20 20 73 6b 69 70 20 61 6c 6c 20 6f 75 72      skip all our
6390: 20 73 70 65 63 69 61 6c 20 63 6f 64 65 20 61 6e   special code an
63a0: 64 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 2e  d simply return.
63b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
63c0: 20 20 20 20 20 20 69 66 20 28 55 6e 73 61 66 65        if (Unsafe
63d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65  NativeMethods.Ge
63e0: 74 53 65 74 74 69 6e 67 56 61 6c 75 65 28 22 4e  tSettingValue("N
63f0: 6f 5f 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  o_SQLiteFunction
6400: 73 22 2c 20 6e 75 6c 6c 29 20 21 3d 20 6e 75 6c  s", null) != nul
6410: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  l)..          re
6420: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
6430: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41   SQLiteFunctionA
6440: 74 74 72 69 62 75 74 65 20 61 74 3b 0d 0a 20 20  ttribute at;..  
6450: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 52 65 66        System.Ref
6460: 6c 65 63 74 69 6f 6e 2e 41 73 73 65 6d 62 6c 79  lection.Assembly
6470: 5b 5d 20 61 72 41 73 73 65 6d 62 6c 69 65 73 20  [] arAssemblies 
6480: 3d 20 53 79 73 74 65 6d 2e 41 70 70 44 6f 6d 61  = System.AppDoma
6490: 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e  in.CurrentDomain
64a0: 2e 47 65 74 41 73 73 65 6d 62 6c 69 65 73 28 29  .GetAssemblies()
64b0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 77  ;..        int w
64c0: 20 3d 20 61 72 41 73 73 65 6d 62 6c 69 65 73 2e   = arAssemblies.
64d0: 4c 65 6e 67 74 68 3b 0d 0a 20 20 20 20 20 20 20  Length;..       
64e0: 20 53 79 73 74 65 6d 2e 52 65 66 6c 65 63 74 69   System.Reflecti
64f0: 6f 6e 2e 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  on.AssemblyName 
6500: 73 71 6c 69 74 65 20 3d 20 53 79 73 74 65 6d 2e  sqlite = System.
6510: 52 65 66 6c 65 63 74 69 6f 6e 2e 41 73 73 65 6d  Reflection.Assem
6520: 62 6c 79 2e 47 65 74 45 78 65 63 75 74 69 6e 67  bly.GetExecuting
6530: 41 73 73 65 6d 62 6c 79 28 29 2e 47 65 74 4e 61  Assembly().GetNa
6540: 6d 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me();....       
6550: 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b   for (int n = 0;
6560: 20 6e 20 3c 20 77 3b 20 6e 2b 2b 29 0d 0a 20 20   n < w; n++)..  
6570: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6580: 20 20 20 54 79 70 65 5b 5d 20 61 72 54 79 70 65     Type[] arType
6590: 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 6f  s;..          bo
65a0: 6f 6c 20 66 6f 75 6e 64 20 3d 20 66 61 6c 73 65  ol found = false
65b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 79 73  ;..          Sys
65c0: 74 65 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 2e 41  tem.Reflection.A
65d0: 73 73 65 6d 62 6c 79 4e 61 6d 65 5b 5d 20 72 65  ssemblyName[] re
65e0: 66 65 72 65 6e 63 65 73 3b 0d 0a 20 20 20 20 20  ferences;..     
65f0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
6600: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6610: 20 20 20 2f 2f 20 49 6e 73 70 65 63 74 20 6f 6e     // Inspect on
6620: 6c 79 20 61 73 73 65 6d 62 6c 69 65 73 20 74 68  ly assemblies th
6630: 61 74 20 72 65 66 65 72 65 6e 63 65 20 53 51 4c  at reference SQL
6640: 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ite..           
6650: 20 72 65 66 65 72 65 6e 63 65 73 20 3d 20 61 72   references = ar
6660: 41 73 73 65 6d 62 6c 69 65 73 5b 6e 5d 2e 47 65  Assemblies[n].Ge
6670: 74 52 65 66 65 72 65 6e 63 65 64 41 73 73 65 6d  tReferencedAssem
6680: 62 6c 69 65 73 28 29 3b 0d 0a 20 20 20 20 20 20  blies();..      
6690: 20 20 20 20 20 20 69 6e 74 20 74 20 3d 20 72 65        int t = re
66a0: 66 65 72 65 6e 63 65 73 2e 4c 65 6e 67 74 68 3b  ferences.Length;
66b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
66c0: 72 20 28 69 6e 74 20 7a 20 3d 20 30 3b 20 7a 20  r (int z = 0; z 
66d0: 3c 20 74 3b 20 7a 2b 2b 29 0d 0a 20 20 20 20 20  < t; z++)..     
66e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
66f0: 20 20 20 20 20 20 20 20 69 66 20 28 72 65 66 65          if (refe
6700: 72 65 6e 63 65 73 5b 7a 5d 2e 4e 61 6d 65 20 3d  rences[z].Name =
6710: 3d 20 73 71 6c 69 74 65 2e 4e 61 6d 65 29 0d 0a  = sqlite.Name)..
6720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6740: 20 66 6f 75 6e 64 20 3d 20 74 72 75 65 3b 0d 0a   found = true;..
6750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6760: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
6770: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6780: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6790: 20 20 20 20 20 20 69 66 20 28 66 6f 75 6e 64 20        if (found 
67a0: 3d 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20  == false)..     
67b0: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
67c0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
67d0: 20 20 61 72 54 79 70 65 73 20 3d 20 61 72 41 73    arTypes = arAs
67e0: 73 65 6d 62 6c 69 65 73 5b 6e 5d 2e 47 65 74 54  semblies[n].GetT
67f0: 79 70 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20  ypes();..       
6800: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
6810: 63 61 74 63 68 20 28 52 65 66 6c 65 63 74 69 6f  catch (Reflectio
6820: 6e 2e 52 65 66 6c 65 63 74 69 6f 6e 54 79 70 65  n.ReflectionType
6830: 4c 6f 61 64 45 78 63 65 70 74 69 6f 6e 20 65 29  LoadException e)
6840: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
6850: 20 20 20 20 20 20 20 20 20 20 20 61 72 54 79 70             arTyp
6860: 65 73 20 3d 20 65 2e 54 79 70 65 73 3b 0d 0a 20  es = e.Types;.. 
6870: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
6880: 20 20 20 20 20 20 20 20 69 6e 74 20 76 20 3d 20          int v = 
6890: 61 72 54 79 70 65 73 2e 4c 65 6e 67 74 68 3b 0d  arTypes.Length;.
68a0: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28  .          for (
68b0: 69 6e 74 20 78 20 3d 20 30 3b 20 78 20 3c 20 76  int x = 0; x < v
68c0: 3b 20 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  ; x++)..        
68d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
68e0: 20 69 66 20 28 61 72 54 79 70 65 73 5b 78 5d 20   if (arTypes[x] 
68f0: 3d 3d 20 6e 75 6c 6c 29 20 63 6f 6e 74 69 6e 75  == null) continu
6900: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
6910: 20 20 6f 62 6a 65 63 74 5b 5d 20 61 72 41 74 74    object[] arAtt
6920: 20 3d 20 61 72 54 79 70 65 73 5b 78 5d 2e 47 65   = arTypes[x].Ge
6930: 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65  tCustomAttribute
6940: 73 28 74 79 70 65 6f 66 28 53 51 4c 69 74 65 46  s(typeof(SQLiteF
6950: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
6960: 29 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  ), false);..    
6970: 20 20 20 20 20 20 20 20 69 6e 74 20 75 20 3d 20          int u = 
6980: 61 72 41 74 74 2e 4c 65 6e 67 74 68 3b 0d 0a 20  arAtt.Length;.. 
6990: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
69a0: 69 6e 74 20 79 20 3d 20 30 3b 20 79 20 3c 20 75  int y = 0; y < u
69b0: 3b 20 79 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  ; y++)..        
69c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
69d0: 20 20 20 20 20 61 74 20 3d 20 61 72 41 74 74 5b       at = arAtt[
69e0: 79 5d 20 61 73 20 53 51 4c 69 74 65 46 75 6e 63  y] as SQLiteFunc
69f0: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 3b 0d 0a  tionAttribute;..
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
6a10: 20 28 61 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20   (at != null).. 
6a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a40: 61 74 2e 49 6e 73 74 61 6e 63 65 54 79 70 65 20  at.InstanceType 
6a50: 3d 20 61 72 54 79 70 65 73 5b 78 5d 3b 0d 0a 20  = arTypes[x];.. 
6a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
6a70: 72 65 67 69 73 74 65 72 65 64 46 75 6e 63 74 69  registeredFuncti
6a80: 6f 6e 73 2e 41 64 64 28 61 74 2c 20 6e 75 6c 6c  ons.Add(at, null
6a90: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6aa0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
6ab0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
6ac0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64  .        }..#end
6ad0: 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  if..      }..   
6ae0: 20 20 20 63 61 74 63 68 20 2f 2f 20 53 51 4c 69     catch // SQLi
6af0: 74 65 20 70 72 6f 76 69 64 65 72 20 63 61 6e 20  te provider can 
6b00: 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 6f 75 74  continue without
6b10: 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 66   being able to f
6b20: 69 6e 64 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  ind built-in fun
6b30: 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 7b 0d  ctions..      {.
6b40: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
6b50: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
6b60: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d 61  ary>..    /// Ma
6b70: 6e 75 61 6c 20 6d 65 74 68 6f 64 20 6f 66 20 72  nual method of r
6b80: 65 67 69 73 74 65 72 69 6e 67 20 61 20 66 75 6e  egistering a fun
6b90: 63 74 69 6f 6e 2e 20 20 54 68 65 20 74 79 70 65  ction.  The type
6ba0: 20 6d 75 73 74 20 73 74 69 6c 6c 20 68 61 76 65   must still have
6bb0: 20 74 68 65 20 53 51 4c 69 74 65 46 75 6e 63 74   the SQLiteFunct
6bc0: 69 6f 6e 41 74 74 72 69 62 75 74 65 73 20 69 6e  ionAttributes in
6bd0: 20 6f 72 64 65 72 20 74 6f 20 77 6f 72 6b 0d 0a   order to work..
6be0: 20 20 20 20 2f 2f 2f 20 70 72 6f 70 65 72 6c 79      /// properly
6bf0: 2c 20 62 75 74 20 74 68 69 73 20 69 73 20 61 20  , but this is a 
6c00: 77 6f 72 6b 61 72 6f 75 6e 64 20 66 6f 72 20 74  workaround for t
6c10: 68 65 20 43 6f 6d 70 61 63 74 20 46 72 61 6d 65  he Compact Frame
6c20: 77 6f 72 6b 20 77 68 65 72 65 20 65 6e 75 6d 65  work where enume
6c30: 72 61 74 69 6e 67 20 61 73 73 65 6d 62 6c 69 65  rating assemblie
6c40: 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  s is not current
6c50: 6c 79 20 73 75 70 70 6f 72 74 65 64 2e 0d 0a 20  ly supported... 
6c60: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
6c70: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
6c80: 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65  m name="typ">The
6c90: 20 74 79 70 65 20 6f 66 20 74 68 65 20 66 75 6e   type of the fun
6ca0: 63 74 69 6f 6e 20 74 6f 20 72 65 67 69 73 74 65  ction to registe
6cb0: 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70  r</param>..    p
6cc0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
6cd0: 64 20 52 65 67 69 73 74 65 72 46 75 6e 63 74 69  d RegisterFuncti
6ce0: 6f 6e 28 54 79 70 65 20 74 79 70 29 0d 0a 20 20  on(Type typ)..  
6cf0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a    {..        obj
6d00: 65 63 74 5b 5d 20 61 72 41 74 74 20 3d 20 74 79  ect[] arAtt = ty
6d10: 70 2e 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69  p.GetCustomAttri
6d20: 62 75 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20  butes(..        
6d30: 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
6d40: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
6d50: 74 65 29 2c 20 66 61 6c 73 65 29 3b 0d 0a 0d 0a  te), false);....
6d60: 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
6d70: 20 79 20 3d 20 30 3b 20 79 20 3c 20 61 72 41 74   y = 0; y < arAt
6d80: 74 2e 4c 65 6e 67 74 68 3b 20 79 2b 2b 29 0d 0a  t.Length; y++)..
6d90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6da0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e         SQLiteFun
6db0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 61  ctionAttribute a
6dc0: 74 20 3d 20 61 72 41 74 74 5b 79 5d 20 61 73 20  t = arAtt[y] as 
6dd0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
6de0: 74 72 69 62 75 74 65 3b 0d 0a 0d 0a 20 20 20 20  tribute;....    
6df0: 20 20 20 20 20 20 20 20 69 66 20 28 61 74 20 3d          if (at =
6e00: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6e10: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
6e20: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
6e30: 20 20 52 65 67 69 73 74 65 72 46 75 6e 63 74 69    RegisterFuncti
6e40: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
6e50: 20 20 20 20 20 61 74 2e 4e 61 6d 65 2c 20 61 74       at.Name, at
6e60: 2e 41 72 67 75 6d 65 6e 74 73 2c 20 61 74 2e 46  .Arguments, at.F
6e70: 75 6e 63 54 79 70 65 2c 20 74 79 70 2c 0d 0a 20  uncType, typ,.. 
6e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
6e90: 74 2e 43 61 6c 6c 62 61 63 6b 31 2c 20 61 74 2e  t.Callback1, at.
6ea0: 43 61 6c 6c 62 61 63 6b 32 29 3b 0d 0a 20 20 20  Callback2);..   
6eb0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
6ec0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
6ed0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 74 65  y>..    /// Alte
6ee0: 72 6e 61 74 69 76 65 20 6d 65 74 68 6f 64 20 6f  rnative method o
6ef0: 66 20 72 65 67 69 73 74 65 72 69 6e 67 20 61 20  f registering a 
6f00: 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 69 73 20  function.  This 
6f10: 6d 65 74 68 6f 64 0d 0a 20 20 20 20 2f 2f 2f 20  method..    /// 
6f20: 64 6f 65 73 20 6e 6f 74 20 72 65 71 75 69 72 65  does not require
6f30: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74   the specified t
6f40: 79 70 65 20 74 6f 20 62 65 20 61 6e 6e 6f 74 61  ype to be annota
6f50: 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20 2f 2f  ted with..    //
6f60: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
6f70: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
6f80: 62 75 74 65 22 20 2f 3e 2e 0d 0a 20 20 20 20 2f  bute" />...    /
6f90: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
6fa0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
6fb0: 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20  me="name">..    
6fc0: 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  /// The name of 
6fd0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
6fe0: 72 65 67 69 73 74 65 72 2e 0d 0a 20 20 20 20 2f  register...    /
6ff0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
7000: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
7010: 3d 22 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 22  ="argumentCount"
7020: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
7030: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
7040: 74 73 20 61 63 63 65 70 74 65 64 20 62 79 20 74  ts accepted by t
7050: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20  he function...  
7060: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
7070: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
7080: 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 54 79 70  ame="functionTyp
7090: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
70a0: 20 74 79 70 65 20 6f 66 20 53 51 4c 69 74 65 20   type of SQLite 
70b0: 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 72  function being r
70c0: 65 73 69 74 65 72 65 64 20 28 65 2e 67 2e 20 73  esitered (e.g. s
70d0: 63 61 6c 61 72 2c 0d 0a 20 20 20 20 2f 2f 2f 20  calar,..    /// 
70e0: 61 67 67 72 65 67 61 74 65 2c 20 6f 72 20 63 6f  aggregate, or co
70f0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
7100: 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  )...    /// </pa
7110: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
7120: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 73 74 61  aram name="insta
7130: 6e 63 65 54 79 70 65 22 3e 0d 0a 20 20 20 20 2f  nceType">..    /
7140: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
7150: 3d 22 54 79 70 65 22 20 2f 3e 20 74 68 61 74 20  ="Type" /> that 
7160: 61 63 74 75 61 6c 6c 79 20 69 6d 70 6c 65 6d 65  actually impleme
7170: 6e 74 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  nts the function
7180: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  ...    /// This 
7190: 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65  will only be use
71a0: 64 20 69 66 20 74 68 65 20 3c 70 61 72 61 6d 72  d if the <paramr
71b0: 65 66 20 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63  ef name="callbac
71c0: 6b 31 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20  k1" />..    /// 
71d0: 61 6e 64 20 3c 70 61 72 61 6d 72 65 66 20 6e 61  and <paramref na
71e0: 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 32 22 20 2f  me="callback2" /
71f0: 3e 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65  > parameters are
7200: 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 2f 2f 2f 20   null...    /// 
7210: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
7220: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
7230: 61 6c 6c 62 61 63 6b 31 22 3e 0d 0a 20 20 20 20  allback1">..    
7240: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
7250: 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f 3e 20  f="Delegate" /> 
7260: 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 61  to be used for a
7270: 6c 6c 20 63 61 6c 6c 73 20 69 6e 74 6f 20 74 68  ll calls into th
7280: 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20  e..    /// <see 
7290: 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63  cref="SQLiteFunc
72a0: 74 69 6f 6e 2e 49 6e 76 6f 6b 65 22 20 2f 3e 2c  tion.Invoke" />,
72b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63  ..    /// <see c
72c0: 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74  ref="SQLiteFunct
72d0: 69 6f 6e 2e 53 74 65 70 22 20 2f 3e 2c 0d 0a 20  ion.Step" />,.. 
72e0: 20 20 20 2f 2f 2f 20 61 6e 64 20 3c 73 65 65 20     /// and <see 
72f0: 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63  cref="SQLiteFunc
7300: 74 69 6f 6e 2e 43 6f 6d 70 61 72 65 22 20 2f 3e  tion.Compare" />
7310: 20 76 69 72 74 75 61 6c 20 6d 65 74 68 6f 64 73   virtual methods
7320: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
7330: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
7340: 72 61 6d 20 6e 61 6d 65 3d 22 63 61 6c 6c 62 61  ram name="callba
7350: 63 6b 32 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ck2">..    /// T
7360: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 65  he <see cref="De
7370: 6c 65 67 61 74 65 22 20 2f 3e 20 74 6f 20 62 65  legate" /> to be
7380: 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 63 61   used for all ca
7390: 6c 6c 73 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20  lls into the..  
73a0: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
73b0: 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e  "SQLiteFunction.
73c0: 46 69 6e 61 6c 22 20 2f 3e 20 76 69 72 74 75 61  Final" /> virtua
73d0: 6c 20 6d 65 74 68 6f 64 2e 20 20 54 68 69 73 0d  l method.  This.
73e0: 0a 20 20 20 20 2f 2f 2f 20 70 61 72 61 6d 65 74  .    /// paramet
73f0: 65 72 20 69 73 20 6f 6e 6c 79 20 6e 65 63 65 73  er is only neces
7400: 73 61 72 79 20 66 6f 72 20 61 67 67 72 65 67 61  sary for aggrega
7410: 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20  te functions... 
7420: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
7430: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74  .    public stat
7440: 69 63 20 76 6f 69 64 20 52 65 67 69 73 74 65 72  ic void Register
7450: 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
7460: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
7470: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67  .        int arg
7480: 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20  umentCount,..   
7490: 20 20 20 20 20 46 75 6e 63 74 69 6f 6e 54 79 70       FunctionTyp
74a0: 65 20 66 75 6e 63 74 69 6f 6e 54 79 70 65 2c 0d  e functionType,.
74b0: 0a 20 20 20 20 20 20 20 20 54 79 70 65 20 69 6e  .        Type in
74c0: 73 74 61 6e 63 65 54 79 70 65 2c 0d 0a 20 20 20  stanceType,..   
74d0: 20 20 20 20 20 44 65 6c 65 67 61 74 65 20 63 61       Delegate ca
74e0: 6c 6c 62 61 63 6b 31 2c 0d 0a 20 20 20 20 20 20  llback1,..      
74f0: 20 20 44 65 6c 65 67 61 74 65 20 63 61 6c 6c 62    Delegate callb
7500: 61 63 6b 32 0d 0a 20 20 20 20 20 20 20 20 29 0d  ack2..        ).
7510: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
7520: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
7530: 74 72 69 62 75 74 65 20 61 74 20 3d 20 6e 65 77  tribute at = new
7540: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41   SQLiteFunctionA
7550: 74 74 72 69 62 75 74 65 28 0d 0a 20 20 20 20 20  ttribute(..     
7560: 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 61 72 67         name, arg
7570: 75 6d 65 6e 74 43 6f 75 6e 74 2c 20 66 75 6e 63  umentCount, func
7580: 74 69 6f 6e 54 79 70 65 29 3b 0d 0a 0d 0a 20 20  tionType);....  
7590: 20 20 20 20 20 20 61 74 2e 49 6e 73 74 61 6e 63        at.Instanc
75a0: 65 54 79 70 65 20 3d 20 69 6e 73 74 61 6e 63 65  eType = instance
75b0: 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 20 20 61  Type;..        a
75c0: 74 2e 43 61 6c 6c 62 61 63 6b 31 20 3d 20 63 61  t.Callback1 = ca
75d0: 6c 6c 62 61 63 6b 31 3b 0d 0a 20 20 20 20 20 20  llback1;..      
75e0: 20 20 61 74 2e 43 61 6c 6c 62 61 63 6b 32 20 3d    at.Callback2 =
75f0: 20 63 61 6c 6c 62 61 63 6b 32 3b 0d 0a 0d 0a 20   callback2;.... 
7600: 20 20 20 20 20 20 20 5f 72 65 67 69 73 74 65 72         _register
7610: 65 64 46 75 6e 63 74 69 6f 6e 73 2e 41 64 64 28  edFunctions.Add(
7620: 61 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20  at, null);..    
7630: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
7640: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
7650: 43 72 65 61 74 65 73 20 61 20 3c 73 65 65 20 63  Creates a <see c
7660: 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74  ref="SQLiteFunct
7670: 69 6f 6e 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65  ion" /> instance
7680: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 73 70   based on the sp
7690: 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f  ecified..    ///
76a0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
76b0: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
76c0: 75 74 65 22 20 2f 3e 2e 0d 0a 20 20 20 20 2f 2f  ute" />...    //
76d0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
76e0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
76f0: 65 3d 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  e="functionAttri
7700: 62 75 74 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  bute">..    /// 
7710: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
7720: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
7730: 72 69 62 75 74 65 22 20 2f 3e 20 63 6f 6e 74 61  ribute" /> conta
7740: 69 6e 69 6e 67 20 74 68 65 20 6d 65 74 61 64 61  ining the metada
7750: 74 61 20 61 62 6f 75 74 0d 0a 20 20 20 20 2f 2f  ta about..    //
7760: 2f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74  / the function t
7770: 6f 20 63 72 65 61 74 65 2e 0d 0a 20 20 20 20 2f  o create...    /
7780: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
7790: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
77a0: 3d 22 66 75 6e 63 74 69 6f 6e 22 3e 0d 0a 20 20  ="function">..  
77b0: 20 20 2f 2f 2f 20 54 68 65 20 63 72 65 61 74 65    /// The create
77c0: 64 20 66 75 6e 63 74 69 6f 6e 20 2d 4f 52 2d 20  d function -OR- 
77d0: 6e 75 6c 6c 20 69 66 20 74 68 65 20 66 75 6e 63  null if the func
77e0: 74 69 6f 6e 20 63 6f 75 6c 64 20 6e 6f 74 20 62  tion could not b
77f0: 65 20 63 72 65 61 74 65 64 2e 0d 0a 20 20 20 20  e created...    
7800: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
7810: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
7820: 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72  .    /// Non-zer
7830: 6f 20 69 66 20 74 68 65 20 66 75 6e 63 74 69 6f  o if the functio
7840: 6e 20 77 61 73 20 63 72 65 61 74 65 64 3b 20 6f  n was created; o
7850: 74 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d  therwise, zero..
7860: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
7870: 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ns>..    private
7880: 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 43 72 65   static bool Cre
7890: 61 74 65 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  ateFunction(..  
78a0: 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63        SQLiteFunc
78b0: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 66 75  tionAttribute fu
78c0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c  nctionAttribute,
78d0: 0d 0a 20 20 20 20 20 20 20 20 6f 75 74 20 53 51  ..        out SQ
78e0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e  LiteFunction fun
78f0: 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 29  ction..        )
7900: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
7910: 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 41 74 74   if (functionAtt
7920: 72 69 62 75 74 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ribute == null).
7930: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
7940: 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e          function
7950: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
7960: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
7970: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  se;..        }..
7980: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
7990: 28 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  ((functionAttrib
79a0: 75 74 65 2e 43 61 6c 6c 62 61 63 6b 31 20 21 3d  ute.Callback1 !=
79b0: 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20   null) ||..     
79c0: 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63             (func
79d0: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2e 43 61  tionAttribute.Ca
79e0: 6c 6c 62 61 63 6b 32 20 21 3d 20 6e 75 6c 6c 29  llback2 != null)
79f0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
7a00: 20 20 20 20 20 20 20 20 20 20 66 75 6e 63 74 69            functi
7a10: 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44  on = new SQLiteD
7a20: 65 6c 65 67 61 74 65 46 75 6e 63 74 69 6f 6e 28  elegateFunction(
7a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7a40: 20 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62    functionAttrib
7a50: 75 74 65 2e 43 61 6c 6c 62 61 63 6b 31 2c 0d 0a  ute.Callback1,..
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a70: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
7a80: 65 2e 43 61 6c 6c 62 61 63 6b 32 29 3b 0d 0a 0d  e.Callback2);...
7a90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
7aa0: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
7ab0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
7ac0: 73 65 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 41  se if (functionA
7ad0: 74 74 72 69 62 75 74 65 2e 49 6e 73 74 61 6e 63  ttribute.Instanc
7ae0: 65 54 79 70 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  eType != null)..
7af0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7b00: 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20         function 
7b10: 3d 20 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  = (SQLiteFunctio
7b20: 6e 29 41 63 74 69 76 61 74 6f 72 2e 43 72 65 61  n)Activator.Crea
7b30: 74 65 49 6e 73 74 61 6e 63 65 28 0d 0a 20 20 20  teInstance(..   
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6e               fun
7b50: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2e 49  ctionAttribute.I
7b60: 6e 73 74 61 6e 63 65 54 79 70 65 29 3b 0d 0a 0d  nstanceType);...
7b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
7b80: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
7b90: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
7ba0: 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  se..        {.. 
7bb0: 20 20 20 20 20 20 20 20 20 20 20 66 75 6e 63 74             funct
7bc0: 69 6f 6e 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ion = null;..   
7bd0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7be0: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
7bf0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
7c00: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
7c10: 20 20 20 2f 2f 2f 20 43 61 6c 6c 65 64 20 62 79     /// Called by
7c20: 20 74 68 65 20 53 51 4c 69 74 65 42 61 73 65 20   the SQLiteBase 
7c30: 64 65 72 69 76 65 64 20 63 6c 61 73 73 65 73 2c  derived classes,
7c40: 20 74 68 69 73 20 6d 65 74 68 6f 64 20 62 69 6e   this method bin
7c50: 64 73 20 61 6c 6c 20 72 65 67 69 73 74 65 72 65  ds all registere
7c60: 64 20 28 6b 6e 6f 77 6e 29 20 75 73 65 72 2d 64  d (known) user-d
7c70: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
7c80: 20 74 6f 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e   to a connection
7c90: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 74 20 69 73  ...    /// It is
7ca0: 20 64 6f 6e 65 20 74 68 69 73 20 77 61 79 20 73   done this way s
7cb0: 6f 20 74 68 61 74 20 61 6c 6c 20 75 73 65 72 2d  o that all user-
7cc0: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
7cd0: 73 20 77 69 6c 6c 20 61 63 63 65 73 73 20 74 68  s will access th
7ce0: 65 20 64 61 74 61 62 61 73 65 20 75 73 69 6e 67  e database using
7cf0: 20 74 68 65 20 73 61 6d 65 20 65 6e 63 6f 64 69   the same encodi
7d00: 6e 67 20 73 63 68 65 6d 65 0d 0a 20 20 20 20 2f  ng scheme..    /
7d10: 2f 2f 20 61 73 20 74 68 65 20 63 6f 6e 6e 65 63  // as the connec
7d20: 74 69 6f 6e 20 28 55 54 46 2d 38 20 6f 72 20 55  tion (UTF-8 or U
7d30: 54 46 2d 31 36 29 2e 0d 0a 20 20 20 20 2f 2f 2f  TF-16)...    ///
7d40: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
7d50: 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a   /// <remarks>..
7d60: 20 20 20 20 2f 2f 2f 20 54 68 65 20 77 72 61 70      /// The wrap
7d70: 70 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 74 68  per functions th
7d80: 61 74 20 69 6e 74 65 72 6f 70 20 77 69 74 68 20  at interop with 
7d90: 53 51 4c 69 74 65 20 77 69 6c 6c 20 63 72 65 61  SQLite will crea
7da0: 74 65 20 61 20 75 6e 69 71 75 65 20 63 6f 6f 6b  te a unique cook
7db0: 69 65 20 76 61 6c 75 65 2c 20 77 68 69 63 68 20  ie value, which 
7dc0: 69 6e 74 65 72 6e 61 6c 6c 79 20 69 73 20 61 20  internally is a 
7dd0: 70 6f 69 6e 74 65 72 20 74 6f 0d 0a 20 20 20 20  pointer to..    
7de0: 2f 2f 2f 20 61 6c 6c 20 74 68 65 20 77 72 61 70  /// all the wrap
7df0: 70 65 64 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ped callback fun
7e00: 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 69 6e 74  ctions.  The int
7e10: 65 72 6f 70 20 66 75 6e 63 74 69 6f 6e 20 75 73  erop function us
7e20: 65 73 20 69 74 20 74 6f 20 6d 61 70 20 43 44 65  es it to map CDe
7e30: 63 6c 20 63 61 6c 6c 62 61 63 6b 73 20 74 6f 20  cl callbacks to 
7e40: 53 74 64 43 61 6c 6c 20 63 61 6c 6c 62 61 63 6b  StdCall callback
7e50: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  s...    /// </re
7e60: 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  marks>..    /// 
7e70: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 71 6c  <param name="sql
7e80: 62 61 73 65 22 3e 54 68 65 20 62 61 73 65 20 6f  base">The base o
7e90: 62 6a 65 63 74 20 6f 6e 20 77 68 69 63 68 20 74  bject on which t
7ea0: 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  he functions are
7eb0: 20 74 6f 20 62 69 6e 64 2e 3c 2f 70 61 72 61 6d   to bind.</param
7ec0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
7ed0: 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54  m name="flags">T
7ee0: 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61  he flags associa
7ef0: 74 65 64 20 77 69 74 68 20 74 68 65 20 70 61 72  ted with the par
7f00: 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f  ent connection o
7f10: 62 6a 65 63 74 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  bject.</param>..
7f20: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
7f30: 3e 52 65 74 75 72 6e 73 20 61 20 6c 6f 67 69 63  >Returns a logic
7f40: 61 6c 20 6c 69 73 74 20 6f 66 20 66 75 6e 63 74  al list of funct
7f50: 69 6f 6e 73 20 77 68 69 63 68 20 74 68 65 20 63  ions which the c
7f60: 6f 6e 6e 65 63 74 69 6f 6e 20 73 68 6f 75 6c 64  onnection should
7f70: 20 72 65 74 61 69 6e 20 75 6e 74 69 6c 20 69 74   retain until it
7f80: 20 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 72 65 74   is closed.</ret
7f90: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
7fa0: 6e 61 6c 20 73 74 61 74 69 63 20 49 44 69 63 74  nal static IDict
7fb0: 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65 46 75 6e  ionary<SQLiteFun
7fc0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20  ctionAttribute, 
7fd0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 20  SQLiteFunction> 
7fe0: 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 0d 0a  BindFunctions(..
7ff0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
8000: 73 65 20 73 71 6c 62 61 73 65 2c 0d 0a 20 20 20  se sqlbase,..   
8010: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
8020: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
8030: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
8040: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 44 69 63   {..        IDic
8050: 74 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65 46 75  tionary<SQLiteFu
8060: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c  nctionAttribute,
8070: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e   SQLiteFunction>
8080: 20 6c 46 75 6e 63 74 69 6f 6e 73 20 3d 0d 0a 20   lFunctions =.. 
8090: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 44             new D
80a0: 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65  ictionary<SQLite
80b0: 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
80c0: 65 2c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  e, SQLiteFunctio
80d0: 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  n>();....       
80e0: 20 66 6f 72 65 61 63 68 20 28 4b 65 79 56 61 6c   foreach (KeyVal
80f0: 75 65 50 61 69 72 3c 53 51 4c 69 74 65 46 75 6e  uePair<SQLiteFun
8100: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20  ctionAttribute, 
8110: 6f 62 6a 65 63 74 3e 20 70 61 69 72 0d 0a 20 20  object> pair..  
8120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
8130: 20 5f 72 65 67 69 73 74 65 72 65 64 46 75 6e 63   _registeredFunc
8140: 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20  tions)..        
8150: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
8160: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
8170: 72 69 62 75 74 65 20 70 72 20 3d 20 70 61 69 72  ribute pr = pair
8180: 2e 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  .Key;....       
8190: 20 20 20 20 20 69 66 20 28 70 72 20 3d 3d 20 6e       if (pr == n
81a0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
81b0: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
81c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
81d0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 3b  QLiteFunction f;
81e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
81f0: 69 66 20 28 43 72 65 61 74 65 46 75 6e 63 74 69  if (CreateFuncti
8200: 6f 6e 28 70 72 2c 20 6f 75 74 20 66 29 29 0d 0a  on(pr, out f))..
8210: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
8230: 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 62  indFunction(sqlb
8240: 61 73 65 2c 20 70 72 2c 20 66 2c 20 66 6c 61 67  ase, pr, f, flag
8250: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s);..           
8260: 20 20 20 20 20 6c 46 75 6e 63 74 69 6f 6e 73 5b       lFunctions[
8270: 70 72 5d 20 3d 20 66 3b 0d 0a 20 20 20 20 20 20  pr] = f;..      
8280: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8290: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
82a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
82b0: 20 20 20 20 20 20 20 20 20 20 6c 46 75 6e 63 74            lFunct
82c0: 69 6f 6e 73 5b 70 72 5d 20 3d 20 6e 75 6c 6c 3b  ions[pr] = null;
82d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
82e0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
82f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c 46 75        return lFu
8300: 6e 63 74 69 6f 6e 73 3b 0d 0a 20 20 20 20 7d 0d  nctions;..    }.
8310: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
8320: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61  ary>..    /// Ca
8330: 6c 6c 65 64 20 62 79 20 74 68 65 20 53 51 4c 69  lled by the SQLi
8340: 74 65 42 61 73 65 20 64 65 72 69 76 65 64 20 63  teBase derived c
8350: 6c 61 73 73 65 73 2c 20 74 68 69 73 20 6d 65 74  lasses, this met
8360: 68 6f 64 20 75 6e 62 69 6e 64 73 20 61 6c 6c 20  hod unbinds all 
8370: 72 65 67 69 73 74 65 72 65 64 20 28 6b 6e 6f 77  registered (know
8380: 6e 29 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63  n)..    /// func
8390: 74 69 6f 6e 73 20 2d 4f 52 2d 20 61 6c 6c 20 70  tions -OR- all p
83a0: 72 65 76 69 6f 75 73 6c 79 20 62 6f 75 6e 64 20  reviously bound 
83b0: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
83c0: 63 74 69 6f 6e 73 20 66 72 6f 6d 20 61 20 63 6f  ctions from a co
83d0: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
83e0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
83f0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
8400: 6d 65 3d 22 73 71 6c 62 61 73 65 22 3e 54 68 65  me="sqlbase">The
8410: 20 62 61 73 65 20 6f 62 6a 65 63 74 20 66 72 6f   base object fro
8420: 6d 20 77 68 69 63 68 20 74 68 65 20 66 75 6e 63  m which the func
8430: 74 69 6f 6e 73 20 61 72 65 20 74 6f 20 62 65 20  tions are to be 
8440: 75 6e 62 6f 75 6e 64 2e 3c 2f 70 61 72 61 6d 3e  unbound.</param>
8450: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
8460: 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68   name="flags">Th
8470: 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74  e flags associat
8480: 65 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65  ed with the pare
8490: 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  nt connection ob
84a0: 6a 65 63 74 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  ject.</param>.. 
84b0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
84c0: 6d 65 3d 22 72 65 67 69 73 74 65 72 65 64 22 3e  me="registered">
84d0: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
84e0: 72 6f 20 74 6f 20 75 6e 62 69 6e 64 20 61 6c 6c  ro to unbind all
84f0: 20 72 65 67 69 73 74 65 72 65 64 20 28 6b 6e 6f   registered (kno
8500: 77 6e 29 20 66 75 6e 63 74 69 6f 6e 73 20 2d 4f  wn) functions -O
8510: 52 2d 20 7a 65 72 6f 20 74 6f 20 75 6e 62 69 6e  R- zero to unbin
8520: 64 20 61 6c 6c 20 66 75 6e 63 74 69 6f 6e 73 0d  d all functions.
8530: 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74  .    /// current
8540: 6c 79 20 62 6f 75 6e 64 20 74 6f 20 74 68 65 20  ly bound to the 
8550: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
8560: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
8570: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
8580: 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 6c 6c 20  Non-zero if all 
8590: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 75 73  the specified us
85a0: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
85b0: 69 6f 6e 73 20 77 65 72 65 20 75 6e 62 6f 75 6e  ions were unboun
85c0: 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  d.</returns>..  
85d0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
85e0: 63 20 62 6f 6f 6c 20 55 6e 62 69 6e 64 41 6c 6c  c bool UnbindAll
85f0: 46 75 6e 63 74 69 6f 6e 73 28 0d 0a 20 20 20 20  Functions(..    
8600: 20 20 20 20 53 51 4c 69 74 65 42 61 73 65 20 73      SQLiteBase s
8610: 71 6c 62 61 73 65 2c 0d 0a 20 20 20 20 20 20 20  qlbase,..       
8620: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8630: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 0d 0a 20  nFlags flags,.. 
8640: 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 67 69         bool regi
8650: 73 74 65 72 65 64 0d 0a 20 20 20 20 20 20 20 20  stered..        
8660: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8670: 20 20 69 66 20 28 73 71 6c 62 61 73 65 20 3d 3d    if (sqlbase ==
8680: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
8690: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
86a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 44 69  ;....        IDi
86b0: 63 74 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65 46  ctionary<SQLiteF
86c0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
86d0: 2c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  , SQLiteFunction
86e0: 3e 20 6c 46 75 6e 63 74 69 6f 6e 73 20 3d 0d 0a  > lFunctions =..
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 62              sqlb
8700: 61 73 65 2e 46 75 6e 63 74 69 6f 6e 73 3b 0d 0a  ase.Functions;..
8710: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6c 46  ..        if (lF
8720: 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  unctions == null
8730: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
8740: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
8750: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 73          bool res
8760: 75 6c 74 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20  ult = true;.... 
8770: 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69 73         if (regis
8780: 74 65 72 65 64 29 0d 0a 20 20 20 20 20 20 20 20  tered)..        
8790: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  {..            f
87a0: 6f 72 65 61 63 68 20 28 4b 65 79 56 61 6c 75 65  oreach (KeyValue
87b0: 50 61 69 72 3c 53 51 4c 69 74 65 46 75 6e 63 74  Pair<SQLiteFunct
87c0: 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 6f 62  ionAttribute, ob
87d0: 6a 65 63 74 3e 20 70 61 69 72 0d 0a 20 20 20 20  ject> pair..    
87e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87f0: 69 6e 20 5f 72 65 67 69 73 74 65 72 65 64 46 75  in _registeredFu
8800: 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20  nctions)..      
8810: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8820: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46           SQLiteF
8830: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
8840: 20 70 72 20 3d 20 70 61 69 72 2e 4b 65 79 3b 0d   pr = pair.Key;.
8850: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8860: 20 20 20 69 66 20 28 70 72 20 3d 3d 20 6e 75 6c     if (pr == nul
8870: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8880: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
8890: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
88a0: 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74       SQLiteFunct
88b0: 69 6f 6e 20 66 3b 0d 0a 0d 0a 20 20 20 20 20 20  ion f;....      
88c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 6c            if (!l
88d0: 46 75 6e 63 74 69 6f 6e 73 2e 54 72 79 47 65 74  Functions.TryGet
88e0: 56 61 6c 75 65 28 70 72 2c 20 6f 75 74 20 66 29  Value(pr, out f)
88f0: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
8900: 20 20 20 20 20 20 20 20 20 28 66 20 3d 3d 20 6e           (f == n
8910: 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  ull) ||..       
8920: 20 20 20 20 20 20 20 20 20 20 20 20 20 21 55 6e               !Un
8930: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  bindFunction(sql
8940: 62 61 73 65 2c 20 70 72 2c 20 66 2c 20 66 6c 61  base, pr, f, fla
8950: 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  gs))..          
8960: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8970: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
8980: 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  ult = false;..  
8990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
89a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
89b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
89c0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
89d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
89e0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
89f0: 2f 2f 20 4e 4f 54 45 3a 20 4e 65 65 64 20 74 6f  // NOTE: Need to
8a00: 20 75 73 65 20 61 20 63 6f 70 79 20 6f 66 20 74   use a copy of t
8a10: 68 65 20 66 75 6e 63 74 69 6f 6e 20 64 69 63 74  he function dict
8a20: 69 6f 6e 61 72 79 20 69 6e 20 74 68 69 73 20 6d  ionary in this m
8a30: 65 74 68 6f 64 0d 0a 20 20 20 20 20 20 20 20 20  ethod..         
8a40: 20 20 20 2f 2f 20 20 20 20 20 20 20 62 65 63 61     //       beca
8a50: 75 73 65 20 74 68 65 20 64 69 63 74 69 6f 6e 61  use the dictiona
8a60: 72 79 20 69 73 20 6d 6f 64 69 66 69 65 64 20 77  ry is modified w
8a70: 69 74 68 69 6e 20 74 68 65 20 55 6e 62 69 6e 64  ithin the Unbind
8a80: 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20  Function..      
8a90: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d        //       m
8aa0: 65 74 68 6f 64 2c 20 77 68 69 63 68 20 69 73 20  ethod, which is 
8ab0: 63 61 6c 6c 65 64 20 69 6e 73 69 64 65 20 74 68  called inside th
8ac0: 65 20 6c 6f 6f 70 2e 0d 0a 20 20 20 20 20 20 20  e loop...       
8ad0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
8ae0: 20 20 20 20 20 6c 46 75 6e 63 74 69 6f 6e 73 20       lFunctions 
8af0: 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79  = new Dictionary
8b00: 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41  <SQLiteFunctionA
8b10: 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65  ttribute, SQLite
8b20: 46 75 6e 63 74 69 6f 6e 3e 28 0d 0a 20 20 20 20  Function>(..    
8b30: 20 20 20 20 20 20 20 20 20 20 20 20 6c 46 75 6e              lFun
8b40: 63 74 69 6f 6e 73 29 3b 0d 0a 0d 0a 20 20 20 20  ctions);....    
8b50: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
8b60: 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 53 51  (KeyValuePair<SQ
8b70: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
8b80: 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e  ibute, SQLiteFun
8b90: 63 74 69 6f 6e 3e 20 70 61 69 72 0d 0a 20 20 20  ction> pair..   
8ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8bb0: 20 69 6e 20 6c 46 75 6e 63 74 69 6f 6e 73 29 0d   in lFunctions).
8bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8be0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
8bf0: 74 72 69 62 75 74 65 20 70 72 20 3d 20 70 61 69  tribute pr = pai
8c00: 72 2e 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  r.Key;....      
8c10: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 72            if (pr
8c20: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
8c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
8c40: 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
8c50: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
8c60: 74 65 46 75 6e 63 74 69 6f 6e 20 66 20 3d 20 70  teFunction f = p
8c70: 61 69 72 2e 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20  air.Value;....  
8c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8c90: 20 28 28 66 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c   ((f == null) ||
8ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8cb0: 20 20 20 20 20 20 21 55 6e 62 69 6e 64 46 75 6e        !UnbindFun
8cc0: 63 74 69 6f 6e 28 73 71 6c 62 61 73 65 2c 20 70  ction(sqlbase, p
8cd0: 72 2c 20 66 2c 20 66 6c 61 67 73 29 29 0d 0a 20  r, f, flags)).. 
8ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
8cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d00: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 66        result = f
8d10: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
8d20: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
8d30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8d40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
8d50: 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
8d60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
8d70: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
8d80: 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  / This function 
8d90: 62 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65 66  binds a user-def
8da0: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f  ined function to
8db0: 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a   a connection...
8dc0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8dd0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
8de0: 61 6d 20 6e 61 6d 65 3d 22 73 71 6c 69 74 65 42  am name="sqliteB
8df0: 61 73 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ase">..    /// T
8e00: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
8e10: 4c 69 74 65 42 61 73 65 22 20 2f 3e 20 6f 62 6a  LiteBase" /> obj
8e20: 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73  ect instance ass
8e30: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
8e40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63  ..    /// <see c
8e50: 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65  ref="SQLiteConne
8e60: 63 74 69 6f 6e 22 20 2f 3e 20 74 68 61 74 20 74  ction" /> that t
8e70: 68 65 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75  he function shou
8e80: 6c 64 20 62 65 20 62 6f 75 6e 64 20 74 6f 2e 0d  ld be bound to..
8e90: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
8ea0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
8eb0: 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e  m name="function
8ec0: 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20 20 20  Attribute">..   
8ed0: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
8ee0: 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69  ef="SQLiteFuncti
8ef0: 6f 6e 41 74 74 72 69 62 75 74 65 22 2f 3e 20 6f  onAttribute"/> o
8f00: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 63  bject instance c
8f10: 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 2f  ontaining..    /
8f20: 2f 2f 20 74 68 65 20 6d 65 74 61 64 61 74 61 20  // the metadata 
8f30: 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  for the function
8f40: 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a 20   to be bound... 
8f50: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
8f60: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
8f70: 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 22 3e  name="function">
8f80: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73  ..    /// The <s
8f90: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46  ee cref="SQLiteF
8fa0: 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62 6a 65 63  unction"/> objec
8fb0: 74 20 69 6e 73 74 61 6e 63 65 20 74 68 61 74 20  t instance that 
8fc0: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0d 0a  implements the..
8fd0: 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e      /// function
8fe0: 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a 20   to be bound... 
8ff0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
9000: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
9010: 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20  name="flags">.. 
9020: 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73     /// The flags
9030: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
9040: 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e   the parent conn
9050: 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 0d 0a  ection object...
9060: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
9070: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
9080: 74 61 74 69 63 20 76 6f 69 64 20 42 69 6e 64 46  tatic void BindF
9090: 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  unction(..      
90a0: 20 20 53 51 4c 69 74 65 42 61 73 65 20 73 71 6c    SQLiteBase sql
90b0: 69 74 65 42 61 73 65 2c 0d 0a 20 20 20 20 20 20  iteBase,..      
90c0: 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e    SQLiteFunction
90d0: 41 74 74 72 69 62 75 74 65 20 66 75 6e 63 74 69  Attribute functi
90e0: 6f 6e 41 74 74 72 69 62 75 74 65 2c 0d 0a 20 20  onAttribute,..  
90f0: 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63        SQLiteFunc
9100: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 0d 0a  tion function,..
9110: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
9120: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
9130: 61 67 73 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ags..        )..
9140: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
9150: 66 20 28 73 71 6c 69 74 65 42 61 73 65 20 3d 3d  f (sqliteBase ==
9160: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
9170: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
9180: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
9190: 69 6f 6e 28 22 73 71 6c 69 74 65 42 61 73 65 22  ion("sqliteBase"
91a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
91b0: 20 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62   (functionAttrib
91c0: 75 74 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ute == null)..  
91d0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
91e0: 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
91f0: 45 78 63 65 70 74 69 6f 6e 28 22 66 75 6e 63 74  Exception("funct
9200: 69 6f 6e 41 74 74 72 69 62 75 74 65 22 29 3b 0d  ionAttribute");.
9210: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 66  ...        if (f
9220: 75 6e 63 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  unction == null)
9230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
9240: 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
9250: 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 66  NullException("f
9260: 75 6e 63 74 69 6f 6e 22 29 3b 0d 0a 0d 0a 20 20  unction");....  
9270: 20 20 20 20 20 20 46 75 6e 63 74 69 6f 6e 54 79        FunctionTy
9280: 70 65 20 66 75 6e 63 74 69 6f 6e 54 79 70 65 20  pe functionType 
9290: 3d 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  = functionAttrib
92a0: 75 74 65 2e 46 75 6e 63 54 79 70 65 3b 0d 0a 0d  ute.FuncType;...
92b0: 0a 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f  .        functio
92c0: 6e 2e 5f 62 61 73 65 20 3d 20 73 71 6c 69 74 65  n._base = sqlite
92d0: 42 61 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 66  Base;..        f
92e0: 75 6e 63 74 69 6f 6e 2e 5f 66 6c 61 67 73 20 3d  unction._flags =
92f0: 20 66 6c 61 67 73 3b 0d 0a 0d 0a 20 20 20 20 20   flags;....     
9300: 20 20 20 66 75 6e 63 74 69 6f 6e 2e 5f 49 6e 76     function._Inv
9310: 6f 6b 65 46 75 6e 63 20 3d 20 28 66 75 6e 63 74  okeFunc = (funct
9320: 69 6f 6e 54 79 70 65 20 3d 3d 20 46 75 6e 63 74  ionType == Funct
9330: 69 6f 6e 54 79 70 65 2e 53 63 61 6c 61 72 29 20  ionType.Scalar) 
9340: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ?..            n
9350: 65 77 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63  ew SQLiteCallbac
9360: 6b 28 66 75 6e 63 74 69 6f 6e 2e 53 63 61 6c 61  k(function.Scala
9370: 72 43 61 6c 6c 62 61 63 6b 29 20 3a 20 6e 75 6c  rCallback) : nul
9380: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 75  l;....        fu
9390: 6e 63 74 69 6f 6e 2e 5f 53 74 65 70 46 75 6e 63  nction._StepFunc
93a0: 20 3d 20 28 66 75 6e 63 74 69 6f 6e 54 79 70 65   = (functionType
93b0: 20 3d 3d 20 46 75 6e 63 74 69 6f 6e 54 79 70 65   == FunctionType
93c0: 2e 41 67 67 72 65 67 61 74 65 29 20 3f 0d 0a 20  .Aggregate) ?.. 
93d0: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
93e0: 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 28 66 75  QLiteCallback(fu
93f0: 6e 63 74 69 6f 6e 2e 53 74 65 70 43 61 6c 6c 62  nction.StepCallb
9400: 61 63 6b 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a  ack) : null;....
9410: 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e          function
9420: 2e 5f 46 69 6e 61 6c 46 75 6e 63 20 3d 20 28 66  ._FinalFunc = (f
9430: 75 6e 63 74 69 6f 6e 54 79 70 65 20 3d 3d 20 46  unctionType == F
9440: 75 6e 63 74 69 6f 6e 54 79 70 65 2e 41 67 67 72  unctionType.Aggr
9450: 65 67 61 74 65 29 20 3f 0d 0a 20 20 20 20 20 20  egate) ?..      
9460: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
9470: 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 28 66 75  FinalCallback(fu
9480: 6e 63 74 69 6f 6e 2e 46 69 6e 61 6c 43 61 6c 6c  nction.FinalCall
9490: 62 61 63 6b 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d  back) : null;...
94a0: 0a 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f  .        functio
94b0: 6e 2e 5f 43 6f 6d 70 61 72 65 46 75 6e 63 20 3d  n._CompareFunc =
94c0: 20 28 66 75 6e 63 74 69 6f 6e 54 79 70 65 20 3d   (functionType =
94d0: 3d 20 46 75 6e 63 74 69 6f 6e 54 79 70 65 2e 43  = FunctionType.C
94e0: 6f 6c 6c 61 74 69 6f 6e 29 20 3f 0d 0a 20 20 20  ollation) ?..   
94f0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
9500: 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 66 75 6e  iteCollation(fun
9510: 63 74 69 6f 6e 2e 43 6f 6d 70 61 72 65 43 61 6c  ction.CompareCal
9520: 6c 62 61 63 6b 29 20 3a 20 6e 75 6c 6c 3b 0d 0a  lback) : null;..
9530: 0d 0a 20 20 20 20 20 20 20 20 66 75 6e 63 74 69  ..        functi
9540: 6f 6e 2e 5f 43 6f 6d 70 61 72 65 46 75 6e 63 31  on._CompareFunc1
9550: 36 20 3d 20 28 66 75 6e 63 74 69 6f 6e 54 79 70  6 = (functionTyp
9560: 65 20 3d 3d 20 46 75 6e 63 74 69 6f 6e 54 79 70  e == FunctionTyp
9570: 65 2e 43 6f 6c 6c 61 74 69 6f 6e 29 20 3f 0d 0a  e.Collation) ?..
9580: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
9590: 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 28  SQLiteCollation(
95a0: 66 75 6e 63 74 69 6f 6e 2e 43 6f 6d 70 61 72 65  function.Compare
95b0: 43 61 6c 6c 62 61 63 6b 31 36 29 20 3a 20 6e 75  Callback16) : nu
95c0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  ll;....        s
95d0: 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 66 75 6e  tring name = fun
95e0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2e 4e  ctionAttribute.N
95f0: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
9600: 69 66 20 28 66 75 6e 63 74 69 6f 6e 54 79 70 65  if (functionType
9610: 20 21 3d 20 46 75 6e 63 74 69 6f 6e 54 79 70 65   != FunctionType
9620: 2e 43 6f 6c 6c 61 74 69 6f 6e 29 0d 0a 20 20 20  .Collation)..   
9630: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9640: 20 20 20 20 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c      bool needCol
9650: 6c 53 65 71 20 3d 20 28 66 75 6e 63 74 69 6f 6e  lSeq = (function
9660: 20 69 73 20 53 51 4c 69 74 65 46 75 6e 63 74 69   is SQLiteFuncti
9670: 6f 6e 45 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  onEx);....      
9680: 20 20 20 20 20 20 73 71 6c 69 74 65 42 61 73 65        sqliteBase
9690: 2e 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e 28  .CreateFunction(
96a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
96b0: 20 20 6e 61 6d 65 2c 20 66 75 6e 63 74 69 6f 6e    name, function
96c0: 41 74 74 72 69 62 75 74 65 2e 41 72 67 75 6d 65  Attribute.Argume
96d0: 6e 74 73 2c 20 6e 65 65 64 43 6f 6c 6c 53 65 71  nts, needCollSeq
96e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
96f0: 20 20 20 66 75 6e 63 74 69 6f 6e 2e 5f 49 6e 76     function._Inv
9700: 6f 6b 65 46 75 6e 63 2c 20 66 75 6e 63 74 69 6f  okeFunc, functio
9710: 6e 2e 5f 53 74 65 70 46 75 6e 63 2c 0d 0a 20 20  n._StepFunc,..  
9720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 75                fu
9730: 6e 63 74 69 6f 6e 2e 5f 46 69 6e 61 6c 46 75 6e  nction._FinalFun
9740: 63 2c 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20  c, true);..     
9750: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
9760: 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  se..        {.. 
9770: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
9780: 65 42 61 73 65 2e 43 72 65 61 74 65 43 6f 6c 6c  eBase.CreateColl
9790: 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ation(..        
97a0: 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 66 75          name, fu
97b0: 6e 63 74 69 6f 6e 2e 5f 43 6f 6d 70 61 72 65 46  nction._CompareF
97c0: 75 6e 63 2c 20 66 75 6e 63 74 69 6f 6e 2e 5f 43  unc, function._C
97d0: 6f 6d 70 61 72 65 46 75 6e 63 31 36 2c 0d 0a 20  ompareFunc16,.. 
97e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
97f0: 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rue);..        }
9800: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
9810: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
9820: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
9830: 69 6f 6e 20 75 6e 62 69 6e 64 73 20 61 20 75 73  ion unbinds a us
9840: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
9850: 69 6f 6e 73 20 66 72 6f 6d 20 61 20 63 6f 6e 6e  ions from a conn
9860: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
9870: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
9880: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
9890: 3d 22 73 71 6c 69 74 65 42 61 73 65 22 3e 0d 0a  ="sqliteBase">..
98a0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
98b0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 42 61 73   cref="SQLiteBas
98c0: 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
98d0: 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64  tance associated
98e0: 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20 2f   with the..    /
98f0: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
9900: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20  LiteConnection" 
9910: 2f 3e 20 74 68 61 74 20 74 68 65 20 66 75 6e 63  /> that the func
9920: 74 69 6f 6e 20 73 68 6f 75 6c 64 20 62 65 20 62  tion should be b
9930: 6f 75 6e 64 20 74 6f 2e 0d 0a 20 20 20 20 2f 2f  ound to...    //
9940: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
9950: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
9960: 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  "functionAttribu
9970: 74 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  te">..    /// Th
9980: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
9990: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
99a0: 62 75 74 65 22 2f 3e 20 6f 62 6a 65 63 74 20 69  bute"/> object i
99b0: 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69  nstance containi
99c0: 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20  ng..    /// the 
99d0: 6d 65 74 61 64 61 74 61 20 66 6f 72 20 74 68 65  metadata for the
99e0: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
99f0: 62 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bound...    /// 
9a00: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
9a10: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
9a20: 75 6e 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f  unction">..    /
9a30: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
9a40: 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  ="SQLiteFunction
9a50: 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  "/> object insta
9a60: 6e 63 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  nce that impleme
9a70: 6e 74 73 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  nts the..    ///
9a80: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
9a90: 62 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bound...    /// 
9aa0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
9ab0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
9ac0: 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  lags">..    /// 
9ad0: 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69  The flags associ
9ae0: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 61  ated with the pa
9af0: 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  rent connection 
9b00: 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
9b10: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
9b20: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 4e 6f 6e 2d  // <returns>Non-
9b30: 7a 65 72 6f 20 69 66 20 74 68 65 20 66 75 6e 63  zero if the func
9b40: 74 69 6f 6e 20 77 61 73 20 75 6e 62 6f 75 6e 64  tion was unbound
9b50: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
9b60: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
9b70: 20 62 6f 6f 6c 20 55 6e 62 69 6e 64 46 75 6e 63   bool UnbindFunc
9b80: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53  tion(..        S
9b90: 51 4c 69 74 65 42 61 73 65 20 73 71 6c 69 74 65  QLiteBase sqlite
9ba0: 42 61 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 53  Base,..        S
9bb0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
9bc0: 72 69 62 75 74 65 20 66 75 6e 63 74 69 6f 6e 41  ribute functionA
9bd0: 74 74 72 69 62 75 74 65 2c 0d 0a 20 20 20 20 20  ttribute,..     
9be0: 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f     SQLiteFunctio
9bf0: 6e 20 66 75 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20  n function,..   
9c00: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
9c10: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
9c20: 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d   /* NOT USED */.
9c30: 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
9c40: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73  {..        if (s
9c50: 71 6c 69 74 65 42 61 73 65 20 3d 3d 20 6e 75 6c  qliteBase == nul
9c60: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
9c70: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
9c80: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
9c90: 22 73 71 6c 69 74 65 42 61 73 65 22 29 3b 0d 0a  "sqliteBase");..
9ca0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 66 75  ..        if (fu
9cb0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20  nctionAttribute 
9cc0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
9cd0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
9ce0: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
9cf0: 70 74 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 41  ption("functionA
9d00: 74 74 72 69 62 75 74 65 22 29 3b 0d 0a 0d 0a 20  ttribute");.... 
9d10: 20 20 20 20 20 20 20 69 66 20 28 66 75 6e 63 74         if (funct
9d20: 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
9d30: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
9d40: 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
9d50: 45 78 63 65 70 74 69 6f 6e 28 22 66 75 6e 63 74  Exception("funct
9d60: 69 6f 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ion");....      
9d70: 20 20 46 75 6e 63 74 69 6f 6e 54 79 70 65 20 66    FunctionType f
9d80: 75 6e 63 74 69 6f 6e 54 79 70 65 20 3d 20 66 75  unctionType = fu
9d90: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2e  nctionAttribute.
9da0: 46 75 6e 63 54 79 70 65 3b 0d 0a 20 20 20 20 20  FuncType;..     
9db0: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d     string name =
9dc0: 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75   functionAttribu
9dd0: 74 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  te.Name;....    
9de0: 20 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e      if (function
9df0: 54 79 70 65 20 21 3d 20 46 75 6e 63 74 69 6f 6e  Type != Function
9e00: 54 79 70 65 2e 43 6f 6c 6c 61 74 69 6f 6e 29 0d  Type.Collation).
9e10: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9e20: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 65 65          bool nee
9e30: 64 43 6f 6c 6c 53 65 71 20 3d 20 28 66 75 6e 63  dCollSeq = (func
9e40: 74 69 6f 6e 20 69 73 20 53 51 4c 69 74 65 46 75  tion is SQLiteFu
9e50: 6e 63 74 69 6f 6e 45 78 29 3b 0d 0a 0d 0a 20 20  nctionEx);....  
9e60: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9e70: 20 73 71 6c 69 74 65 42 61 73 65 2e 43 72 65 61   sqliteBase.Crea
9e80: 74 65 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  teFunction(..   
9e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d               nam
9ea0: 65 2c 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  e, functionAttri
9eb0: 62 75 74 65 2e 41 72 67 75 6d 65 6e 74 73 2c 20  bute.Arguments, 
9ec0: 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 0d 0a 20 20  needCollSeq,..  
9ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75                nu
9ee0: 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20  ll, null, null, 
9ef0: 66 61 6c 73 65 29 20 3d 3d 20 53 51 4c 69 74 65  false) == SQLite
9f00: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20  ErrorCode.Ok;.. 
9f10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9f20: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
9f30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
9f40: 65 74 75 72 6e 20 73 71 6c 69 74 65 42 61 73 65  eturn sqliteBase
9f50: 2e 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e  .CreateCollation
9f60: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9f70: 20 20 20 6e 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6e     name, null, n
9f80: 75 6c 6c 2c 20 66 61 6c 73 65 29 20 3d 3d 20 53  ull, false) == S
9f90: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
9fa0: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  k;..        }.. 
9fb0: 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f     }..  }....  /
9fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a010: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
a020: 0a 20 20 2f 2f 2f 20 54 68 69 73 20 3c 73 65 65  .  /// This <see
a030: 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22   cref="Delegate"
a040: 20 2f 3e 20 74 79 70 65 20 69 73 20 75 73 65 64   /> type is used
a050: 20 77 69 74 68 20 74 68 65 0d 0a 20 20 2f 2f 2f   with the..  ///
a060: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
a070: 74 65 44 65 6c 65 67 61 74 65 46 75 6e 63 74 69  teDelegateFuncti
a080: 6f 6e 2e 49 6e 76 6f 6b 65 22 20 2f 3e 20 6d 65  on.Invoke" /> me
a090: 74 68 6f 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73  thod...  /// </s
a0a0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c  ummary>..  /// <
a0b0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61  param name="para
a0c0: 6d 30 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  m0">..  /// This
a0d0: 20 69 73 20 61 6c 77 61 79 73 20 74 68 65 20 73   is always the s
a0e0: 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 22 49  tring literal "I
a0f0: 6e 76 6f 6b 65 22 2e 0d 0a 20 20 2f 2f 2f 20 3c  nvoke"...  /// <
a100: 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c  /param>..  /// <
a110: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 73  param name="args
a120: 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 61 72  ">..  /// The ar
a130: 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68 65 20  guments for the 
a140: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 2e  scalar function.
a150: 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e  ..  /// </param>
a160: 0d 0a 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73  ..  /// <returns
a170: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 72 65 73  >..  /// The res
a180: 75 6c 74 20 6f 66 20 74 68 65 20 73 63 61 6c 61  ult of the scala
a190: 72 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 2f  r function...  /
a1a0: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
a1b0: 20 70 75 62 6c 69 63 20 64 65 6c 65 67 61 74 65   public delegate
a1c0: 20 6f 62 6a 65 63 74 20 53 51 4c 69 74 65 49 6e   object SQLiteIn
a1d0: 76 6f 6b 65 44 65 6c 65 67 61 74 65 28 0d 0a 20  vokeDelegate(.. 
a1e0: 20 20 20 73 74 72 69 6e 67 20 70 61 72 61 6d 30     string param0
a1f0: 2c 0d 0a 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20  ,..    object[] 
a200: 61 72 67 73 0d 0a 20 20 29 3b 0d 0a 0d 0a 20 20  args..  );....  
a210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a260: 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e  .  /// <summary>
a270: 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 3c 73 65  ..  /// This <se
a280: 65 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65  e cref="Delegate
a290: 22 20 2f 3e 20 74 79 70 65 20 69 73 20 75 73 65  " /> type is use
a2a0: 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20 2f 2f  d with the..  //
a2b0: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
a2c0: 69 74 65 44 65 6c 65 67 61 74 65 46 75 6e 63 74  iteDelegateFunct
a2d0: 69 6f 6e 2e 53 74 65 70 22 20 2f 3e 20 6d 65 74  ion.Step" /> met
a2e0: 68 6f 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75  hod...  /// </su
a2f0: 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 70  mmary>..  /// <p
a300: 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d  aram name="param
a310: 30 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20  0">..  /// This 
a320: 69 73 20 61 6c 77 61 79 73 20 74 68 65 20 73 74  is always the st
a330: 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 22 53 74  ring literal "St
a340: 65 70 22 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61  ep"...  /// </pa
a350: 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72  ram>..  /// <par
a360: 61 6d 20 6e 61 6d 65 3d 22 61 72 67 73 22 3e 0d  am name="args">.
a370: 0a 20 20 2f 2f 2f 20 54 68 65 20 61 72 67 75 6d  .  /// The argum
a380: 65 6e 74 73 20 66 6f 72 20 74 68 65 20 61 67 67  ents for the agg
a390: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e  regate function.
a3a0: 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e  ..  /// </param>
a3b0: 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e  ..  /// <param n
a3c0: 61 6d 65 3d 22 73 74 65 70 4e 75 6d 62 65 72 22  ame="stepNumber"
a3d0: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 73 74 65  >..  /// The ste
a3e0: 70 20 6e 75 6d 62 65 72 20 28 6f 6e 65 20 62 61  p number (one ba
a3f0: 73 65 64 29 2e 20 20 54 68 69 73 20 69 73 20 69  sed).  This is i
a400: 6e 63 72 65 6d 65 6d 74 65 64 20 65 61 63 68 20  ncrememted each 
a410: 74 69 6d 65 20 74 68 65 0d 0a 20 20 2f 2f 2f 20  time the..  /// 
a420: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
a430: 65 44 65 6c 65 67 61 74 65 46 75 6e 63 74 69 6f  eDelegateFunctio
a440: 6e 2e 53 74 65 70 22 20 2f 3e 20 6d 65 74 68 6f  n.Step" /> metho
a450: 64 20 69 73 20 63 61 6c 6c 65 64 2e 0d 0a 20 20  d is called...  
a460: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
a470: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
a480: 22 63 6f 6e 74 65 78 74 44 61 74 61 22 3e 0d 0a  "contextData">..
a490: 20 20 2f 2f 2f 20 41 20 70 6c 61 63 65 68 6f 6c    /// A placehol
a4a0: 64 65 72 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e  der for implemen
a4b0: 74 65 72 73 20 74 6f 20 73 74 6f 72 65 20 63 6f  ters to store co
a4c0: 6e 74 65 78 74 75 61 6c 20 64 61 74 61 20 70 65  ntextual data pe
a4d0: 72 74 61 69 6e 69 6e 67 0d 0a 20 20 2f 2f 2f 20  rtaining..  /// 
a4e0: 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 63  to the current c
a4f0: 6f 6e 74 65 78 74 2e 0d 0a 20 20 2f 2f 2f 20 3c  ontext...  /// <
a500: 2f 70 61 72 61 6d 3e 0d 0a 20 20 70 75 62 6c 69  /param>..  publi
a510: 63 20 64 65 6c 65 67 61 74 65 20 76 6f 69 64 20  c delegate void 
a520: 53 51 4c 69 74 65 53 74 65 70 44 65 6c 65 67 61  SQLiteStepDelega
a530: 74 65 28 0d 0a 20 20 20 20 73 74 72 69 6e 67 20  te(..    string 
a540: 70 61 72 61 6d 30 2c 0d 0a 20 20 20 20 6f 62 6a  param0,..    obj
a550: 65 63 74 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20  ect[] args,..   
a560: 20 69 6e 74 20 73 74 65 70 4e 75 6d 62 65 72 2c   int stepNumber,
a570: 0d 0a 20 20 20 20 72 65 66 20 6f 62 6a 65 63 74  ..    ref object
a580: 20 63 6f 6e 74 65 78 74 44 61 74 61 0d 0a 20 20   contextData..  
a590: 29 3b 0d 0a 0d 0a 20 20 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 2f 2f  ////////////////
a5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5e0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c  /////....  /// <
a5f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20  summary>..  /// 
a600: 54 68 69 73 20 3c 73 65 65 20 63 72 65 66 3d 22  This <see cref="
a610: 44 65 6c 65 67 61 74 65 22 20 2f 3e 20 74 79 70  Delegate" /> typ
a620: 65 20 69 73 20 75 73 65 64 20 77 69 74 68 20 74  e is used with t
a630: 68 65 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65 20 63  he..  /// <see c
a640: 72 65 66 3d 22 53 51 4c 69 74 65 44 65 6c 65 67  ref="SQLiteDeleg
a650: 61 74 65 46 75 6e 63 74 69 6f 6e 2e 46 69 6e 61  ateFunction.Fina
a660: 6c 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  l" /> method... 
a670: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
a680: 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61  .  /// <param na
a690: 6d 65 3d 22 70 61 72 61 6d 30 22 3e 0d 0a 20 20  me="param0">..  
a6a0: 2f 2f 2f 20 54 68 69 73 20 69 73 20 61 6c 77 61  /// This is alwa
a6b0: 79 73 20 74 68 65 20 73 74 72 69 6e 67 20 6c 69  ys the string li
a6c0: 74 65 72 61 6c 20 22 46 69 6e 61 6c 22 2e 0d 0a  teral "Final"...
a6d0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
a6e0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
a6f0: 65 3d 22 63 6f 6e 74 65 78 74 44 61 74 61 22 3e  e="contextData">
a700: 0d 0a 20 20 2f 2f 2f 20 41 20 70 6c 61 63 65 68  ..  /// A placeh
a710: 6f 6c 64 65 72 20 66 6f 72 20 69 6d 70 6c 65 6d  older for implem
a720: 65 6e 74 65 72 73 20 74 6f 20 73 74 6f 72 65 20  enters to store 
a730: 63 6f 6e 74 65 78 74 75 61 6c 20 64 61 74 61 20  contextual data 
a740: 70 65 72 74 61 69 6e 69 6e 67 0d 0a 20 20 2f 2f  pertaining..  //
a750: 2f 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  / to the current
a760: 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 2f 2f 2f   context...  ///
a770: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f   </param>..  ///
a780: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 2f 2f   <returns>..  //
a790: 2f 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20  / The result of 
a7a0: 74 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  the aggregate fu
a7b0: 6e 63 74 69 6f 6e 2e 0d 0a 20 20 2f 2f 2f 20 3c  nction...  /// <
a7c0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 70 75 62  /returns>..  pub
a7d0: 6c 69 63 20 64 65 6c 65 67 61 74 65 20 6f 62 6a  lic delegate obj
a7e0: 65 63 74 20 53 51 4c 69 74 65 46 69 6e 61 6c 44  ect SQLiteFinalD
a7f0: 65 6c 65 67 61 74 65 28 0d 0a 20 20 20 20 73 74  elegate(..    st
a800: 72 69 6e 67 20 70 61 72 61 6d 30 2c 0d 0a 20 20  ring param0,..  
a810: 20 20 6f 62 6a 65 63 74 20 63 6f 6e 74 65 78 74    object context
a820: 44 61 74 61 0d 0a 20 20 29 3b 0d 0a 0d 0a 20 20  Data..  );....  
a830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a880: 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e  .  /// <summary>
a890: 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 3c 73 65  ..  /// This <se
a8a0: 65 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65  e cref="Delegate
a8b0: 22 20 2f 3e 20 74 79 70 65 20 69 73 20 75 73 65  " /> type is use
a8c0: 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20 2f 2f  d with the..  //
a8d0: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
a8e0: 69 74 65 44 65 6c 65 67 61 74 65 46 75 6e 63 74  iteDelegateFunct
a8f0: 69 6f 6e 2e 43 6f 6d 70 61 72 65 22 20 2f 3e 20  ion.Compare" /> 
a900: 6d 65 74 68 6f 64 2e 0d 0a 20 20 2f 2f 2f 20 3c  method...  /// <
a910: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f  /summary>..  ///
a920: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61   <param name="pa
a930: 72 61 6d 30 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68  ram0">..  /// Th
a940: 69 73 20 69 73 20 61 6c 77 61 79 73 20 74 68 65  is is always the
a950: 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20   string literal 
a960: 22 43 6f 6d 70 61 72 65 22 2e 0d 0a 20 20 2f 2f  "Compare"...  //
a970: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f  / </param>..  //
a980: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
a990: 61 72 61 6d 31 22 3e 0d 0a 20 20 2f 2f 2f 20 54  aram1">..  /// T
a9a0: 68 65 20 66 69 72 73 74 20 73 74 72 69 6e 67 20  he first string 
a9b0: 74 6f 20 63 6f 6d 70 61 72 65 2e 0d 0a 20 20 2f  to compare...  /
a9c0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f  // </param>..  /
a9d0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
a9e0: 70 61 72 61 6d 32 22 3e 0d 0a 20 20 2f 2f 2f 20  param2">..  /// 
a9f0: 54 68 65 20 73 65 63 6f 6e 64 20 73 74 72 6e 69  The second strni
aa00: 67 20 74 6f 20 63 6f 6d 70 61 72 65 2e 0d 0a 20  g to compare... 
aa10: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
aa20: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
aa30: 20 20 2f 2f 2f 20 41 20 70 6f 73 69 74 69 76 65    /// A positive
aa40: 20 69 6e 74 65 67 65 72 20 69 66 20 74 68 65 20   integer if the 
aa50: 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22  <paramref name="
aa60: 70 61 72 61 6d 31 22 20 2f 3e 20 70 61 72 61 6d  param1" /> param
aa70: 65 74 65 72 20 69 73 0d 0a 20 20 2f 2f 2f 20 67  eter is..  /// g
aa80: 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
aa90: 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22  <paramref name="
aaa0: 70 61 72 61 6d 32 22 20 2f 3e 20 70 61 72 61 6d  param2" /> param
aab0: 65 74 65 72 2c 20 61 20 6e 65 67 61 74 69 76 65  eter, a negative
aac0: 0d 0a 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20  ..  /// integer 
aad0: 69 66 20 74 68 65 20 3c 70 61 72 61 6d 72 65 66  if the <paramref
aae0: 20 6e 61 6d 65 3d 22 70 61 72 61 6d 31 22 20 2f   name="param1" /
aaf0: 3e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6c  > parameter is l
ab00: 65 73 73 20 74 68 61 6e 0d 0a 20 20 2f 2f 2f 20  ess than..  /// 
ab10: 74 68 65 20 3c 70 61 72 61 6d 72 65 66 20 6e 61  the <paramref na
ab20: 6d 65 3d 22 70 61 72 61 6d 32 22 20 2f 3e 20 70  me="param2" /> p
ab30: 61 72 61 6d 65 74 65 72 2c 20 6f 72 20 7a 65 72  arameter, or zer
ab40: 6f 20 69 66 20 74 68 65 79 20 61 72 65 0d 0a 20  o if they are.. 
ab50: 20 2f 2f 2f 20 65 71 75 61 6c 2e 0d 0a 20 20 2f   /// equal...  /
ab60: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
ab70: 20 70 75 62 6c 69 63 20 64 65 6c 65 67 61 74 65   public delegate
ab80: 20 69 6e 74 20 53 51 4c 69 74 65 43 6f 6d 70 61   int SQLiteCompa
ab90: 72 65 44 65 6c 65 67 61 74 65 28 0d 0a 20 20 20  reDelegate(..   
aba0: 20 73 74 72 69 6e 67 20 70 61 72 61 6d 30 2c 0d   string param0,.
abb0: 0a 20 20 20 20 73 74 72 69 6e 67 20 70 61 72 61  .    string para
abc0: 6d 31 2c 0d 0a 20 20 20 20 73 74 72 69 6e 67 20  m1,..    string 
abd0: 70 61 72 61 6d 32 0d 0a 20 20 29 3b 0d 0a 0d 0a  param2..  );....
abe0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
abf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ac30: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
ac40: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
ac50: 4b 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  K..  /// <summar
ac60: 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 63  y>..  /// This c
ac70: 6c 61 73 73 20 69 6d 70 6c 65 6d 65 6e 74 73 20  lass implements 
ac80: 61 20 53 51 4c 69 74 65 20 66 75 6e 63 74 69 6f  a SQLite functio
ac90: 6e 20 75 73 69 6e 67 20 61 20 3c 73 65 65 20 63  n using a <see c
aca0: 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f  ref="Delegate" /
acb0: 3e 2e 0d 0a 20 20 2f 2f 2f 20 41 6c 6c 20 74 68  >...  /// All th
acc0: 65 20 76 69 72 74 75 61 6c 20 6d 65 74 68 6f 64  e virtual method
acd0: 73 20 6f 66 20 74 68 65 20 3c 73 65 65 20 63 72  s of the <see cr
ace0: 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69  ef="SQLiteFuncti
acf0: 6f 6e 22 20 2f 3e 20 63 6c 61 73 73 20 61 72 65  on" /> class are
ad00: 0d 0a 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e  ..  /// implemen
ad10: 74 65 64 20 75 73 69 6e 67 20 63 61 6c 6c 73 20  ted using calls 
ad20: 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  to the <see cref
ad30: 3d 22 53 51 4c 69 74 65 49 6e 76 6f 6b 65 44 65  ="SQLiteInvokeDe
ad40: 6c 65 67 61 74 65 22 20 2f 3e 2c 0d 0a 20 20 2f  legate" />,..  /
ad50: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
ad60: 4c 69 74 65 53 74 65 70 44 65 6c 65 67 61 74 65  LiteStepDelegate
ad70: 22 20 2f 3e 2c 20 3c 73 65 65 20 63 72 65 66 3d  " />, <see cref=
ad80: 22 53 51 4c 69 74 65 46 69 6e 61 6c 44 65 6c 65  "SQLiteFinalDele
ad90: 67 61 74 65 22 20 2f 3e 2c 0d 0a 20 20 2f 2f 2f  gate" />,..  ///
ada0: 20 61 6e 64 20 3c 73 65 65 20 63 72 65 66 3d 22   and <see cref="
adb0: 53 51 4c 69 74 65 43 6f 6d 70 61 72 65 44 65 6c  SQLiteCompareDel
adc0: 65 67 61 74 65 22 20 2f 3e 20 73 74 72 6f 6e 67  egate" /> strong
add0: 6c 79 20 74 79 70 65 64 20 64 65 6c 65 67 61 74  ly typed delegat
ade0: 65 20 74 79 70 65 73 0d 0a 20 20 2f 2f 2f 20 6f  e types..  /// o
adf0: 72 20 76 69 61 20 74 68 65 20 3c 73 65 65 20 63  r via the <see c
ae00: 72 65 66 3d 22 44 65 6c 65 67 61 74 65 2e 44 79  ref="Delegate.Dy
ae10: 6e 61 6d 69 63 49 6e 76 6f 6b 65 22 20 2f 3e 20  namicInvoke" /> 
ae20: 6d 65 74 68 6f 64 2e 0d 0a 20 20 2f 2f 2f 20 54  method...  /// T
ae30: 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  he arguments are
ae40: 20 70 72 65 73 65 6e 74 65 64 20 69 6e 20 74 68   presented in th
ae50: 65 20 73 61 6d 65 20 6f 72 64 65 72 20 74 68 65  e same order the
ae60: 79 20 61 70 70 65 61 72 20 69 6e 0d 0a 20 20 2f  y appear in..  /
ae70: 2f 2f 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  // the associate
ae80: 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  d <see cref="SQL
ae90: 69 74 65 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20  iteFunction" /> 
aea0: 6d 65 74 68 6f 64 73 20 77 69 74 68 20 6f 6e 65  methods with one
aeb0: 20 65 78 63 65 70 74 69 6f 6e 3a 0d 0a 20 20 2f   exception:..  /
aec0: 2f 2f 20 74 68 65 20 66 69 72 73 74 20 61 72 67  // the first arg
aed0: 75 6d 65 6e 74 20 69 73 20 74 68 65 20 6e 61 6d  ument is the nam
aee0: 65 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  e of the virtual
aef0: 20 6d 65 74 68 6f 64 20 62 65 69 6e 67 20 69 6d   method being im
af00: 70 6c 65 6d 65 6e 74 65 64 2e 0d 0a 20 20 2f 2f  plemented...  //
af10: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 23 65  / </summary>..#e
af20: 6c 73 65 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  lse..  /// <summ
af30: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  ary>..  /// This
af40: 20 63 6c 61 73 73 20 69 6d 70 6c 65 6d 65 6e 74   class implement
af50: 73 20 61 20 53 51 4c 69 74 65 20 66 75 6e 63 74  s a SQLite funct
af60: 69 6f 6e 20 75 73 69 6e 67 20 61 20 3c 73 65 65  ion using a <see
af70: 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22   cref="Delegate"
af80: 20 2f 3e 2e 0d 0a 20 20 2f 2f 2f 20 41 6c 6c 20   />...  /// All 
af90: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 65 74 68  the virtual meth
afa0: 6f 64 73 20 6f 66 20 74 68 65 20 3c 73 65 65 20  ods of the <see 
afb0: 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63  cref="SQLiteFunc
afc0: 74 69 6f 6e 22 20 2f 3e 20 63 6c 61 73 73 20 61  tion" /> class a
afd0: 72 65 0d 0a 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d  re..  /// implem
afe0: 65 6e 74 65 64 20 75 73 69 6e 67 20 63 61 6c 6c  ented using call
aff0: 73 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72  s to the <see cr
b000: 65 66 3d 22 53 51 4c 69 74 65 49 6e 76 6f 6b 65  ef="SQLiteInvoke
b010: 44 65 6c 65 67 61 74 65 22 20 2f 3e 2c 0d 0a 20  Delegate" />,.. 
b020: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
b030: 53 51 4c 69 74 65 53 74 65 70 44 65 6c 65 67 61  SQLiteStepDelega
b040: 74 65 22 20 2f 3e 2c 20 3c 73 65 65 20 63 72 65  te" />, <see cre
b050: 66 3d 22 53 51 4c 69 74 65 46 69 6e 61 6c 44 65  f="SQLiteFinalDe
b060: 6c 65 67 61 74 65 22 20 2f 3e 2c 0d 0a 20 20 2f  legate" />,..  /
b070: 2f 2f 20 61 6e 64 20 3c 73 65 65 20 63 72 65 66  // and <see cref
b080: 3d 22 53 51 4c 69 74 65 43 6f 6d 70 61 72 65 44  ="SQLiteCompareD
b090: 65 6c 65 67 61 74 65 22 20 2f 3e 20 73 74 72 6f  elegate" /> stro
b0a0: 6e 67 6c 79 20 74 79 70 65 64 20 64 65 6c 65 67  ngly typed deleg
b0b0: 61 74 65 20 74 79 70 65 73 2e 0d 0a 20 20 2f 2f  ate types...  //
b0c0: 2f 20 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20  / The arguments 
b0d0: 61 72 65 20 70 72 65 73 65 6e 74 65 64 20 69 6e  are presented in
b0e0: 20 74 68 65 20 73 61 6d 65 20 6f 72 64 65 72 20   the same order 
b0f0: 74 68 65 79 20 61 70 70 65 61 72 20 69 6e 0d 0a  they appear in..
b100: 20 20 2f 2f 2f 20 74 68 65 20 61 73 73 6f 63 69    /// the associ
b110: 61 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22  ated <see cref="
b120: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22 20  SQLiteFunction" 
b130: 2f 3e 20 6d 65 74 68 6f 64 73 20 77 69 74 68 20  /> methods with 
b140: 6f 6e 65 20 65 78 63 65 70 74 69 6f 6e 3a 0d 0a  one exception:..
b150: 20 20 2f 2f 2f 20 74 68 65 20 66 69 72 73 74 20    /// the first 
b160: 61 72 67 75 6d 65 6e 74 20 69 73 20 74 68 65 20  argument is the 
b170: 6e 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74  name of the virt
b180: 75 61 6c 20 6d 65 74 68 6f 64 20 62 65 69 6e 67  ual method being
b190: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 2e 0d 0a 20   implemented... 
b1a0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
b1b0: 0a 23 65 6e 64 69 66 0d 0a 20 20 70 75 62 6c 69  .#endif..  publi
b1c0: 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65 44 65  c class SQLiteDe
b1d0: 6c 65 67 61 74 65 46 75 6e 63 74 69 6f 6e 20 3a  legateFunction :
b1e0: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 0d   SQLiteFunction.
b1f0: 0a 20 20 7b 0d 0a 20 20 20 20 20 20 23 72 65 67  .  {..      #reg
b200: 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
b210: 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 2f 2f 2f  tants..      ///
b220: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
b230: 20 20 2f 2f 2f 20 54 68 69 73 20 65 72 72 6f 72    /// This error
b240: 20 6d 65 73 73 61 67 65 20 69 73 20 75 73 65 64   message is used
b250: 20 62 79 20 74 68 65 20 6f 76 65 72 72 69 64 64   by the overridd
b260: 65 6e 20 76 69 72 74 75 61 6c 20 6d 65 74 68 6f  en virtual metho
b270: 64 73 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 2f  ds when..      /
b280: 2f 2f 20 61 20 72 65 71 75 69 72 65 64 20 3c 73  // a required <s
b290: 65 65 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74  ee cref="Delegat
b2a0: 65 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 20 28  e" /> property (
b2b0: 65 2e 67 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  e.g...      /// 
b2c0: 3c 73 65 65 20 63 72 65 66 3d 22 43 61 6c 6c 62  <see cref="Callb
b2d0: 61 63 6b 31 22 20 2f 3e 20 6f 72 20 3c 73 65 65  ack1" /> or <see
b2e0: 20 63 72 65 66 3d 22 43 61 6c 6c 62 61 63 6b 32   cref="Callback2
b2f0: 22 20 2f 3e 29 20 68 61 73 20 6e 6f 74 20 62 65  " />) has not be
b300: 65 6e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 73 65  en..      /// se
b310: 74 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  t...      /// </
b320: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
b330: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
b340: 72 69 6e 67 20 4e 6f 43 61 6c 6c 62 61 63 6b 45  ring NoCallbackE
b350: 72 72 6f 72 20 3d 20 22 4e 6f 20 5c 22 7b 30 7d  rror = "No \"{0}
b360: 5c 22 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 73  \" callback is s
b370: 65 74 2e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  et.";....      /
b380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3c0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
b3d0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
b3e0: 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  .      /// This 
b3f0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73  error message is
b400: 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 76 65   used by the ove
b410: 72 72 69 64 64 65 6e 20 3c 73 65 65 20 63 72 65  rridden <see cre
b420: 66 3d 22 43 6f 6d 70 61 72 65 22 20 2f 3e 0d 0a  f="Compare" />..
b430: 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64        /// method
b440: 20 77 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   when the result
b450: 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61   does not have a
b460: 20 74 79 70 65 20 6f 66 20 3c 73 65 65 20 63 72   type of <see cr
b470: 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e 2e 0d 0a  ef="Int32" />...
b480: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
b490: 61 72 79 3e 0d 0a 20 20 20 20 20 20 70 72 69 76  ary>..      priv
b4a0: 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
b4b0: 20 52 65 73 75 6c 74 49 6e 74 33 32 45 72 72 6f   ResultInt32Erro
b4c0: 72 20 3d 20 22 5c 22 7b 30 7d 5c 22 20 72 65 73  r = "\"{0}\" res
b4d0: 75 6c 74 20 6d 75 73 74 20 62 65 20 49 6e 74 33  ult must be Int3
b4e0: 32 2e 22 3b 0d 0a 20 20 20 20 20 20 23 65 6e 64  2.";..      #end
b4f0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
b500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b550: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
b560: 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
b570: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
b580: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 43  ry>..      /// C
b590: 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 65 6d 70  onstructs an emp
b5a0: 74 79 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ty instance of t
b5b0: 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20  his class...    
b5c0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
b5d0: 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 53  ..      public S
b5e0: 51 4c 69 74 65 44 65 6c 65 67 61 74 65 46 75 6e  QLiteDelegateFun
b5f0: 63 74 69 6f 6e 28 29 0d 0a 20 20 20 20 20 20 20  ction()..       
b600: 20 20 20 3a 20 74 68 69 73 28 6e 75 6c 6c 2c 20     : this(null, 
b610: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  null)..      {..
b620: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
b630: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
b640: 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f  }....      /////
b650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b690: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  ////....      //
b6a0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
b6b0: 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74     /// Construct
b6c0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
b6d0: 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e   this class usin
b6e0: 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0d  g the specified.
b6f0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20  .      /// <see 
b700: 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20  cref="Delegate" 
b710: 2f 3e 20 61 73 20 74 68 65 20 3c 73 65 65 20 63  /> as the <see c
b720: 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74  ref="SQLiteFunct
b730: 69 6f 6e 22 20 2f 3e 0d 0a 20 20 20 20 20 20 2f  ion" />..      /
b740: 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  // implementatio
b750: 6e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  n...      /// </
b760: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
b770: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
b780: 22 63 61 6c 6c 62 61 63 6b 31 22 3e 0d 0a 20 20  "callback1">..  
b790: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
b7a0: 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22   cref="Delegate"
b7b0: 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64 20 66   /> to be used f
b7c0: 6f 72 20 61 6c 6c 20 63 61 6c 6c 73 20 69 6e 74  or all calls int
b7d0: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f  o the..      ///
b7e0: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 76 6f   <see cref="Invo
b7f0: 6b 65 22 20 2f 3e 2c 20 3c 73 65 65 20 63 72 65  ke" />, <see cre
b800: 66 3d 22 53 74 65 70 22 20 2f 3e 2c 20 61 6e 64  f="Step" />, and
b810: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65  ..      /// <see
b820: 20 63 72 65 66 3d 22 43 6f 6d 70 61 72 65 22 20   cref="Compare" 
b830: 2f 3e 20 76 69 72 74 75 61 6c 20 6d 65 74 68 6f  /> virtual metho
b840: 64 73 20 6e 65 65 64 65 64 20 62 79 20 74 68 65  ds needed by the
b850: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65  ..      /// <see
b860: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e   cref="SQLiteFun
b870: 63 74 69 6f 6e 22 20 2f 3e 20 62 61 73 65 20 63  ction" /> base c
b880: 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  lass...      ///
b890: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
b8a0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
b8b0: 3d 22 63 61 6c 6c 62 61 63 6b 32 22 3e 0d 0a 20  ="callback2">.. 
b8c0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
b8d0: 65 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65  e cref="Delegate
b8e0: 22 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64 20  " /> to be used 
b8f0: 66 6f 72 20 61 6c 6c 20 63 61 6c 6c 73 20 69 6e  for all calls in
b900: 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f  to the..      //
b910: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 46 69 6e  / <see cref="Fin
b920: 61 6c 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 6d  al" /> virtual m
b930: 65 74 68 6f 64 73 20 6e 65 65 64 65 64 20 62 79  ethods needed by
b940: 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20   the..      /// 
b950: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
b960: 65 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 62 61  eFunction" /> ba
b970: 73 65 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20  se class...     
b980: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
b990: 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
b9a0: 74 65 44 65 6c 65 67 61 74 65 46 75 6e 63 74 69  teDelegateFuncti
b9b0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 44  on(..          D
b9c0: 65 6c 65 67 61 74 65 20 63 61 6c 6c 62 61 63 6b  elegate callback
b9d0: 31 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 44 65  1,..          De
b9e0: 6c 65 67 61 74 65 20 63 61 6c 6c 62 61 63 6b 32  legate callback2
b9f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20  ..          ).. 
ba00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ba10: 20 20 74 68 69 73 2e 63 61 6c 6c 62 61 63 6b 31    this.callback1
ba20: 20 3d 20 63 61 6c 6c 62 61 63 6b 31 3b 0d 0a 20   = callback1;.. 
ba30: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 61           this.ca
ba40: 6c 6c 62 61 63 6b 32 20 3d 20 63 61 6c 6c 62 61  llback2 = callba
ba50: 63 6b 32 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ck2;..      }.. 
ba60: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
ba70: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  ...      ///////
ba80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
baa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bac0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 23 72 65 67  //....      #reg
bad0: 69 6f 6e 20 50 72 6f 74 65 63 74 65 64 20 4d 65  ion Protected Me
bae0: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 2f 2f 2f  thods..      ///
baf0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
bb00: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
bb10: 65 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65  e list of argume
bb20: 6e 74 73 20 66 6f 72 20 74 68 65 20 3c 73 65 65  nts for the <see
bb30: 20 63 72 65 66 3d 22 49 6e 76 6f 6b 65 22 20 2f   cref="Invoke" /
bb40: 3e 20 6d 65 74 68 6f 64 2c 0d 0a 20 20 20 20 20  > method,..     
bb50: 20 2f 2f 2f 20 61 73 20 61 6e 20 3c 73 65 65 20   /// as an <see 
bb60: 63 72 65 66 3d 22 41 72 72 61 79 22 20 2f 3e 20  cref="Array" /> 
bb70: 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 4f 62  of <see cref="Ob
bb80: 6a 65 63 74 22 20 2f 3e 2e 20 20 54 68 65 20 66  ject" />.  The f
bb90: 69 72 73 74 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  irst..      /// 
bba0: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 6c 77 61  argument is alwa
bbb0: 79 73 20 74 68 65 20 6c 69 74 65 72 61 6c 20 73  ys the literal s
bbc0: 74 72 69 6e 67 20 22 49 6e 76 6f 6b 65 22 2e 0d  tring "Invoke"..
bbd0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
bbe0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
bbf0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
bc00: 67 73 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  gs">..      /// 
bc10: 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 61 72 67  The original arg
bc20: 75 6d 65 6e 74 73 20 72 65 63 65 69 76 65 64 20  uments received 
bc30: 62 79 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  by the <see cref
bc40: 3d 22 49 6e 76 6f 6b 65 22 20 2f 3e 20 6d 65 74  ="Invoke" /> met
bc50: 68 6f 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  hod...      /// 
bc60: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
bc70: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
bc80: 22 65 61 72 6c 79 42 6f 75 6e 64 22 3e 0d 0a 20  "earlyBound">.. 
bc90: 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72       /// Non-zer
bca0: 6f 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65  o if the returne
bcb0: 64 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  d arguments are 
bcc0: 67 6f 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64  going to be used
bcd0: 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20   with the..     
bce0: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
bcf0: 53 51 4c 69 74 65 49 6e 76 6f 6b 65 44 65 6c 65  SQLiteInvokeDele
bd00: 67 61 74 65 22 20 2f 3e 20 74 79 70 65 3b 20 6f  gate" /> type; o
bd10: 74 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d  therwise, zero..
bd20: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  .      /// </par
bd30: 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  am>..      /// <
bd40: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
bd50: 2f 2f 2f 20 54 68 65 20 61 72 67 75 6d 65 6e 74  /// The argument
bd60: 73 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65  s to pass to the
bd70: 20 63 6f 6e 66 69 67 75 72 65 64 20 3c 73 65 65   configured <see
bd80: 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22   cref="Delegate"
bd90: 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20   />...      /// 
bda0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
bdb0: 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74    protected virt
bdc0: 75 61 6c 20 6f 62 6a 65 63 74 5b 5d 20 47 65 74  ual object[] Get
bdd0: 49 6e 76 6f 6b 65 41 72 67 73 28 0d 0a 20 20 20  InvokeArgs(..   
bde0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20         object[] 
bdf0: 61 72 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  args,..         
be00: 20 62 6f 6f 6c 20 65 61 72 6c 79 42 6f 75 6e 64   bool earlyBound
be10: 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20  ..          ).. 
be20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
be30: 20 20 6f 62 6a 65 63 74 5b 5d 20 6e 65 77 41 72    object[] newAr
be40: 67 73 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74 5b  gs = new object[
be50: 5d 20 7b 20 22 49 6e 76 6f 6b 65 22 2c 20 61 72  ] { "Invoke", ar
be60: 67 73 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  gs };....       
be70: 20 20 20 69 66 20 28 21 65 61 72 6c 79 42 6f 75     if (!earlyBou
be80: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nd)..           
be90: 20 20 20 6e 65 77 41 72 67 73 20 3d 20 6e 65 77     newArgs = new
bea0: 20 6f 62 6a 65 63 74 5b 5d 20 7b 20 6e 65 77 41   object[] { newA
beb0: 72 67 73 20 7d 3b 20 2f 2f 20 57 52 41 50 0d 0a  rgs }; // WRAP..
bec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
bed0: 72 6e 20 6e 65 77 41 72 67 73 3b 0d 0a 20 20 20  rn newArgs;..   
bee0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f     }....      //
bef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf30: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
bf40: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
bf50: 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e        /// Return
bf60: 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61 72  s the list of ar
bf70: 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68 65 20  guments for the 
bf80: 3c 73 65 65 20 63 72 65 66 3d 22 53 74 65 70 22  <see cref="Step"
bf90: 20 2f 3e 20 6d 65 74 68 6f 64 2c 0d 0a 20 20 20   /> method,..   
bfa0: 20 20 20 2f 2f 2f 20 61 73 20 61 6e 20 3c 73 65     /// as an <se
bfb0: 65 20 63 72 65 66 3d 22 41 72 72 61 79 22 20 2f  e cref="Array" /
bfc0: 3e 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22  > of <see cref="
bfd0: 4f 62 6a 65 63 74 22 20 2f 3e 2e 20 20 54 68 65  Object" />.  The
bfe0: 20 66 69 72 73 74 0d 0a 20 20 20 20 20 20 2f 2f   first..      //
bff0: 2f 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 6c  / argument is al
c000: 77 61 79 73 20 74 68 65 20 6c 69 74 65 72 61 6c  ways the literal
c010: 20 73 74 72 69 6e 67 20 22 53 74 65 70 22 2e 0d   string "Step"..
c020: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
c030: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
c040: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
c050: 67 73 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  gs">..      /// 
c060: 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 61 72 67  The original arg
c070: 75 6d 65 6e 74 73 20 72 65 63 65 69 76 65 64 20  uments received 
c080: 62 79 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  by the <see cref
c090: 3d 22 53 74 65 70 22 20 2f 3e 20 6d 65 74 68 6f  ="Step" /> metho
c0a0: 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  d...      /// </
c0b0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f  param>..      //
c0c0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
c0d0: 74 65 70 4e 75 6d 62 65 72 22 3e 0d 0a 20 20 20  tepNumber">..   
c0e0: 20 20 20 2f 2f 2f 20 54 68 65 20 73 74 65 70 20     /// The step 
c0f0: 6e 75 6d 62 65 72 20 28 6f 6e 65 20 62 61 73 65  number (one base
c100: 64 29 2e 20 20 54 68 69 73 20 69 73 20 69 6e 63  d).  This is inc
c110: 72 65 6d 65 6d 74 65 64 20 65 61 63 68 20 74 69  rememted each ti
c120: 6d 65 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f  me the..      //
c130: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74 65  / <see cref="Ste
c140: 70 22 20 2f 3e 20 6d 65 74 68 6f 64 20 69 73 20  p" /> method is 
c150: 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 2f  called...      /
c160: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
c170: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
c180: 6d 65 3d 22 63 6f 6e 74 65 78 74 44 61 74 61 22  me="contextData"
c190: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20 70  >..      /// A p
c1a0: 6c 61 63 65 68 6f 6c 64 65 72 20 66 6f 72 20 69  laceholder for i
c1b0: 6d 70 6c 65 6d 65 6e 74 65 72 73 20 74 6f 20 73  mplementers to s
c1c0: 74 6f 72 65 20 63 6f 6e 74 65 78 74 75 61 6c 20  tore contextual 
c1d0: 64 61 74 61 20 70 65 72 74 61 69 6e 69 6e 67 0d  data pertaining.
c1e0: 0a 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 74 68  .      /// to th
c1f0: 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 78  e current contex
c200: 74 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  t...      /// </
c210: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f  param>..      //
c220: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65  / <param name="e
c230: 61 72 6c 79 42 6f 75 6e 64 22 3e 0d 0a 20 20 20  arlyBound">..   
c240: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
c250: 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  if the returned 
c260: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 67 6f  arguments are go
c270: 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20 77  ing to be used w
c280: 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 2f  ith the..      /
c290: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
c2a0: 4c 69 74 65 53 74 65 70 44 65 6c 65 67 61 74 65  LiteStepDelegate
c2b0: 22 20 2f 3e 20 74 79 70 65 3b 20 6f 74 68 65 72  " /> type; other
c2c0: 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20 20  wise, zero...   
c2d0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
c2e0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  .      /// <retu
c2f0: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  rns>..      /// 
c300: 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  The arguments to
c310: 20 70 61 73 73 20 74 6f 20 74 68 65 20 63 6f 6e   pass to the con
c320: 66 69 67 75 72 65 64 20 3c 73 65 65 20 63 72 65  figured <see cre
c330: 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f 3e 2e  f="Delegate" />.
c340: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  ..      /// </re
c350: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 70 72  turns>..      pr
c360: 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20  otected virtual 
c370: 6f 62 6a 65 63 74 5b 5d 20 47 65 74 53 74 65 70  object[] GetStep
c380: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
c390: 20 6f 62 6a 65 63 74 5b 5d 20 61 72 67 73 2c 0d   object[] args,.
c3a0: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73  .          int s
c3b0: 74 65 70 4e 75 6d 62 65 72 2c 0d 0a 20 20 20 20  tepNumber,..    
c3c0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6f 6e        object con
c3d0: 74 65 78 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  textData,..     
c3e0: 20 20 20 20 20 62 6f 6f 6c 20 65 61 72 6c 79 42       bool earlyB
c3f0: 6f 75 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ound..          
c400: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
c410: 20 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20 6e        object[] n
c420: 65 77 41 72 67 73 20 3d 20 6e 65 77 20 6f 62 6a  ewArgs = new obj
c430: 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ect[] {..       
c440: 20 20 20 20 20 20 20 22 53 74 65 70 22 2c 20 61         "Step", a
c450: 72 67 73 2c 20 73 74 65 70 4e 75 6d 62 65 72 2c  rgs, stepNumber,
c460: 20 63 6f 6e 74 65 78 74 44 61 74 61 0d 0a 20 20   contextData..  
c470: 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20          };....  
c480: 20 20 20 20 20 20 20 20 69 66 20 28 21 65 61 72          if (!ear
c490: 6c 79 42 6f 75 6e 64 29 0d 0a 20 20 20 20 20 20  lyBound)..      
c4a0: 20 20 20 20 20 20 20 20 6e 65 77 41 72 67 73 20          newArgs 
c4b0: 3d 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  = new object[] {
c4c0: 20 6e 65 77 41 72 67 73 20 7d 3b 20 2f 2f 20 57   newArgs }; // W
c4d0: 52 41 50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  RAP....         
c4e0: 20 72 65 74 75 72 6e 20 6e 65 77 41 72 67 73 3b   return newArgs;
c4f0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
c500: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
c510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
c550: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
c560: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 55  ry>..      /// U
c570: 70 64 61 74 65 73 20 74 68 65 20 6f 75 74 70 75  pdates the outpu
c580: 74 20 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20  t arguments for 
c590: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
c5a0: 74 65 70 22 20 2f 3e 20 6d 65 74 68 6f 64 2c 0d  tep" /> method,.
c5b0: 0a 20 20 20 20 20 20 2f 2f 2f 20 75 73 69 6e 67  .      /// using
c5c0: 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 41   an <see cref="A
c5d0: 72 72 61 79 22 20 2f 3e 20 6f 66 20 3c 73 65 65  rray" /> of <see
c5e0: 20 63 72 65 66 3d 22 4f 62 6a 65 63 74 22 20 2f   cref="Object" /
c5f0: 3e 2e 20 20 54 68 65 20 66 69 72 73 74 0d 0a 20  >.  The first.. 
c600: 20 20 20 20 20 2f 2f 2f 20 61 72 67 75 6d 65 6e       /// argumen
c610: 74 20 69 73 20 61 6c 77 61 79 73 20 74 68 65 20  t is always the 
c620: 6c 69 74 65 72 61 6c 20 73 74 72 69 6e 67 20 22  literal string "
c630: 53 74 65 70 22 2e 20 20 43 75 72 72 65 6e 74 6c  Step".  Currentl
c640: 79 2c 20 6f 6e 6c 79 20 74 68 65 0d 0a 20 20 20  y, only the..   
c650: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 72 65 66     /// <paramref
c660: 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74 44 61   name="contextDa
c670: 74 61 22 20 2f 3e 20 70 61 72 61 6d 65 74 65 72  ta" /> parameter
c680: 20 69 73 20 75 70 64 61 74 65 64 2e 0d 0a 20 20   is updated...  
c690: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
c6a0: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70  y>..      /// <p
c6b0: 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 73 22  aram name="args"
c6c0: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  >..      /// The
c6d0: 20 6f 72 69 67 69 6e 61 6c 20 61 72 67 75 6d 65   original argume
c6e0: 6e 74 73 20 72 65 63 65 69 76 65 64 20 62 79 20  nts received by 
c6f0: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
c700: 74 65 70 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  tep" /> method..
c710: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  .      /// </par
c720: 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  am>..      /// <
c730: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74  param name="cont
c740: 65 78 74 44 61 74 61 22 3e 0d 0a 20 20 20 20 20  extData">..     
c750: 20 2f 2f 2f 20 41 20 70 6c 61 63 65 68 6f 6c 64   /// A placehold
c760: 65 72 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74  er for implement
c770: 65 72 73 20 74 6f 20 73 74 6f 72 65 20 63 6f 6e  ers to store con
c780: 74 65 78 74 75 61 6c 20 64 61 74 61 20 70 65 72  textual data per
c790: 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20 2f  taining..      /
c7a0: 2f 2f 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  // to the curren
c7b0: 74 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20  t context...    
c7c0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
c7d0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
c7e0: 20 6e 61 6d 65 3d 22 65 61 72 6c 79 42 6f 75 6e   name="earlyBoun
c7f0: 64 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 4e  d">..      /// N
c800: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 72  on-zero if the r
c810: 65 74 75 72 6e 65 64 20 61 72 67 75 6d 65 6e 74  eturned argument
c820: 73 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 62  s are going to b
c830: 65 20 75 73 65 64 20 77 69 74 68 20 74 68 65 0d  e used with the.
c840: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20  .      /// <see 
c850: 63 72 65 66 3d 22 53 51 4c 69 74 65 53 74 65 70  cref="SQLiteStep
c860: 44 65 6c 65 67 61 74 65 22 20 2f 3e 20 74 79 70  Delegate" /> typ
c870: 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 7a 65  e; otherwise, ze
c880: 72 6f 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ro...      /// <
c890: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f  /param>..      /
c8a0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
c8b0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 67 75      /// The argu
c8c0: 6d 65 6e 74 73 20 74 6f 20 70 61 73 73 20 74 6f  ments to pass to
c8d0: 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20   the configured 
c8e0: 3c 73 65 65 20 63 72 65 66 3d 22 44 65 6c 65 67  <see cref="Deleg
c8f0: 61 74 65 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20  ate" />...      
c900: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
c910: 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20        protected 
c920: 76 69 72 74 75 61 6c 20 76 6f 69 64 20 55 70 64  virtual void Upd
c930: 61 74 65 53 74 65 70 41 72 67 73 28 0d 0a 20 20  ateStepArgs(..  
c940: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d          object[]
c950: 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20 20 20   args,..        
c960: 20 20 72 65 66 20 6f 62 6a 65 63 74 20 63 6f 6e    ref object con
c970: 74 65 78 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  textData,..     
c980: 20 20 20 20 20 62 6f 6f 6c 20 65 61 72 6c 79 42       bool earlyB
c990: 6f 75 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ound..          
c9a0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
c9b0: 20 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20 6e        object[] n
c9c0: 65 77 41 72 67 73 3b 0d 0a 0d 0a 20 20 20 20 20  ewArgs;....     
c9d0: 20 20 20 20 20 69 66 20 28 65 61 72 6c 79 42 6f       if (earlyBo
c9e0: 75 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  und)..          
c9f0: 20 20 20 20 6e 65 77 41 72 67 73 20 3d 20 61 72      newArgs = ar
ca00: 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65  gs;..          e
ca10: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
ca20: 20 20 20 6e 65 77 41 72 67 73 20 3d 20 61 72 67     newArgs = arg
ca30: 73 5b 30 5d 20 61 73 20 6f 62 6a 65 63 74 5b 5d  s[0] as object[]
ca40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
ca50: 66 20 28 6e 65 77 41 72 67 73 20 3d 3d 20 6e 75  f (newArgs == nu
ca60: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
ca70: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
ca80: 20 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 44          contextD
ca90: 61 74 61 20 3d 20 6e 65 77 41 72 67 73 5b 6e 65  ata = newArgs[ne
caa0: 77 41 72 67 73 2e 4c 65 6e 67 74 68 20 2d 20 31  wArgs.Length - 1
cab0: 5d 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ];..      }.... 
cac0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
caf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
cb10: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
cb20: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
cb30: 20 52 65 74 75 72 6e 73 20 74 68 65 20 6c 69 73   Returns the lis
cb40: 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 66  t of arguments f
cb50: 6f 72 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  or the <see cref
cb60: 3d 22 46 69 6e 61 6c 22 20 2f 3e 20 6d 65 74 68  ="Final" /> meth
cb70: 6f 64 2c 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 61  od,..      /// a
cb80: 73 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22  s an <see cref="
cb90: 41 72 72 61 79 22 20 2f 3e 20 6f 66 20 3c 73 65  Array" /> of <se
cba0: 65 20 63 72 65 66 3d 22 4f 62 6a 65 63 74 22 20  e cref="Object" 
cbb0: 2f 3e 2e 20 20 54 68 65 20 66 69 72 73 74 0d 0a  />.  The first..
cbc0: 20 20 20 20 20 20 2f 2f 2f 20 61 72 67 75 6d 65        /// argume
cbd0: 6e 74 20 69 73 20 61 6c 77 61 79 73 20 74 68 65  nt is always the
cbe0: 20 6c 69 74 65 72 61 6c 20 73 74 72 69 6e 67 20   literal string 
cbf0: 22 46 69 6e 61 6c 22 2e 0d 0a 20 20 20 20 20 20  "Final"...      
cc00: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
cc10: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
cc20: 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74 44 61   name="contextDa
cc30: 74 61 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ta">..      /// 
cc40: 41 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 66 6f  A placeholder fo
cc50: 72 20 69 6d 70 6c 65 6d 65 6e 74 65 72 73 20 74  r implementers t
cc60: 6f 20 73 74 6f 72 65 20 63 6f 6e 74 65 78 74 75  o store contextu
cc70: 61 6c 20 64 61 74 61 20 70 65 72 74 61 69 6e 69  al data pertaini
cc80: 6e 67 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 6f  ng..      /// to
cc90: 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e   the current con
cca0: 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  text...      ///
ccb0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
ccc0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
ccd0: 3d 22 65 61 72 6c 79 42 6f 75 6e 64 22 3e 0d 0a  ="earlyBound">..
cce0: 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
ccf0: 72 6f 20 69 66 20 74 68 65 20 72 65 74 75 72 6e  ro if the return
cd00: 65 64 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  ed arguments are
cd10: 20 67 6f 69 6e 67 20 74 6f 20 62 65 20 75 73 65   going to be use
cd20: 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20  d with the..    
cd30: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
cd40: 22 53 51 4c 69 74 65 46 69 6e 61 6c 44 65 6c 65  "SQLiteFinalDele
cd50: 67 61 74 65 22 20 2f 3e 20 74 79 70 65 3b 20 6f  gate" /> type; o
cd60: 74 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d  therwise, zero..
cd70: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  .      /// </par
cd80: 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  am>..      /// <
cd90: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
cda0: 2f 2f 2f 20 54 68 65 20 61 72 67 75 6d 65 6e 74  /// The argument
cdb0: 73 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65  s to pass to the
cdc0: 20 63 6f 6e 66 69 67 75 72 65 64 20 3c 73 65 65   configured <see
cdd0: 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22   cref="Delegate"
cde0: 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20   />...      /// 
cdf0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
ce00: 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74    protected virt
ce10: 75 61 6c 20 6f 62 6a 65 63 74 5b 5d 20 47 65 74  ual object[] Get
ce20: 46 69 6e 61 6c 41 72 67 73 28 0d 0a 20 20 20 20  FinalArgs(..    
ce30: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6f 6e        object con
ce40: 74 65 78 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  textData,..     
ce50: 20 20 20 20 20 62 6f 6f 6c 20 65 61 72 6c 79 42       bool earlyB
ce60: 6f 75 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ound..          
ce70: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
ce80: 20 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20 6e        object[] n
ce90: 65 77 41 72 67 73 20 3d 20 6e 65 77 20 6f 62 6a  ewArgs = new obj
cea0: 65 63 74 5b 5d 20 7b 20 22 46 69 6e 61 6c 22 2c  ect[] { "Final",
ceb0: 20 63 6f 6e 74 65 78 74 44 61 74 61 20 7d 3b 0d   contextData };.
cec0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
ced0: 28 21 65 61 72 6c 79 42 6f 75 6e 64 29 0d 0a 20  (!earlyBound).. 
cee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
cef0: 41 72 67 73 20 3d 20 6e 65 77 20 6f 62 6a 65 63  Args = new objec
cf00: 74 5b 5d 20 7b 20 6e 65 77 41 72 67 73 20 7d 3b  t[] { newArgs };
cf10: 20 2f 2f 20 57 52 41 50 0d 0a 0d 0a 20 20 20 20   // WRAP....    
cf20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
cf30: 41 72 67 73 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  Args;..      }..
cf40: 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ..      ////////
cf50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf90: 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  /....      /// <
cfa0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
cfb0: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
cfc0: 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74  list of argument
cfd0: 73 20 66 6f 72 20 74 68 65 20 3c 73 65 65 20 63  s for the <see c
cfe0: 72 65 66 3d 22 43 6f 6d 70 61 72 65 22 20 2f 3e  ref="Compare" />
cff0: 20 6d 65 74 68 6f 64 2c 0d 0a 20 20 20 20 20 20   method,..      
d000: 2f 2f 2f 20 61 73 20 61 6e 20 3c 73 65 65 20 63  /// as an <see c
d010: 72 65 66 3d 22 41 72 72 61 79 22 20 2f 3e 20 6f  ref="Array" /> o
d020: 66 20 3c 73 65 65 20 63 72 65 66 3d 22 4f 62 6a  f <see cref="Obj
d030: 65 63 74 22 20 2f 3e 2e 20 20 54 68 65 20 66 69  ect" />.  The fi
d040: 72 73 74 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 61  rst..      /// a
d050: 72 67 75 6d 65 6e 74 20 69 73 20 61 6c 77 61 79  rgument is alway
d060: 73 20 74 68 65 20 6c 69 74 65 72 61 6c 20 73 74  s the literal st
d070: 72 69 6e 67 20 22 43 6f 6d 70 61 72 65 22 2e 0d  ring "Compare"..
d080: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
d090: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
d0a0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61   <param name="pa
d0b0: 72 61 6d 31 22 3e 0d 0a 20 20 20 20 20 20 2f 2f  ram1">..      //
d0c0: 2f 20 54 68 65 20 66 69 72 73 74 20 73 74 72 69  / The first stri
d0d0: 6e 67 20 74 6f 20 63 6f 6d 70 61 72 65 2e 0d 0a  ng to compare...
d0e0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
d0f0: 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70  m>..      /// <p
d100: 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d  aram name="param
d110: 32 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54  2">..      /// T
d120: 68 65 20 73 65 63 6f 6e 64 20 73 74 72 6e 69 67  he second strnig
d130: 20 74 6f 20 63 6f 6d 70 61 72 65 2e 0d 0a 20 20   to compare...  
d140: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
d150: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ..      /// <par
d160: 61 6d 20 6e 61 6d 65 3d 22 65 61 72 6c 79 42 6f  am name="earlyBo
d170: 75 6e 64 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  und">..      ///
d180: 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   Non-zero if the
d190: 20 72 65 74 75 72 6e 65 64 20 61 72 67 75 6d 65   returned argume
d1a0: 6e 74 73 20 61 72 65 20 67 6f 69 6e 67 20 74 6f  nts are going to
d1b0: 20 62 65 20 75 73 65 64 20 77 69 74 68 20 74 68   be used with th
d1c0: 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  e..      /// <se
d1d0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f  e cref="SQLiteCo
d1e0: 6d 70 61 72 65 44 65 6c 65 67 61 74 65 22 20 2f  mpareDelegate" /
d1f0: 3e 20 74 79 70 65 3b 20 6f 74 68 65 72 77 69 73  > type; otherwis
d200: 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20  e, zero...      
d210: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
d220: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
d230: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  >..      /// The
d240: 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 70 61   arguments to pa
d250: 73 73 20 74 6f 20 74 68 65 20 63 6f 6e 66 69 67  ss to the config
d260: 75 72 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22  ured <see cref="
d270: 44 65 6c 65 67 61 74 65 22 20 2f 3e 2e 0d 0a 20  Delegate" />... 
d280: 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
d290: 6e 73 3e 0d 0a 20 20 20 20 20 20 70 72 6f 74 65  ns>..      prote
d2a0: 63 74 65 64 20 76 69 72 74 75 61 6c 20 6f 62 6a  cted virtual obj
d2b0: 65 63 74 5b 5d 20 47 65 74 43 6f 6d 70 61 72 65  ect[] GetCompare
d2c0: 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  Args(..         
d2d0: 20 73 74 72 69 6e 67 20 70 61 72 61 6d 31 2c 0d   string param1,.
d2e0: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e  .          strin
d2f0: 67 20 70 61 72 61 6d 32 2c 0d 0a 20 20 20 20 20  g param2,..     
d300: 20 20 20 20 20 62 6f 6f 6c 20 65 61 72 6c 79 42       bool earlyB
d310: 6f 75 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ound..          
d320: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
d330: 20 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20 6e        object[] n
d340: 65 77 41 72 67 73 20 3d 20 6e 65 77 20 6f 62 6a  ewArgs = new obj
d350: 65 63 74 5b 5d 20 7b 20 22 43 6f 6d 70 61 72 65  ect[] { "Compare
d360: 22 2c 20 70 61 72 61 6d 31 2c 20 70 61 72 61 6d  ", param1, param
d370: 32 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2 };....        
d380: 20 20 69 66 20 28 21 65 61 72 6c 79 42 6f 75 6e    if (!earlyBoun
d390: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
d3a0: 20 20 6e 65 77 41 72 67 73 20 3d 20 6e 65 77 20    newArgs = new 
d3b0: 6f 62 6a 65 63 74 5b 5d 20 7b 20 6e 65 77 41 72  object[] { newAr
d3c0: 67 73 20 7d 3b 20 2f 2f 20 57 52 41 50 0d 0a 0d  gs }; // WRAP...
d3d0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
d3e0: 6e 20 6e 65 77 41 72 67 73 3b 0d 0a 20 20 20 20  n newArgs;..    
d3f0: 20 20 7d 0d 0a 20 20 20 20 20 20 23 65 6e 64 72    }..      #endr
d400: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 2f  egion....      /
d410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d450: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
d460: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
d470: 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   Properties..   
d480: 20 20 20 70 72 69 76 61 74 65 20 44 65 6c 65 67     private Deleg
d490: 61 74 65 20 63 61 6c 6c 62 61 63 6b 31 3b 0d 0a  ate callback1;..
d4a0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
d4b0: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54  ry>..      /// T
d4c0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 65  he <see cref="De
d4d0: 6c 65 67 61 74 65 22 20 2f 3e 20 74 6f 20 62 65  legate" /> to be
d4e0: 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 63 61   used for all ca
d4f0: 6c 6c 73 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20  lls into the..  
d500: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
d510: 66 3d 22 49 6e 76 6f 6b 65 22 20 2f 3e 2c 20 3c  f="Invoke" />, <
d520: 73 65 65 20 63 72 65 66 3d 22 53 74 65 70 22 20  see cref="Step" 
d530: 2f 3e 2c 20 61 6e 64 0d 0a 20 20 20 20 20 20 2f  />, and..      /
d540: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 43 6f  // <see cref="Co
d550: 6d 70 61 72 65 22 20 2f 3e 20 76 69 72 74 75 61  mpare" /> virtua
d560: 6c 20 6d 65 74 68 6f 64 73 20 6e 65 65 64 65 64  l methods needed
d570: 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 2f   by the..      /
d580: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
d590: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22 20 2f 3e  LiteFunction" />
d5a0: 20 62 61 73 65 20 63 6c 61 73 73 2e 0d 0a 20 20   base class...  
d5b0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
d5c0: 79 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63  y>..      public
d5d0: 20 76 69 72 74 75 61 6c 20 44 65 6c 65 67 61 74   virtual Delegat
d5e0: 65 20 43 61 6c 6c 62 61 63 6b 31 0d 0a 20 20 20  e Callback1..   
d5f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d600: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 61 6c  get { return cal
d610: 6c 62 61 63 6b 31 3b 20 7d 0d 0a 20 20 20 20 20  lback1; }..     
d620: 20 20 20 20 20 73 65 74 20 7b 20 63 61 6c 6c 62       set { callb
d630: 61 63 6b 31 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ack1 = value; }.
d640: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
d650: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
d660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
d6a0: 20 20 20 20 20 70 72 69 76 61 74 65 20 44 65 6c       private Del
d6b0: 65 67 61 74 65 20 63 61 6c 6c 62 61 63 6b 32 3b  egate callback2;
d6c0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
d6d0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
d6e0: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
d6f0: 44 65 6c 65 67 61 74 65 22 20 2f 3e 20 74 6f 20  Delegate" /> to 
d700: 62 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20  be used for all 
d710: 63 61 6c 6c 73 20 69 6e 74 6f 20 74 68 65 0d 0a  calls into the..
d720: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
d730: 72 65 66 3d 22 46 69 6e 61 6c 22 20 2f 3e 20 76  ref="Final" /> v
d740: 69 72 74 75 61 6c 20 6d 65 74 68 6f 64 73 20 6e  irtual methods n
d750: 65 65 64 65 64 20 62 79 20 74 68 65 0d 0a 20 20  eeded by the..  
d760: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
d770: 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  f="SQLiteFunctio
d780: 6e 22 20 2f 3e 20 62 61 73 65 20 63 6c 61 73 73  n" /> base class
d790: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
d7a0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 70  ummary>..      p
d7b0: 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 44 65  ublic virtual De
d7c0: 6c 65 67 61 74 65 20 43 61 6c 6c 62 61 63 6b 32  legate Callback2
d7d0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
d7e0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
d7f0: 6e 20 63 61 6c 6c 62 61 63 6b 32 3b 20 7d 0d 0a  n callback2; }..
d800: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
d810: 63 61 6c 6c 62 61 63 6b 32 20 3d 20 76 61 6c 75  callback2 = valu
d820: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  e; }..      }.. 
d830: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
d840: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  ...      ///////
d850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d890: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 23 72 65 67  //....      #reg
d8a0: 69 6f 6e 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ion System.Data.
d8b0: 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 46 75 6e  SQLite.SQLiteFun
d8c0: 63 74 69 6f 6e 20 4f 76 65 72 72 69 64 65 73 0d  ction Overrides.
d8d0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
d8e0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
d8f0: 54 68 69 73 20 76 69 72 74 75 61 6c 20 6d 65 74  This virtual met
d900: 68 6f 64 20 69 73 20 74 68 65 20 69 6d 70 6c 65  hod is the imple
d910: 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 73 63  mentation for sc
d920: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 73 2e 0d  alar functions..
d930: 0a 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74  .      /// See t
d940: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
d950: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 49 6e 76  LiteFunction.Inv
d960: 6f 6b 65 22 20 2f 3e 20 6d 65 74 68 6f 64 20 66  oke" /> method f
d970: 6f 72 20 6d 6f 72 65 0d 0a 20 20 20 20 20 20 2f  or more..      /
d980: 2f 2f 20 64 65 74 61 69 6c 73 2e 0d 0a 20 20 20  // details...   
d990: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
d9a0: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  >..      /// <pa
d9b0: 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 73 22 3e  ram name="args">
d9c0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20  ..      /// The 
d9d0: 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68  arguments for th
d9e0: 65 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  e scalar functio
d9f0: 6e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  n...      /// </
da00: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f  param>..      //
da10: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
da20: 20 20 20 2f 2f 2f 20 54 68 65 20 72 65 73 75 6c     /// The resul
da30: 74 20 6f 66 20 74 68 65 20 73 63 61 6c 61 72 20  t of the scalar 
da40: 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  function...     
da50: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
da60: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76  .      public ov
da70: 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 49 6e  erride object In
da80: 76 6f 6b 65 28 0d 0a 20 20 20 20 20 20 20 20 20  voke(..         
da90: 20 6f 62 6a 65 63 74 5b 5d 20 61 72 67 73 20 2f   object[] args /
daa0: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
dab0: 20 20 20 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20     )..      {.. 
dac0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c           if (cal
dad0: 6c 62 61 63 6b 31 20 3d 3d 20 6e 75 6c 6c 29 0d  lback1 == null).
dae0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
daf0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
db00: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
db10: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
db20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
db30: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
db40: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
db50: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
db60: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
db70: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
db80: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
db90: 20 20 20 20 20 20 20 20 4e 6f 43 61 6c 6c 62 61          NoCallba
dba0: 63 6b 45 72 72 6f 72 2c 20 22 49 6e 76 6f 6b 65  ckError, "Invoke
dbb0: 22 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  "));..          
dbc0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 53  }....          S
dbd0: 51 4c 69 74 65 49 6e 76 6f 6b 65 44 65 6c 65 67  QLiteInvokeDeleg
dbe0: 61 74 65 20 69 6e 76 6f 6b 65 44 65 6c 65 67 61  ate invokeDelega
dbf0: 74 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  te =..          
dc00: 20 20 20 20 63 61 6c 6c 62 61 63 6b 31 20 61 73      callback1 as
dc10: 20 53 51 4c 69 74 65 49 6e 76 6f 6b 65 44 65 6c   SQLiteInvokeDel
dc20: 65 67 61 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  egate;....      
dc30: 20 20 20 20 69 66 20 28 69 6e 76 6f 6b 65 44 65      if (invokeDe
dc40: 6c 65 67 61 74 65 20 21 3d 20 6e 75 6c 6c 29 0d  legate != null).
dc50: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
dc60: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
dc70: 72 6e 20 69 6e 76 6f 6b 65 44 65 6c 65 67 61 74  rn invokeDelegat
dc80: 65 2e 49 6e 76 6f 6b 65 28 22 49 6e 76 6f 6b 65  e.Invoke("Invoke
dc90: 22 2c 20 61 72 67 73 29 3b 20 2f 2a 20 74 68 72  ", args); /* thr
dca0: 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
dcb0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c   }..          el
dcc0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  se..          {.
dcd0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
dce0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
dcf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
dd00: 65 74 75 72 6e 20 63 61 6c 6c 62 61 63 6b 31 2e  eturn callback1.
dd10: 44 79 6e 61 6d 69 63 49 6e 76 6f 6b 65 28 0d 0a  DynamicInvoke(..
dd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd30: 20 20 47 65 74 49 6e 76 6f 6b 65 41 72 67 73 28    GetInvokeArgs(
dd40: 61 72 67 73 2c 20 66 61 6c 73 65 29 29 3b 20 2f  args, false)); /
dd50: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 23 65 6c 73  * throw */..#els
dd60: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
dd70: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
dd80: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
dd90: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
dda0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
ddb0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f    }....      ///
ddc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ddd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ddf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de00: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
de10: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
de20: 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 69       /// This vi
de30: 72 74 75 61 6c 20 6d 65 74 68 6f 64 20 69 73 20  rtual method is 
de40: 70 61 72 74 20 6f 66 20 74 68 65 20 69 6d 70 6c  part of the impl
de50: 65 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61  ementation for a
de60: 67 67 72 65 67 61 74 65 0d 0a 20 20 20 20 20 20  ggregate..      
de70: 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20  /// functions.  
de80: 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
de90: 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  f="SQLiteFunctio
dea0: 6e 2e 53 74 65 70 22 20 2f 3e 20 6d 65 74 68 6f  n.Step" /> metho
deb0: 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72  d..      /// for
dec0: 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0d 0a   more details...
ded0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
dee0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
def0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
df00: 73 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54  s">..      /// T
df10: 68 65 20 61 72 67 75 6d 65 6e 74 73 20 66 6f 72  he arguments for
df20: 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 66   the aggregate f
df30: 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  unction...      
df40: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
df50: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
df60: 61 6d 65 3d 22 73 74 65 70 4e 75 6d 62 65 72 22  ame="stepNumber"
df70: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  >..      /// The
df80: 20 73 74 65 70 20 6e 75 6d 62 65 72 20 28 6f 6e   step number (on
df90: 65 20 62 61 73 65 64 29 2e 20 20 54 68 69 73 20  e based).  This 
dfa0: 69 73 20 69 6e 63 72 65 6d 65 6d 74 65 64 20 65  is incrememted e
dfb0: 61 63 68 20 74 69 6d 65 20 74 68 65 0d 0a 20 20  ach time the..  
dfc0: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
dfd0: 66 3d 22 53 74 65 70 22 20 2f 3e 20 6d 65 74 68  f="Step" /> meth
dfe0: 6f 64 20 69 73 20 63 61 6c 6c 65 64 2e 0d 0a 20  od is called... 
dff0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
e000: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  >..      /// <pa
e010: 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78  ram name="contex
e020: 74 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 2f  tData">..      /
e030: 2f 2f 20 41 20 70 6c 61 63 65 68 6f 6c 64 65 72  // A placeholder
e040: 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 65 72   for implementer
e050: 73 20 74 6f 20 73 74 6f 72 65 20 63 6f 6e 74 65  s to store conte
e060: 78 74 75 61 6c 20 64 61 74 61 20 70 65 72 74 61  xtual data perta
e070: 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20 2f 2f 2f  ining..      ///
e080: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
e090: 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 20  context...      
e0a0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
e0b0: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
e0c0: 69 64 65 20 76 6f 69 64 20 53 74 65 70 28 0d 0a  ide void Step(..
e0d0: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
e0e0: 5b 5d 20 61 72 67 73 2c 20 20 20 20 20 20 20 20  [] args,        
e0f0: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
e100: 20 20 20 20 20 69 6e 74 20 73 74 65 70 4e 75 6d       int stepNum
e110: 62 65 72 2c 20 20 20 20 20 20 20 20 2f 2a 20 69  ber,        /* i
e120: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
e130: 72 65 66 20 6f 62 6a 65 63 74 20 63 6f 6e 74 65  ref object conte
e140: 78 74 44 61 74 61 20 2f 2a 20 69 6e 2c 20 6f 75  xtData /* in, ou
e150: 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  t */..          
e160: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
e170: 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61        if (callba
e180: 63 6b 31 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ck1 == null)..  
e190: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e1a0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
e1b0: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
e1c0: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1e0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
e1f0: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
e200: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
e210: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
e220: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
e230: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e240: 20 20 20 20 20 4e 6f 43 61 6c 6c 62 61 63 6b 45       NoCallbackE
e250: 72 72 6f 72 2c 20 22 53 74 65 70 22 29 29 3b 0d  rror, "Step"));.
e260: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
e270: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
e280: 53 74 65 70 44 65 6c 65 67 61 74 65 20 73 74 65  StepDelegate ste
e290: 70 44 65 6c 65 67 61 74 65 20 3d 20 63 61 6c 6c  pDelegate = call
e2a0: 62 61 63 6b 31 20 61 73 20 53 51 4c 69 74 65 53  back1 as SQLiteS
e2b0: 74 65 70 44 65 6c 65 67 61 74 65 3b 0d 0a 0d 0a  tepDelegate;....
e2c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
e2d0: 65 70 44 65 6c 65 67 61 74 65 20 21 3d 20 6e 75  epDelegate != nu
e2e0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ll)..          {
e2f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e300: 73 74 65 70 44 65 6c 65 67 61 74 65 2e 49 6e 76  stepDelegate.Inv
e310: 6f 6b 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  oke(..          
e320: 20 20 20 20 20 20 20 20 22 53 74 65 70 22 2c 20          "Step", 
e330: 61 72 67 73 2c 20 73 74 65 70 4e 75 6d 62 65 72  args, stepNumber
e340: 2c 20 72 65 66 20 63 6f 6e 74 65 78 74 44 61 74  , ref contextDat
e350: 61 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  a); /* throw */.
e360: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
e370: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
e380: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
e390: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
e3a0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
e3b0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5b           object[
e3c0: 5d 20 6e 65 77 41 72 67 73 20 3d 20 47 65 74 53  ] newArgs = GetS
e3d0: 74 65 70 41 72 67 73 28 0d 0a 20 20 20 20 20 20  tepArgs(..      
e3e0: 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73              args
e3f0: 2c 20 73 74 65 70 4e 75 6d 62 65 72 2c 20 63 6f  , stepNumber, co
e400: 6e 74 65 78 74 44 61 74 61 2c 20 66 61 6c 73 65  ntextData, false
e410: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
e420: 20 20 20 20 2f 2a 20 49 47 4e 4f 52 45 44 20 2a      /* IGNORED *
e430: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
e440: 20 63 61 6c 6c 62 61 63 6b 31 2e 44 79 6e 61 6d   callback1.Dynam
e450: 69 63 49 6e 76 6f 6b 65 28 6e 65 77 41 72 67 73  icInvoke(newArgs
e460: 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
e470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e480: 55 70 64 61 74 65 53 74 65 70 41 72 67 73 28 6e  UpdateStepArgs(n
e490: 65 77 41 72 67 73 2c 20 72 65 66 20 63 6f 6e 74  ewArgs, ref cont
e4a0: 65 78 74 44 61 74 61 2c 20 66 61 6c 73 65 29 3b  extData, false);
e4b0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
e4c0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
e4d0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
e4e0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
e4f0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  dif..          }
e500: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
e510: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
e560: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
e570: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54  ry>..      /// T
e580: 68 69 73 20 76 69 72 74 75 61 6c 20 6d 65 74 68  his virtual meth
e590: 6f 64 20 69 73 20 70 61 72 74 20 6f 66 20 74 68  od is part of th
e5a0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
e5b0: 20 66 6f 72 20 61 67 67 72 65 67 61 74 65 0d 0a   for aggregate..
e5c0: 20 20 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69        /// functi
e5d0: 6f 6e 73 2e 20 20 53 65 65 20 74 68 65 20 3c 73  ons.  See the <s
e5e0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46  ee cref="SQLiteF
e5f0: 75 6e 63 74 69 6f 6e 2e 46 69 6e 61 6c 22 20 2f  unction.Final" /
e600: 3e 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20  > method..      
e610: 2f 2f 2f 20 66 6f 72 20 6d 6f 72 65 20 64 65 74  /// for more det
e620: 61 69 6c 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  ails...      ///
e630: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
e640: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
e650: 6d 65 3d 22 63 6f 6e 74 65 78 74 44 61 74 61 22  me="contextData"
e660: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20 70  >..      /// A p
e670: 6c 61 63 65 68 6f 6c 64 65 72 20 66 6f 72 20 69  laceholder for i
e680: 6d 70 6c 65 6d 65 6e 74 65 72 73 20 74 6f 20 73  mplementers to s
e690: 74 6f 72 65 20 63 6f 6e 74 65 78 74 75 61 6c 20  tore contextual 
e6a0: 64 61 74 61 20 70 65 72 74 61 69 6e 69 6e 67 0d  data pertaining.
e6b0: 0a 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 74 68  .      /// to th
e6c0: 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 78  e current contex
e6d0: 74 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  t...      /// </
e6e0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f  param>..      //
e6f0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
e700: 20 20 20 2f 2f 2f 20 54 68 65 20 72 65 73 75 6c     /// The resul
e710: 74 20 6f 66 20 74 68 65 20 61 67 67 72 65 67 61  t of the aggrega
e720: 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20  te function...  
e730: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
e740: 73 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63  s>..      public
e750: 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
e760: 20 46 69 6e 61 6c 28 0d 0a 20 20 20 20 20 20 20   Final(..       
e770: 20 20 20 6f 62 6a 65 63 74 20 63 6f 6e 74 65 78     object contex
e780: 74 44 61 74 61 20 2f 2a 20 69 6e 20 2a 2f 0d 0a  tData /* in */..
e790: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
e7a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e7b0: 69 66 20 28 63 61 6c 6c 62 61 63 6b 32 20 3d 3d  if (callback2 ==
e7c0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
e7d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e7e0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
e7f0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
e800: 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
e810: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
e820: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53  eNativeMethods.S
e830: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
e840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e850: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
e860: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
e870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
e880: 6f 43 61 6c 6c 62 61 63 6b 45 72 72 6f 72 2c 20  oCallbackError, 
e890: 22 46 69 6e 61 6c 22 29 29 3b 0d 0a 20 20 20 20  "Final"));..    
e8a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
e8b0: 20 20 20 20 20 53 51 4c 69 74 65 46 69 6e 61 6c       SQLiteFinal
e8c0: 44 65 6c 65 67 61 74 65 20 66 69 6e 61 6c 44 65  Delegate finalDe
e8d0: 6c 65 67 61 74 65 20 3d 20 63 61 6c 6c 62 61 63  legate = callbac
e8e0: 6b 32 20 61 73 20 53 51 4c 69 74 65 46 69 6e 61  k2 as SQLiteFina
e8f0: 6c 44 65 6c 65 67 61 74 65 3b 0d 0a 0d 0a 20 20  lDelegate;....  
e900: 20 20 20 20 20 20 20 20 69 66 20 28 66 69 6e 61          if (fina
e910: 6c 44 65 6c 65 67 61 74 65 20 21 3d 20 6e 75 6c  lDelegate != nul
e920: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  l)..          {.
e930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
e940: 65 74 75 72 6e 20 66 69 6e 61 6c 44 65 6c 65 67  eturn finalDeleg
e950: 61 74 65 2e 49 6e 76 6f 6b 65 28 22 46 69 6e 61  ate.Invoke("Fina
e960: 6c 22 2c 20 63 6f 6e 74 65 78 74 44 61 74 61 29  l", contextData)
e970: 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ; /* throw */.. 
e980: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
e990: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
e9a0: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c        {..#if !PL
e9b0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
e9c0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
e9d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 61         return ca
e9e0: 6c 6c 62 61 63 6b 31 2e 44 79 6e 61 6d 69 63 49  llback1.DynamicI
e9f0: 6e 76 6f 6b 65 28 47 65 74 46 69 6e 61 6c 41 72  nvoke(GetFinalAr
ea00: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
ea10: 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 44 61         contextDa
ea20: 74 61 2c 20 66 61 6c 73 65 29 29 3b 20 2f 2a 20  ta, false)); /* 
ea30: 74 68 72 6f 77 20 2a 2f 0d 0a 23 65 6c 73 65 0d  throw */..#else.
ea40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
ea50: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
ea60: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
ea70: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
ea80: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ea90: 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f  }....      /////
eaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ead0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eae0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  ////....      //
eaf0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
eb00: 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 69 72 74     /// This virt
eb10: 75 61 6c 20 6d 65 74 68 6f 64 20 69 73 20 70 61  ual method is pa
eb20: 72 74 20 6f 66 20 74 68 65 20 69 6d 70 6c 65 6d  rt of the implem
eb30: 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 63 6f 6c  entation for col
eb40: 6c 61 74 69 6e 67 0d 0a 20 20 20 20 20 20 2f 2f  lating..      //
eb50: 2f 20 73 65 71 75 65 6e 63 65 73 2e 20 20 53 65  / sequences.  Se
eb60: 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
eb70: 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e  "SQLiteFunction.
eb80: 43 6f 6d 70 61 72 65 22 20 2f 3e 20 6d 65 74 68  Compare" /> meth
eb90: 6f 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 66 6f  od..      /// fo
eba0: 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0d  r more details..
ebb0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
ebc0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
ebd0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61   <param name="pa
ebe0: 72 61 6d 31 22 3e 0d 0a 20 20 20 20 20 20 2f 2f  ram1">..      //
ebf0: 2f 20 54 68 65 20 66 69 72 73 74 20 73 74 72 69  / The first stri
ec00: 6e 67 20 74 6f 20 63 6f 6d 70 61 72 65 2e 0d 0a  ng to compare...
ec10: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
ec20: 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70  m>..      /// <p
ec30: 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d  aram name="param
ec40: 32 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54  2">..      /// T
ec50: 68 65 20 73 65 63 6f 6e 64 20 73 74 72 6e 69 67  he second strnig
ec60: 20 74 6f 20 63 6f 6d 70 61 72 65 2e 0d 0a 20 20   to compare...  
ec70: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
ec80: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74  ..      /// <ret
ec90: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  urns>..      ///
eca0: 20 41 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65   A positive inte
ecb0: 67 65 72 20 69 66 20 74 68 65 20 3c 70 61 72 61  ger if the <para
ecc0: 6d 72 65 66 20 6e 61 6d 65 3d 22 70 61 72 61 6d  mref name="param
ecd0: 31 22 20 2f 3e 20 70 61 72 61 6d 65 74 65 72 20  1" /> parameter 
ece0: 69 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 67 72  is..      /// gr
ecf0: 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 3c  eater than the <
ed00: 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 70  paramref name="p
ed10: 61 72 61 6d 32 22 20 2f 3e 20 70 61 72 61 6d 65  aram2" /> parame
ed20: 74 65 72 2c 20 61 20 6e 65 67 61 74 69 76 65 0d  ter, a negative.
ed30: 0a 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67  .      /// integ
ed40: 65 72 20 69 66 20 74 68 65 20 3c 70 61 72 61 6d  er if the <param
ed50: 72 65 66 20 6e 61 6d 65 3d 22 70 61 72 61 6d 31  ref name="param1
ed60: 22 20 2f 3e 20 70 61 72 61 6d 65 74 65 72 20 69  " /> parameter i
ed70: 73 20 6c 65 73 73 20 74 68 61 6e 0d 0a 20 20 20  s less than..   
ed80: 20 20 20 2f 2f 2f 20 74 68 65 20 3c 70 61 72 61     /// the <para
ed90: 6d 72 65 66 20 6e 61 6d 65 3d 22 70 61 72 61 6d  mref name="param
eda0: 32 22 20 2f 3e 20 70 61 72 61 6d 65 74 65 72 2c  2" /> parameter,
edb0: 20 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65 79   or zero if they
edc0: 20 61 72 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20   are..      /// 
edd0: 65 71 75 61 6c 2e 0d 0a 20 20 20 20 20 20 2f 2f  equal...      //
ede0: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
edf0: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
ee00: 69 64 65 20 69 6e 74 20 43 6f 6d 70 61 72 65 28  ide int Compare(
ee10: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69  ..          stri
ee20: 6e 67 20 70 61 72 61 6d 31 2c 20 2f 2a 20 69 6e  ng param1, /* in
ee30: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 73   */..          s
ee40: 74 72 69 6e 67 20 70 61 72 61 6d 32 20 20 2f 2a  tring param2  /*
ee50: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
ee60: 20 20 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20    )..      {..  
ee70: 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c          if (call
ee80: 62 61 63 6b 31 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  back1 == null)..
ee90: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
eea0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
eeb0: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
eec0: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
eed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eee0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
eef0: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
ef00: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
ef10: 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49          CultureI
ef20: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
ef30: 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
ef40: 20 20 20 20 20 20 20 4e 6f 43 61 6c 6c 62 61 63         NoCallbac
ef50: 6b 45 72 72 6f 72 2c 20 22 43 6f 6d 70 61 72 65  kError, "Compare
ef60: 22 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  "));..          
ef70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 53  }....          S
ef80: 51 4c 69 74 65 43 6f 6d 70 61 72 65 44 65 6c 65  QLiteCompareDele
ef90: 67 61 74 65 20 63 6f 6d 70 61 72 65 44 65 6c 65  gate compareDele
efa0: 67 61 74 65 20 3d 0d 0a 20 20 20 20 20 20 20 20  gate =..        
efb0: 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 31 20        callback1 
efc0: 61 73 20 53 51 4c 69 74 65 43 6f 6d 70 61 72 65  as SQLiteCompare
efd0: 44 65 6c 65 67 61 74 65 3b 0d 0a 0d 0a 20 20 20  Delegate;....   
efe0: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6d 70 61         if (compa
eff0: 72 65 44 65 6c 65 67 61 74 65 20 21 3d 20 6e 75  reDelegate != nu
f000: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ll)..          {
f010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f020: 72 65 74 75 72 6e 20 63 6f 6d 70 61 72 65 44 65  return compareDe
f030: 6c 65 67 61 74 65 2e 49 6e 76 6f 6b 65 28 0d 0a  legate.Invoke(..
f040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f050: 20 20 22 43 6f 6d 70 61 72 65 22 2c 20 70 61 72    "Compare", par
f060: 61 6d 31 2c 20 70 61 72 61 6d 32 29 3b 20 2f 2a  am1, param2); /*
f070: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
f080: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
f090: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
f0a0: 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
f0b0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
f0c0: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
f0d0: 20 20 20 6f 62 6a 65 63 74 20 72 65 73 75 6c 74     object result
f0e0: 20 3d 20 63 61 6c 6c 62 61 63 6b 31 2e 44 79 6e   = callback1.Dyn
f0f0: 61 6d 69 63 49 6e 76 6f 6b 65 28 47 65 74 43 6f  amicInvoke(GetCo
f100: 6d 70 61 72 65 41 72 67 73 28 0d 0a 20 20 20 20  mpareArgs(..    
f110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
f120: 72 61 6d 31 2c 20 70 61 72 61 6d 32 2c 20 66 61  ram1, param2, fa
f130: 6c 73 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20  lse)); /* throw 
f140: 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  */....          
f150: 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 20 69      if (result i
f160: 73 20 69 6e 74 29 0d 0a 20 20 20 20 20 20 20 20  s int)..        
f170: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
f180: 20 28 69 6e 74 29 72 65 73 75 6c 74 3b 0d 0a 0d   (int)result;...
f190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
f1a0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
f1b0: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
f1c0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
f1d0: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
f1e0: 69 76 65 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  iveMethods.Strin
f1f0: 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
f200: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
f210: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
f220: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
f230: 20 20 20 20 20 20 20 20 20 20 20 52 65 73 75 6c             Resul
f240: 74 49 6e 74 33 32 45 72 72 6f 72 2c 20 22 43 6f  tInt32Error, "Co
f250: 6d 70 61 72 65 22 29 29 3b 0d 0a 23 65 6c 73 65  mpare"));..#else
f260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f270: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
f280: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
f290: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
f2a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
f2b0: 20 7d 0d 0a 20 20 20 20 20 20 23 65 6e 64 72 65   }..      #endre
f2c0: 67 69 6f 6e 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f  gion..  }....  /
f2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
f320: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
f330: 0a 20 20 2f 2f 2f 20 45 78 74 65 6e 64 73 20 53  .  /// Extends S
f340: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 61 6e  QLiteFunction an
f350: 64 20 61 6c 6c 6f 77 73 20 61 6e 20 69 6e 68 65  d allows an inhe
f360: 72 69 74 65 64 20 63 6c 61 73 73 20 74 6f 20 6f  rited class to o
f370: 62 74 61 69 6e 20 74 68 65 20 63 6f 6c 6c 61 74  btain the collat
f380: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 61 73 73  ing sequence ass
f390: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 66  ociated with a f
f3a0: 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 2e 0d 0a 20  unction call... 
f3b0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
f3c0: 0a 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e  .  /// <remarks>
f3d0: 0d 0a 20 20 2f 2f 2f 20 55 73 65 72 2d 64 65 66  ..  /// User-def
f3e0: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 63  ined functions c
f3f0: 61 6e 20 63 61 6c 6c 20 74 68 65 20 47 65 74 43  an call the GetC
f400: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
f410: 28 29 20 6d 65 74 68 6f 64 20 69 6e 20 74 68 69  () method in thi
f420: 73 20 63 6c 61 73 73 20 61 6e 64 20 75 73 65 20  s class and use 
f430: 69 74 20 74 6f 20 63 6f 6d 70 61 72 65 20 73 74  it to compare st
f440: 72 69 6e 67 73 20 61 6e 64 20 63 68 61 72 20 61  rings and char a
f450: 72 72 61 79 73 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f  rrays...  /// </
f460: 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 70 75 62 6c  remarks>..  publ
f470: 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65 46  ic class SQLiteF
f480: 75 6e 63 74 69 6f 6e 45 78 20 3a 20 53 51 4c 69  unctionEx : SQLi
f490: 74 65 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 7b 0d  teFunction..  {.
f4a0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
f4b0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4f 62 74 61  y>..    /// Obta
f4c0: 69 6e 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e  ins the collatin
f4d0: 67 20 73 65 71 75 65 6e 63 65 20 69 6e 20 65 66  g sequence in ef
f4e0: 66 65 63 74 20 66 6f 72 20 74 68 65 20 67 69 76  fect for the giv
f4f0: 65 6e 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20  en function...  
f500: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
f510: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
f520: 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ns></returns>.. 
f530: 20 20 20 70 72 6f 74 65 63 74 65 64 20 43 6f 6c     protected Col
f540: 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 47  lationSequence G
f550: 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65  etCollationSeque
f560: 6e 63 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nce()..    {..  
f570: 20 20 20 20 72 65 74 75 72 6e 20 5f 62 61 73 65      return _base
f580: 2e 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71  .GetCollationSeq
f590: 75 65 6e 63 65 28 74 68 69 73 2c 20 5f 63 6f 6e  uence(this, _con
f5a0: 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  text);..    }...
f5b0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
f5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f610: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
f620: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
f630: 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72  "Pattern" Member
f640: 73 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  s..    private b
f650: 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20  ool disposed;.. 
f660: 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20     private void 
f670: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20  CheckDisposed() 
f680: 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
f690: 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e   {..#if THROW_ON
f6a0: 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20  _DISPOSED..     
f6b0: 20 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29     if (disposed)
f6c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
f6d0: 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69  row new ObjectDi
f6e0: 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28  sposedException(
f6f0: 74 79 70 65 6f 66 28 53 51 4c 69 74 65 46 75 6e  typeof(SQLiteFun
f700: 63 74 69 6f 6e 45 78 29 2e 4e 61 6d 65 29 3b 0d  ctionEx).Name);.
f710: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
f720: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
f730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f780: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
f790: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
f7a0: 2f 2f 2f 20 43 6c 65 61 6e 73 20 75 70 20 72 65  /// Cleans up re
f7b0: 73 6f 75 72 63 65 73 20 28 6e 61 74 69 76 65 20  sources (native 
f7c0: 61 6e 64 20 6d 61 6e 61 67 65 64 29 20 61 73 73  and managed) ass
f7d0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
f7e0: 20 63 75 72 72 65 6e 74 20 69 6e 73 74 61 6e 63   current instanc
f7f0: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
f800: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
f810: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73  <param name="dis
f820: 70 6f 73 69 6e 67 22 3e 0d 0a 20 20 20 20 2f 2f  posing">..    //
f830: 2f 20 5a 65 72 6f 20 77 68 65 6e 20 62 65 69 6e  / Zero when bein
f840: 67 20 64 69 73 70 6f 73 65 64 20 76 69 61 20 67  g disposed via g
f850: 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f  arbage collectio
f860: 6e 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6e 6f  n; otherwise, no
f870: 6e 2d 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f  n-zero...    ///
f880: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70   </param>..    p
f890: 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64  rotected overrid
f8a0: 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  e void Dispose(b
f8b0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
f8c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74      {..        t
f8d0: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
f8e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
f8f0: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
f900: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f910: 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20 28            //if (
f920: 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
f930: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b 0d              //{.
f940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f950: 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f   //    /////////
f960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
f980: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
f990: 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
f9a0: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
f9b0: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
f9c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f           //    /
f9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9f0: 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
fa00: 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20       //}....    
fa10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
fa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa40: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
fa50: 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75      // release u
fa60: 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63  nmanaged resourc
fa70: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
fa80: 20 20 20 20 20 20 20 20 20 20 20 20 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 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
fac0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
fad0: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
fae0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
faf0: 20 20 20 20 20 20 62 61 73 65 2e 44 69 73 70 6f        base.Dispo
fb00: 73 65 28 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a  se(disposing);..
fb10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
fb20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
fb30: 20 4e 4f 54 45 3a 20 45 76 65 72 79 74 68 69 6e   NOTE: Everythin
fb40: 67 20 73 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c  g should be full
fb50: 79 20 64 69 73 70 6f 73 65 64 20 61 74 20 74 68  y disposed at th
fb60: 69 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20  is point...     
fb70: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
fb80: 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20         disposed 
fb90: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
fba0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23   }..    }..    #
fbb0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 7d 0d 0a  endregion..  }..
fbc0: 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79  ..  /// <summary
fbd0: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 74 79 70  >..  /// The typ
fbe0: 65 20 6f 66 20 75 73 65 72 2d 64 65 66 69 6e 65  e of user-define
fbf0: 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 64 65  d function to de
fc00: 63 6c 61 72 65 0d 0a 20 20 2f 2f 2f 20 3c 2f 73  clare..  /// </s
fc10: 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62 6c 69  ummary>..  publi
fc20: 63 20 65 6e 75 6d 20 46 75 6e 63 74 69 6f 6e 54  c enum FunctionT
fc30: 79 70 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f  ype..  {..    //
fc40: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
fc50: 20 2f 2f 2f 20 53 63 61 6c 61 72 20 66 75 6e 63   /// Scalar func
fc60: 74 69 6f 6e 73 20 61 72 65 20 64 65 73 69 67 6e  tions are design
fc70: 65 64 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 20  ed to be called 
fc80: 61 6e 64 20 72 65 74 75 72 6e 20 61 20 72 65 73  and return a res
fc90: 75 6c 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  ult immediately.
fca0: 20 20 45 78 61 6d 70 6c 65 73 20 69 6e 63 6c 75    Examples inclu
fcb0: 64 65 20 41 42 53 28 29 2c 20 55 70 70 65 72 28  de ABS(), Upper(
fcc0: 29 2c 20 4c 6f 77 65 72 28 29 2c 20 65 74 63 2e  ), Lower(), etc.
fcd0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
fce0: 61 72 79 3e 0d 0a 20 20 20 20 53 63 61 6c 61 72  ary>..    Scalar
fcf0: 20 3d 20 30 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c   = 0,..    /// <
fd00: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
fd10: 2f 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  / Aggregate func
fd20: 74 69 6f 6e 73 20 61 72 65 20 64 65 73 69 67 6e  tions are design
fd30: 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65  ed to accumulate
fd40: 20 64 61 74 61 20 75 6e 74 69 6c 20 74 68 65 20   data until the 
fd50: 65 6e 64 20 6f 66 20 61 20 63 61 6c 6c 20 61 6e  end of a call an
fd60: 64 20 74 68 65 6e 20 72 65 74 75 72 6e 20 61 20  d then return a 
fd70: 72 65 73 75 6c 74 20 67 6c 65 61 6e 65 64 20 66  result gleaned f
fd80: 72 6f 6d 20 74 68 65 20 61 63 63 75 6d 75 6c 61  rom the accumula
fd90: 74 65 64 20 64 61 74 61 2e 0d 0a 20 20 20 20 2f  ted data...    /
fda0: 2f 2f 20 45 78 61 6d 70 6c 65 73 20 69 6e 63 6c  // Examples incl
fdb0: 75 64 65 20 53 55 4d 28 29 2c 20 43 4f 55 4e 54  ude SUM(), COUNT
fdc0: 28 29 2c 20 41 56 47 28 29 2c 20 65 74 63 2e 0d  (), AVG(), etc..
fdd0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
fde0: 72 79 3e 0d 0a 20 20 20 20 41 67 67 72 65 67 61  ry>..    Aggrega
fdf0: 74 65 20 3d 20 31 2c 0d 0a 20 20 20 20 2f 2f 2f  te = 1,..    ///
fe00: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
fe10: 2f 2f 2f 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65  /// Collating se
fe20: 71 75 65 6e 63 65 73 20 61 72 65 20 75 73 65 64  quences are used
fe30: 20 74 6f 20 73 6f 72 74 20 74 65 78 74 75 61 6c   to sort textual
fe40: 20 64 61 74 61 20 69 6e 20 61 20 63 75 73 74 6f   data in a custo
fe50: 6d 20 6d 61 6e 6e 65 72 2c 20 61 6e 64 20 61 70  m manner, and ap
fe60: 70 65 61 72 20 69 6e 20 61 6e 20 4f 52 44 45 52  pear in an ORDER
fe70: 20 42 59 20 63 6c 61 75 73 65 2e 20 20 54 79 70   BY clause.  Typ
fe80: 69 63 61 6c 6c 79 20 74 65 78 74 20 69 6e 20 61  ically text in a
fe90: 6e 20 4f 52 44 45 52 20 42 59 20 69 73 0d 0a 20  n ORDER BY is.. 
fea0: 20 20 20 2f 2f 2f 20 73 6f 72 74 65 64 20 75 73     /// sorted us
feb0: 69 6e 67 20 61 20 73 74 72 61 69 67 68 74 20 63  ing a straight c
fec0: 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65 20  ase-insensitive 
fed0: 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74  comparison funct
fee0: 69 6f 6e 2e 20 20 43 75 73 74 6f 6d 20 63 6f 6c  ion.  Custom col
fef0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
ff00: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
ff10: 61 6c 74 65 72 20 74 68 65 20 62 65 68 61 76 69  alter the behavi
ff20: 6f 72 20 6f 66 20 74 65 78 74 20 73 6f 72 74 69  or of text sorti
ff30: 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20 61  ng..    /// in a
ff40: 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 6d 61   user-defined ma
ff50: 6e 6e 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  nner...    /// <
ff60: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 43  /summary>..    C
ff70: 6f 6c 6c 61 74 69 6f 6e 20 3d 20 32 2c 0d 0a 20  ollation = 2,.. 
ff80: 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d   }....  /// <sum
ff90: 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 41 6e 20  mary>..  /// An 
ffa0: 69 6e 74 65 72 6e 61 6c 20 63 61 6c 6c 62 61 63  internal callbac
ffb0: 6b 20 64 65 6c 65 67 61 74 65 20 64 65 63 6c 61  k delegate decla
ffc0: 72 61 74 69 6f 6e 2e 0d 0a 20 20 2f 2f 2f 20 3c  ration...  /// <
ffd0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f  /summary>..  ///
ffe0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f   <param name="co
fff0: 6e 74 65 78 74 22 3e 52 61 77 20 6e 61 74 69 76  ntext">Raw nativ
10000 65 20 63 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65  e context pointe
10010 72 20 66 6f 72 20 74 68 65 20 75 73 65 72 20 66  r for the user f
10020 75 6e 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e  unction.</param>
10030 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e  ..  /// <param n
10040 61 6d 65 3d 22 61 72 67 63 22 3e 54 6f 74 61 6c  ame="argc">Total
10050 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
10060 65 6e 74 73 20 74 6f 20 74 68 65 20 75 73 65 72  ents to the user
10070 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 61 72 61   function.</para
10080 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  m>..  /// <param
10090 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e 52 61 77   name="argv">Raw
100a0 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
100b0 74 6f 20 74 68 65 20 61 72 72 61 79 20 6f 66 20  to the array of 
100c0 72 61 77 20 6e 61 74 69 76 65 20 61 72 67 75 6d  raw native argum
100d0 65 6e 74 20 70 6f 69 6e 74 65 72 73 2e 3c 2f 70  ent pointers.</p
100e0 61 72 61 6d 3e 0d 0a 23 69 66 20 21 50 4c 41 54  aram>..#if !PLAT
100f0 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
10100 45 57 4f 52 4b 0d 0a 20 20 5b 55 6e 6d 61 6e 61  EWORK..  [Unmana
10110 67 65 64 46 75 6e 63 74 69 6f 6e 50 6f 69 6e 74  gedFunctionPoint
10120 65 72 28 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e  er(CallingConven
10130 74 69 6f 6e 2e 43 64 65 63 6c 29 5d 0d 0a 23 65  tion.Cdecl)]..#e
10140 6e 64 69 66 0d 0a 20 20 70 75 62 6c 69 63 20 64  ndif..  public d
10150 65 6c 65 67 61 74 65 20 76 6f 69 64 20 53 51 4c  elegate void SQL
10160 69 74 65 43 61 6c 6c 62 61 63 6b 28 49 6e 74 50  iteCallback(IntP
10170 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20  tr context, int 
10180 61 72 67 63 2c 20 49 6e 74 50 74 72 20 61 72 67  argc, IntPtr arg
10190 76 29 3b 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  v);..  /// <summ
101a0 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 41 6e 20 69  ary>..  /// An i
101b0 6e 74 65 72 6e 61 6c 20 66 69 6e 61 6c 20 63 61  nternal final ca
101c0 6c 6c 62 61 63 6b 20 64 65 6c 65 67 61 74 65 20  llback delegate 
101d0 64 65 63 6c 61 72 61 74 69 6f 6e 2e 0d 0a 20 20  declaration...  
101e0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
101f0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
10200 65 3d 22 63 6f 6e 74 65 78 74 22 3e 52 61 77 20  e="context">Raw 
10210 63 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20  context pointer 
10220 66 6f 72 20 74 68 65 20 75 73 65 72 20 66 75 6e  for the user fun
10230 63 74 69 6f 6e 3c 2f 70 61 72 61 6d 3e 0d 0a 23  ction</param>..#
10240 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
10250 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
10260 20 5b 55 6e 6d 61 6e 61 67 65 64 46 75 6e 63 74   [UnmanagedFunct
10270 69 6f 6e 50 6f 69 6e 74 65 72 28 43 61 6c 6c 69  ionPointer(Calli
10280 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 2e 43 64 65  ngConvention.Cde
10290 63 6c 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  cl)]..#endif..  
102a0 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74  internal delegat
102b0 65 20 76 6f 69 64 20 53 51 4c 69 74 65 46 69 6e  e void SQLiteFin
102c0 61 6c 43 61 6c 6c 62 61 63 6b 28 49 6e 74 50 74  alCallback(IntPt
102d0 72 20 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 2f  r context);..  /
102e0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
102f0 2f 2f 2f 20 49 6e 74 65 72 6e 61 6c 20 63 61 6c  /// Internal cal
10300 6c 62 61 63 6b 20 64 65 6c 65 67 61 74 65 20 66  lback delegate f
10310 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  or implementing 
10320 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
10330 63 65 73 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ces..  /// </sum
10340 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61  mary>..  /// <pa
10350 72 61 6d 20 6e 61 6d 65 3d 22 70 75 73 65 72 22  ram name="puser"
10360 3e 4e 6f 74 20 75 73 65 64 3c 2f 70 61 72 61 6d  >Not used</param
10370 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  >..  /// <param 
10380 6e 61 6d 65 3d 22 6c 65 6e 31 22 3e 4c 65 6e 67  name="len1">Leng
10390 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  th of the string
103a0 20 70 76 31 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20   pv1</param>..  
103b0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
103c0 22 70 76 31 22 3e 50 6f 69 6e 74 65 72 20 74 6f  "pv1">Pointer to
103d0 20 74 68 65 20 66 69 72 73 74 20 73 74 72 69 6e   the first strin
103e0 67 20 74 6f 20 63 6f 6d 70 61 72 65 3c 2f 70 61  g to compare</pa
103f0 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72  ram>..  /// <par
10400 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 32 22 3e 4c  am name="len2">L
10410 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
10420 69 6e 67 20 70 76 32 3c 2f 70 61 72 61 6d 3e 0d  ing pv2</param>.
10430 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61  .  /// <param na
10440 6d 65 3d 22 70 76 32 22 3e 50 6f 69 6e 74 65 72  me="pv2">Pointer
10450 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 20 73   to the second s
10460 74 72 69 6e 67 20 74 6f 20 63 6f 6d 70 61 72 65  tring to compare
10470 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20  </param>..  /// 
10480 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73  <returns>Returns
10490 20 2d 31 20 69 66 20 74 68 65 20 66 69 72 73 74   -1 if the first
104a0 20 73 74 72 69 6e 67 20 69 73 20 6c 65 73 73 20   string is less 
104b0 74 68 61 6e 20 74 68 65 20 73 65 63 6f 6e 64 2e  than the second.
104c0 20 20 30 20 69 66 20 74 68 65 79 20 61 72 65 20    0 if they are 
104d0 65 71 75 61 6c 2c 20 6f 72 20 31 20 69 66 20 74  equal, or 1 if t
104e0 68 65 20 66 69 72 73 74 20 73 74 72 69 6e 67 20  he first string 
104f0 69 73 20 67 72 65 61 74 65 72 0d 0a 20 20 2f 2f  is greater..  //
10500 2f 20 74 68 61 6e 20 74 68 65 20 73 65 63 6f 6e  / than the secon
10510 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 23 69  d.</returns>..#i
10520 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
10530 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
10540 5b 55 6e 6d 61 6e 61 67 65 64 46 75 6e 63 74 69  [UnmanagedFuncti
10550 6f 6e 50 6f 69 6e 74 65 72 28 43 61 6c 6c 69 6e  onPointer(Callin
10560 67 43 6f 6e 76 65 6e 74 69 6f 6e 2e 43 64 65 63  gConvention.Cdec
10570 6c 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 69  l)]..#endif..  i
10580 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65  nternal delegate
10590 20 69 6e 74 20 53 51 4c 69 74 65 43 6f 6c 6c 61   int SQLiteColla
105a0 74 69 6f 6e 28 49 6e 74 50 74 72 20 70 75 73 65  tion(IntPtr puse
105b0 72 2c 20 69 6e 74 20 6c 65 6e 31 2c 20 49 6e 74  r, int len1, Int
105c0 50 74 72 20 70 76 31 2c 20 69 6e 74 20 6c 65 6e  Ptr pv1, int len
105d0 32 2c 20 49 6e 74 50 74 72 20 70 76 32 29 3b 0d  2, IntPtr pv2);.
105e0 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  ...  /// <summar
105f0 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 74 79  y>..  /// The ty
10600 70 65 20 6f 66 20 63 6f 6c 6c 61 74 69 6e 67 20  pe of collating 
10610 73 65 71 75 65 6e 63 65 0d 0a 20 20 2f 2f 2f 20  sequence..  /// 
10620 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75  </summary>..  pu
10630 62 6c 69 63 20 65 6e 75 6d 20 43 6f 6c 6c 61 74  blic enum Collat
10640 69 6f 6e 54 79 70 65 45 6e 75 6d 0d 0a 20 20 7b  ionTypeEnum..  {
10650 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
10660 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
10670 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59   built-in BINARY
10680 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
10690 6e 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  nce..    /// </s
106a0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 42 69 6e  ummary>..    Bin
106b0 61 72 79 20 3d 20 31 2c 0d 0a 20 20 20 20 2f 2f  ary = 1,..    //
106c0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
106d0 20 2f 2f 2f 20 54 68 65 20 62 75 69 6c 74 2d 69   /// The built-i
106e0 6e 20 4e 4f 43 41 53 45 20 63 6f 6c 6c 61 74 69  n NOCASE collati
106f0 6e 67 20 73 65 71 75 65 6e 63 65 0d 0a 20 20 20  ng sequence..   
10700 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10710 0a 20 20 20 20 4e 6f 43 61 73 65 20 3d 20 32 2c  .    NoCase = 2,
10720 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
10730 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
10740 20 62 75 69 6c 74 2d 69 6e 20 52 45 56 45 52 53   built-in REVERS
10750 45 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  E collating sequ
10760 65 6e 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ence..    /// </
10770 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 52 65  summary>..    Re
10780 76 65 72 73 65 20 3d 20 33 2c 0d 0a 20 20 20 20  verse = 3,..    
10790 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
107a0 20 20 20 2f 2f 2f 20 41 20 63 75 73 74 6f 6d 20     /// A custom 
107b0 75 73 65 72 2d 64 65 66 69 6e 65 64 20 63 6f 6c  user-defined col
107c0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 0d  lating sequence.
107d0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
107e0 72 79 3e 0d 0a 20 20 20 20 43 75 73 74 6f 6d 20  ry>..    Custom 
107f0 3d 20 30 2c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f  = 0,..  }....  /
10800 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
10810 2f 2f 2f 20 54 68 65 20 65 6e 63 6f 64 69 6e 67  /// The encoding
10820 20 74 79 70 65 20 74 68 65 20 63 6f 6c 6c 61 74   type the collat
10830 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65  ion sequence use
10840 73 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  s..  /// </summa
10850 72 79 3e 0d 0a 20 20 70 75 62 6c 69 63 20 65 6e  ry>..  public en
10860 75 6d 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f  um CollationEnco
10870 64 69 6e 67 45 6e 75 6d 0d 0a 20 20 7b 0d 0a 20  dingEnum..  {.. 
10880 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
10890 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f  ..    /// The co
108a0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
108b0 20 69 73 20 55 54 46 38 0d 0a 20 20 20 20 2f 2f   is UTF8..    //
108c0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
108d0 20 20 55 54 46 38 20 3d 20 31 2c 0d 0a 20 20 20    UTF8 = 1,..   
108e0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
108f0 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6c 6c      /// The coll
10900 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69  ation sequence i
10910 73 20 55 54 46 31 36 20 6c 69 74 74 6c 65 2d 65  s UTF16 little-e
10920 6e 64 69 61 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ndian..    /// <
10930 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 55  /summary>..    U
10940 54 46 31 36 4c 45 20 3d 20 32 2c 0d 0a 20 20 20  TF16LE = 2,..   
10950 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
10960 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6c 6c      /// The coll
10970 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69  ation sequence i
10980 73 20 55 54 46 31 36 20 62 69 67 2d 65 6e 64 69  s UTF16 big-endi
10990 61 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  an..    /// </su
109a0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 55 54 46 31  mmary>..    UTF1
109b0 36 42 45 20 3d 20 33 2c 0d 0a 20 20 7d 0d 0a 0d  6BE = 3,..  }...
109c0 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e  .  /// <summary>
109d0 0d 0a 20 20 2f 2f 2f 20 41 20 73 74 72 75 63 74  ..  /// A struct
109e0 20 64 65 73 63 72 69 62 69 6e 67 20 74 68 65 20   describing the 
109f0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
10a00 63 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73  ce a function is
10a10 20 65 78 65 63 75 74 69 6e 67 20 69 6e 0d 0a 20   executing in.. 
10a20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10a30 0a 20 20 70 75 62 6c 69 63 20 73 74 72 75 63 74  .  public struct
10a40 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   CollationSequen
10a50 63 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f  ce..  {..    ///
10a60 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
10a70 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  /// The name of 
10a80 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the collating se
10a90 71 75 65 6e 63 65 0d 0a 20 20 20 20 2f 2f 2f 20  quence..    /// 
10aa0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
10ab0 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4e 61  public string Na
10ac0 6d 65 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  me;..    /// <su
10ad0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
10ae0 54 68 65 20 74 79 70 65 20 6f 66 20 63 6f 6c 6c  The type of coll
10af0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 0d 0a  ating sequence..
10b00 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
10b10 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 43  y>..    public C
10b20 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d  ollationTypeEnum
10b30 20 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f   Type;....    //
10b40 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
10b50 20 2f 2f 2f 20 54 68 65 20 74 65 78 74 20 65 6e   /// The text en
10b60 63 6f 64 69 6e 67 20 6f 66 20 74 68 65 20 63 6f  coding of the co
10b70 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
10b80 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
10b90 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
10ba0 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69   CollationEncodi
10bb0 6e 67 45 6e 75 6d 20 45 6e 63 6f 64 69 6e 67 3b  ngEnum Encoding;
10bc0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
10bd0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
10be0 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 20 66 75  ontext of the fu
10bf0 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 65 71 75  nction that requ
10c00 65 73 74 65 64 20 74 68 65 20 63 6f 6c 6c 61 74  ested the collat
10c10 69 6e 67 20 73 65 71 75 65 6e 63 65 0d 0a 20 20  ing sequence..  
10c20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
10c30 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53  ..    internal S
10c40 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 5f 66  QLiteFunction _f
10c50 75 6e 63 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  unc;....    /// 
10c60 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
10c70 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 62 61 73  // Calls the bas
10c80 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
10c90 65 6e 63 65 20 74 6f 20 63 6f 6d 70 61 72 65 20  ence to compare 
10ca0 74 77 6f 20 73 74 72 69 6e 67 73 0d 0a 20 20 20  two strings..   
10cb0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10cc0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
10cd0 6e 61 6d 65 3d 22 73 31 22 3e 54 68 65 20 66 69  name="s1">The fi
10ce0 72 73 74 20 73 74 72 69 6e 67 20 74 6f 20 63 6f  rst string to co
10cf0 6d 70 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20  mpare</param>.. 
10d00 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
10d10 6d 65 3d 22 73 32 22 3e 54 68 65 20 73 65 63 6f  me="s2">The seco
10d20 6e 64 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6d  nd string to com
10d30 70 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  pare</param>..  
10d40 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 2d    /// <returns>-
10d50 31 20 69 66 20 73 31 20 69 73 20 6c 65 73 73 20  1 if s1 is less 
10d60 74 68 61 6e 20 73 32 2c 20 30 20 69 66 20 73 31  than s2, 0 if s1
10d70 20 69 73 20 65 71 75 61 6c 20 74 6f 20 73 32 2c   is equal to s2,
10d80 20 61 6e 64 20 31 20 69 66 20 73 31 20 69 73 20   and 1 if s1 is 
10d90 67 72 65 61 74 65 72 20 74 68 61 6e 20 73 32 3c  greater than s2<
10da0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
10db0 75 62 6c 69 63 20 69 6e 74 20 43 6f 6d 70 61 72  ublic int Compar
10dc0 65 28 73 74 72 69 6e 67 20 73 31 2c 20 73 74 72  e(string s1, str
10dd0 69 6e 67 20 73 32 29 0d 0a 20 20 20 20 7b 0d 0a  ing s2)..    {..
10de0 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 75        return _fu
10df0 6e 63 2e 5f 62 61 73 65 2e 43 6f 6e 74 65 78 74  nc._base.Context
10e00 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 45  CollateCompare(E
10e10 6e 63 6f 64 69 6e 67 2c 20 5f 66 75 6e 63 2e 5f  ncoding, _func._
10e20 63 6f 6e 74 65 78 74 2c 20 73 31 2c 20 73 32 29  context, s1, s2)
10e30 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
10e40 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
10e50 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65     /// Calls the
10e60 20 62 61 73 65 20 63 6f 6c 6c 61 74 69 6e 67 20   base collating 
10e70 73 65 71 75 65 6e 63 65 20 74 6f 20 63 6f 6d 70  sequence to comp
10e80 61 72 65 20 74 77 6f 20 63 68 61 72 61 63 74 65  are two characte
10e90 72 20 61 72 72 61 79 73 0d 0a 20 20 20 20 2f 2f  r arrays..    //
10ea0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
10eb0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
10ec0 65 3d 22 63 31 22 3e 54 68 65 20 66 69 72 73 74  e="c1">The first
10ed0 20 61 72 72 61 79 20 74 6f 20 63 6f 6d 70 61 72   array to compar
10ee0 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  e</param>..    /
10ef0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
10f00 63 32 22 3e 54 68 65 20 73 65 63 6f 6e 64 20 61  c2">The second a
10f10 72 72 61 79 20 74 6f 20 63 6f 6d 70 61 72 65 3c  rray to compare<
10f20 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
10f30 20 3c 72 65 74 75 72 6e 73 3e 2d 31 20 69 66 20   <returns>-1 if 
10f40 63 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  c1 is less than 
10f50 63 32 2c 20 30 20 69 66 20 63 31 20 69 73 20 65  c2, 0 if c1 is e
10f60 71 75 61 6c 20 74 6f 20 63 32 2c 20 61 6e 64 20  qual to c2, and 
10f70 31 20 69 66 20 63 31 20 69 73 20 67 72 65 61 74  1 if c1 is great
10f80 65 72 20 74 68 61 6e 20 63 32 3c 2f 72 65 74 75  er than c2</retu
10f90 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
10fa0 20 69 6e 74 20 43 6f 6d 70 61 72 65 28 63 68 61   int Compare(cha
10fb0 72 5b 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20 63  r[] c1, char[] c
10fc0 32 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  2)..    {..     
10fd0 20 72 65 74 75 72 6e 20 5f 66 75 6e 63 2e 5f 62   return _func._b
10fe0 61 73 65 2e 43 6f 6e 74 65 78 74 43 6f 6c 6c 61  ase.ContextColla
10ff0 74 65 43 6f 6d 70 61 72 65 28 45 6e 63 6f 64 69  teCompare(Encodi
11000 6e 67 2c 20 5f 66 75 6e 63 2e 5f 63 6f 6e 74 65  ng, _func._conte
11010 78 74 2c 20 63 31 2c 20 63 32 29 3b 0d 0a 20 20  xt, c1, c2);..  
11020 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a             }..  }..}..