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 6f 6e 20 73 65 71 75 65 6e 63 65 73 0d 0a 20 ion 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 6c 69 / This static li
0d00: 73 74 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 st contains all
0d10: 74 68 65 20 75 73 65 72 2d 64 65 66 69 6e 65 64 the user-defined
0d20: 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 63 6c 61 functions decla
0d30: 72 65 64 20 75 73 69 6e 67 20 74 68 65 20 70 72 red using the pr
0d40: 6f 70 65 72 20 61 74 74 72 69 62 75 74 65 73 2e oper attributes.
0d50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d .. /// </summ
0d60: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 ary>.. privat
0d70: 65 20 73 74 61 74 69 63 20 4c 69 73 74 3c 53 51 e static List<SQ
0d80: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 LiteFunctionAttr
0d90: 69 62 75 74 65 3e 20 5f 72 65 67 69 73 74 65 72 ibute> _register
0da0: 65 64 46 75 6e 63 74 69 6f 6e 73 3b 0d 0a 0d 0a edFunctions;....
0db0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 /// <summary
0dc0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e 74 65 72 >.. /// Inter
0dd0: 6e 61 6c 20 63 6f 6e 73 74 72 75 63 74 6f 72 2c nal constructor,
0de0: 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68 65 initializes the
0df0: 20 66 75 6e 63 74 69 6f 6e 27 73 20 69 6e 74 65 function's inte
0e00: 72 6e 61 6c 20 76 61 72 69 61 62 6c 65 73 2e 0d rnal variables..
0e10: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 . /// </summa
0e20: 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 ry>.. protect
0e30: 65 64 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f ed SQLiteFunctio
0e40: 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 n().. {..
0e50: 20 20 5f 63 6f 6e 74 65 78 74 44 61 74 61 4c 69 _contextDataLi
0e60: 73 74 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e st = new Diction
0e70: 61 72 79 3c 49 6e 74 50 74 72 2c 20 41 67 67 72 ary<IntPtr, Aggr
0e80: 65 67 61 74 65 44 61 74 61 3e 28 29 3b 0d 0a 20 egateData>();..
0e90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 }.... ///
0ea0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f <summary>.. /
0eb0: 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e // Constructs an
0ec0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 instance of thi
0ed0: 73 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74 68 s class using th
0ee0: 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 e specified data
0ef0: 2d 74 79 70 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 -type.. /// c
0f00: 6f 6e 76 65 72 73 69 6f 6e 20 70 61 72 61 6d 65 onversion parame
0f10: 74 65 72 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c ters... /// <
0f20: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f /summary>.. /
0f30: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 // <param name="
0f40: 66 6f 72 6d 61 74 22 3e 0d 0a 20 20 20 20 2f 2f format">.. //
0f50: 2f 20 54 68 65 20 44 61 74 65 54 69 6d 65 20 66 / The DateTime f
0f60: 6f 72 6d 61 74 20 74 6f 20 62 65 20 75 73 65 64 ormat to be used
0f70: 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67 when converting
0f80: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 73 20 74 string values t
0f90: 6f 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 44 61 74 o a.. /// Dat
0fa0: 65 54 69 6d 65 20 61 6e 64 20 62 69 6e 64 69 6e eTime and bindin
0fb0: 67 20 44 61 74 65 54 69 6d 65 20 70 61 72 61 6d g DateTime param
0fc0: 65 74 65 72 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 eters... ///
0fd0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f </param>.. //
0fe0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6b / <param name="k
0ff0: 69 6e 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 ind">.. /// T
1000: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 61 he <see cref="Da
1010: 74 65 54 69 6d 65 4b 69 6e 64 22 20 2f 3e 20 74 teTimeKind" /> t
1020: 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63 o be used when c
1030: 72 65 61 74 69 6e 67 20 44 61 74 65 54 69 6d 65 reating DateTime
1040: 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 .. /// values
1050: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 ... /// </par
1060: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 am>.. /// <pa
1070: 72 61 6d 20 6e 61 6d 65 3d 22 66 6f 72 6d 61 74 ram name="format
1080: 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20 20 2f 2f String">.. //
1090: 2f 20 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72 / The format str
10a0: 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20 77 ing to be used w
10b0: 68 65 6e 20 70 61 72 73 69 6e 67 20 61 6e 64 20 hen parsing and
10c0: 66 6f 72 6d 61 74 74 69 6e 67 20 44 61 74 65 54 formatting DateT
10d0: 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c ime.. /// val
10e0: 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f ues... /// </
10f0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 param>.. ///
1100: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 75 74 66 <param name="utf
1110: 31 36 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 16">.. /// No
1120: 6e 2d 7a 65 72 6f 20 74 6f 20 63 72 65 61 74 65 n-zero to create
1130: 20 61 20 55 54 46 2d 31 36 20 64 61 74 61 2d 74 a UTF-16 data-t
1140: 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 63 ype conversion c
1150: 6f 6e 74 65 78 74 3b 20 6f 74 68 65 72 77 69 73 ontext; otherwis
1160: 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 61 20 55 54 e,.. /// a UT
1170: 46 2d 38 20 64 61 74 61 2d 74 79 70 65 20 63 6f F-8 data-type co
1180: 6e 76 65 72 73 69 6f 6e 20 63 6f 6e 74 65 78 74 nversion context
1190: 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74 65 64 will be created
11a0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 ... /// </par
11b0: 61 6d 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 am>.. protect
11c0: 65 64 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f ed SQLiteFunctio
11d0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 n(.. SQLi
11e0: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66 6f teDateFormats fo
11f0: 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 44 rmat,.. D
1200: 61 74 65 54 69 6d 65 4b 69 6e 64 20 6b 69 6e 64 ateTimeKind kind
1210: 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e ,.. strin
1220: 67 20 66 6f 72 6d 61 74 53 74 72 69 6e 67 2c 0d g formatString,.
1230: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 75 74 . bool ut
1240: 66 31 36 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a f16.. )..
1250: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 29 : this()
1260: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 .. {..
1270: 20 69 66 20 28 75 74 66 31 36 29 0d 0a 20 20 20 if (utf16)..
1280: 20 20 20 20 20 20 20 20 20 5f 62 61 73 65 20 3d _base =
1290: 20 6e 65 77 20 53 51 4c 69 74 65 33 5f 55 54 46 new SQLite3_UTF
12a0: 31 36 28 66 6f 72 6d 61 74 2c 20 6b 69 6e 64 2c 16(format, kind,
12b0: 20 66 6f 72 6d 61 74 53 74 72 69 6e 67 2c 20 49 formatString, I
12c0: 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 6e 75 6c 6c ntPtr.Zero, null
12d0: 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 , false);..
12e0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 else..
12f0: 20 20 20 20 20 5f 62 61 73 65 20 3d 20 6e 65 77 _base = new
1300: 20 53 51 4c 69 74 65 33 28 66 6f 72 6d 61 74 2c SQLite3(format,
1310: 20 6b 69 6e 64 2c 20 66 6f 72 6d 61 74 53 74 72 kind, formatStr
1320: 69 6e 67 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f ing, IntPtr.Zero
1330: 2c 20 6e 75 6c 6c 2c 20 66 61 6c 73 65 29 3b 0d , null, false);.
1340: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f . }.... //
1350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
13b0: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 . #region IDi
13c0: 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 sposable Members
13d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 .. /// <summa
13e0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 69 73 ry>.. /// Dis
13f0: 70 6f 73 65 73 20 6f 66 20 61 6e 79 20 61 63 74 poses of any act
1400: 69 76 65 20 63 6f 6e 74 65 78 74 44 61 74 61 20 ive contextData
1410: 76 61 72 69 61 62 6c 65 73 20 74 68 61 74 20 77 variables that w
1420: 65 72 65 20 6e 6f 74 20 61 75 74 6f 6d 61 74 69 ere not automati
1430: 63 61 6c 6c 79 20 63 6c 65 61 6e 65 64 20 75 70 cally cleaned up
1440: 2e 20 20 53 6f 6d 65 74 69 6d 65 73 20 74 68 69 . Sometimes thi
1450: 73 20 63 61 6e 20 68 61 70 70 65 6e 20 69 66 0d s can happen if.
1460: 0a 20 20 20 20 2f 2f 2f 20 73 6f 6d 65 6f 6e 65 . /// someone
1470: 20 63 6c 6f 73 65 73 20 74 68 65 20 63 6f 6e 6e closes the conn
1480: 65 63 74 69 6f 6e 20 77 68 69 6c 65 20 61 20 44 ection while a D
1490: 61 74 61 52 65 61 64 65 72 20 69 73 20 6f 70 65 ataReader is ope
14a0: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 n... /// </su
14b0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c mmary>.. publ
14c0: 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 ic void Dispose(
14d0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 ).. {..
14e0: 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b Dispose(true);
14f0: 0d 0a 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 .. GC.Sup
1500: 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 pressFinalize(th
1510: 69 73 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 is);.. }..
1520: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 #endregion....
1530: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1590: 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f //.... #regio
15a0: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 n IDisposable "P
15b0: 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d attern" Members.
15c0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f . private boo
15d0: 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 l disposed;..
15e0: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 private void Ch
15f0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a eckDisposed() /*
1600: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b throw */.. {
1610: 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 ..#if THROW_ON_D
1620: 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 ISPOSED..
1630: 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a if (disposed)..
1640: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f thro
1650: 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 w new ObjectDisp
1660: 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74 79 osedException(ty
1670: 70 65 6f 66 28 53 51 4c 69 74 65 46 75 6e 63 74 peof(SQLiteFunct
1680: 69 6f 6e 29 2e 4e 61 6d 65 29 3b 0d 0a 23 65 6e ion).Name);..#en
1690: 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 dif.. }....
16a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
16c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
16d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1700: 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 /.... /// <su
1710: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 mmary>.. ///
1720: 50 6c 61 63 65 68 6f 6c 64 65 72 20 66 6f 72 20 Placeholder for
1730: 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 64 a user-defined d
1740: 69 73 70 6f 73 61 6c 20 72 6f 75 74 69 6e 65 0d isposal routine.
1750: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 . /// </summa
1760: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 ry>.. /// <pa
1770: 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73 70 6f 73 ram name="dispos
1780: 69 6e 67 22 3e 54 72 75 65 20 69 66 20 74 68 65 ing">True if the
1790: 20 6f 62 6a 65 63 74 20 69 73 20 62 65 69 6e 67 object is being
17a0: 20 64 69 73 70 6f 73 65 64 20 65 78 70 6c 69 63 disposed explic
17b0: 69 74 6c 79 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 itly</param>..
17c0: 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 protected virt
17d0: 75 61 6c 20 76 6f 69 64 20 44 69 73 70 6f 73 65 ual void Dispose
17e0: 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 (bool disposing)
17f0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 .. {..
1800: 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d if (!disposed).
1810: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 . {..
1820: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 if (disp
1830: 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 osing)..
1840: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
1850: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
1860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 ///////////..
1880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
1890: 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 dispose managed
18a0: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e resources here..
18b0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
18c0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
18d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
18e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
18f0: 20 20 20 20 20 20 20 20 20 20 20 49 44 69 73 70 IDisp
1900: 6f 73 61 62 6c 65 20 64 69 73 70 3b 0d 0a 0d 0a osable disp;....
1910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1920: 66 6f 72 65 61 63 68 20 28 4b 65 79 56 61 6c 75 foreach (KeyValu
1930: 65 50 61 69 72 3c 49 6e 74 50 74 72 2c 20 41 67 ePair<IntPtr, Ag
1940: 67 72 65 67 61 74 65 44 61 74 61 3e 20 6b 76 20 gregateData> kv
1950: 69 6e 20 5f 63 6f 6e 74 65 78 74 44 61 74 61 4c in _contextDataL
1960: 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ist)..
1970: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
1980: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 dis
1990: 70 20 3d 20 6b 76 2e 56 61 6c 75 65 2e 5f 64 61 p = kv.Value._da
19a0: 74 61 20 61 73 20 49 44 69 73 70 6f 73 61 62 6c ta as IDisposabl
19b0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
19c0: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 if (disp
19d0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 != null)..
19e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19f0: 20 20 20 64 69 73 70 2e 44 69 73 70 6f 73 65 28 disp.Dispose(
1a00: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
1a10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
1a20: 20 20 20 20 20 20 20 5f 63 6f 6e 74 65 78 74 44 _contextD
1a30: 61 74 61 4c 69 73 74 2e 43 6c 65 61 72 28 29 3b ataList.Clear();
1a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1a50: 20 20 5f 63 6f 6e 74 65 78 74 44 61 74 61 4c 69 _contextDataLi
1a60: 73 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 st = null;....
1a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 66 _f
1a80: 6c 61 67 73 20 3d 20 53 51 4c 69 74 65 43 6f 6e lags = SQLiteCon
1a90: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 6e nectionFlags.Non
1aa0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 e;....
1ab0: 20 20 20 20 20 20 5f 49 6e 76 6f 6b 65 46 75 6e _InvokeFun
1ac0: 63 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 c = null;..
1ad0: 20 20 20 20 20 20 20 20 20 20 20 5f 53 74 65 70 _Step
1ae0: 46 75 6e 63 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 Func = null;..
1af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 46 _F
1b00: 69 6e 61 6c 46 75 6e 63 20 3d 20 6e 75 6c 6c 3b inalFunc = null;
1b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1b20: 20 20 5f 43 6f 6d 70 61 72 65 46 75 6e 63 20 3d _CompareFunc =
1b30: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 null;..
1b40: 20 20 20 20 20 20 20 20 5f 62 61 73 65 20 3d 20 _base =
1b50: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 null;..
1b60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
1b70: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
1b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 //////////..
1ba0: 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 // relea
1bb0: 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 se unmanaged res
1bc0: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a ources here.....
1bd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
1be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1c00: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
1c10: 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 disposed = tru
1c20: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 e;.. }..
1c30: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 }.. #endre
1c40: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f gion.... ////
1c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1c60: 2f 2f 2f 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 2f 2f 2f 2f 2f 2f 2f ////////////////
1c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
1cb0: 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72 #region Destr
1cc0: 75 63 74 6f 72 0d 0a 20 20 20 20 7e 53 51 4c 69 uctor.. ~SQLi
1cd0: 74 65 46 75 6e 63 74 69 6f 6e 28 29 0d 0a 20 20 teFunction()..
1ce0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 69 73 {.. Dis
1cf0: 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 pose(false);..
1d00: 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 }.. #endreg
1d10: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f ion.... /////
1d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
1d80: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d /// <summary>.
1d90: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 . /// Returns
1da0: 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 a reference to
1db0: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63 the underlying c
1dc0: 6f 6e 6e 65 63 74 69 6f 6e 27 73 20 53 51 4c 69 onnection's SQLi
1dd0: 74 65 43 6f 6e 76 65 72 74 20 63 6c 61 73 73 2c teConvert class,
1de0: 20 77 68 69 63 68 20 63 61 6e 20 62 65 20 75 73 which can be us
1df0: 65 64 20 74 6f 20 63 6f 6e 76 65 72 74 0d 0a 20 ed to convert..
1e00: 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 73 20 61 /// strings a
1e10: 6e 64 20 44 61 74 65 54 69 6d 65 27 73 20 69 6e nd DateTime's in
1e20: 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 to the current c
1e30: 6f 6e 6e 65 63 74 69 6f 6e 27 73 20 65 6e 63 6f onnection's enco
1e40: 64 69 6e 67 20 73 63 68 65 6d 61 2e 0d 0a 20 20 ding schema...
1e50: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e /// </summary>
1e60: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c .. public SQL
1e70: 69 74 65 43 6f 6e 76 65 72 74 20 53 51 4c 69 74 iteConvert SQLit
1e80: 65 43 6f 6e 76 65 72 74 0d 0a 20 20 20 20 7b 0d eConvert.. {.
1e90: 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 . get..
1ea0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 {.. Che
1eb0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 ckDisposed();..
1ec0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 62 return _b
1ed0: 61 73 65 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 ase;.. }..
1ee0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 }.... ///
1ef0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f <summary>.. /
1f00: 2f 2f 20 53 63 61 6c 61 72 20 66 75 6e 63 74 69 // Scalar functi
1f10: 6f 6e 73 20 6f 76 65 72 72 69 64 65 20 74 68 69 ons override thi
1f20: 73 20 6d 65 74 68 6f 64 20 74 6f 20 64 6f 20 74 s method to do t
1f30: 68 65 69 72 20 6d 61 67 69 63 2e 0d 0a 20 20 20 heir magic...
1f40: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d /// </summary>.
1f50: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b . /// <remark
1f60: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 50 61 72 61 s>.. /// Para
1f70: 6d 65 74 65 72 73 20 70 61 73 73 65 64 20 74 6f meters passed to
1f80: 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 functions have
1f90: 6f 6e 6c 79 20 61 6e 20 61 66 66 69 6e 69 74 79 only an affinity
1fa0: 20 66 6f 72 20 61 20 63 65 72 74 61 69 6e 20 64 for a certain d
1fb0: 61 74 61 20 74 79 70 65 2c 20 74 68 65 72 65 20 ata type, there
1fc0: 69 73 20 6e 6f 20 75 6e 64 65 72 6c 79 69 6e 67 is no underlying
1fd0: 20 73 63 68 65 6d 61 20 61 76 61 69 6c 61 62 6c schema availabl
1fe0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 66 6f e.. /// to fo
1ff0: 72 63 65 20 74 68 65 6d 20 69 6e 74 6f 20 61 20 rce them into a
2000: 63 65 72 74 61 69 6e 20 74 79 70 65 2e 20 20 54 certain type. T
2010: 68 65 72 65 66 6f 72 65 20 74 68 65 20 6f 6e 6c herefore the onl
2020: 79 20 74 79 70 65 73 20 79 6f 75 20 77 69 6c 6c y types you will
2030: 20 65 76 65 72 20 73 65 65 20 61 73 20 70 61 72 ever see as par
2040: 61 6d 65 74 65 72 73 20 61 72 65 0d 0a 20 20 20 ameters are..
2050: 20 2f 2f 2f 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 /// DBNull.Valu
2060: 65 2c 20 49 6e 74 36 34 2c 20 44 6f 75 62 6c 65 e, Int64, Double
2070: 2c 20 53 74 72 69 6e 67 20 6f 72 20 62 79 74 65 , String or byte
2080: 5b 5d 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 2f [] array... /
2090: 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 // </remarks>..
20a0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 /// <param na
20b0: 6d 65 3d 22 61 72 67 73 22 3e 54 68 65 20 61 72 me="args">The ar
20c0: 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68 65 20 guments for the
20d0: 63 6f 6d 6d 61 6e 64 20 74 6f 20 70 72 6f 63 65 command to proce
20e0: 73 73 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 ss</param>..
20f0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 59 6f 75 /// <returns>You
2100: 20 6d 61 79 20 72 65 74 75 72 6e 20 6d 6f 73 74 may return most
2110: 20 73 69 6d 70 6c 65 20 74 79 70 65 73 20 61 73 simple types as
2120: 20 61 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2c a return value,
2130: 20 6e 75 6c 6c 20 6f 72 20 44 42 4e 75 6c 6c 2e null or DBNull.
2140: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 Value to return
2150: 6e 75 6c 6c 2c 20 44 61 74 65 54 69 6d 65 2c 20 null, DateTime,
2160: 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 79 6f 75 20 or.. /// you
2170: 6d 61 79 20 72 65 74 75 72 6e 20 61 6e 20 45 78 may return an Ex
2180: 63 65 70 74 69 6f 6e 2d 64 65 72 69 76 65 64 20 ception-derived
2190: 63 6c 61 73 73 20 69 66 20 79 6f 75 20 77 69 73 class if you wis
21a0: 68 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 h to return an e
21b0: 72 72 6f 72 20 74 6f 20 53 51 4c 69 74 65 2e 20 rror to SQLite.
21c0: 20 44 6f 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 Do not actually
21d0: 20 74 68 72 6f 77 20 74 68 65 20 65 72 72 6f 72 throw the error
21e0: 2c 0d 0a 20 20 20 20 2f 2f 2f 20 6a 75 73 74 20 ,.. /// just
21f0: 72 65 74 75 72 6e 20 69 74 21 3c 2f 72 65 74 75 return it!</retu
2200: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 rns>.. public
2210: 20 76 69 72 74 75 61 6c 20 6f 62 6a 65 63 74 20 virtual object
2220: 49 6e 76 6f 6b 65 28 6f 62 6a 65 63 74 5b 5d 20 Invoke(object[]
2230: 61 72 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 args).. {..
2240: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 CheckDispose
2250: 64 28 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 d();.. retu
2260: 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 7d 0d rn null;.. }.
2270: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d ... /// <summ
2280: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 67 ary>.. /// Ag
2290: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e gregate function
22a0: 73 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 s override this
22b0: 6d 65 74 68 6f 64 20 74 6f 20 64 6f 20 74 68 65 method to do the
22c0: 69 72 20 6d 61 67 69 63 2e 0d 0a 20 20 20 20 2f ir magic... /
22d0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 // </summary>..
22e0: 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e /// <remarks>
22f0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 79 70 69 63 61 .. /// Typica
2300: 6c 6c 79 20 79 6f 75 27 6c 6c 20 62 65 20 75 70 lly you'll be up
2310: 64 61 74 69 6e 67 20 77 68 61 74 65 76 65 72 20 dating whatever
2320: 79 6f 75 27 76 65 20 70 6c 61 63 65 64 20 69 6e you've placed in
2330: 20 74 68 65 20 63 6f 6e 74 65 78 74 44 61 74 61 the contextData
2340: 20 66 69 65 6c 64 20 61 6e 64 20 72 65 74 75 72 field and retur
2350: 6e 69 6e 67 20 61 73 20 71 75 69 63 6b 6c 79 20 ning as quickly
2360: 61 73 20 70 6f 73 73 69 62 6c 65 2e 0d 0a 20 20 as possible...
2370: 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e /// </remarks>
2380: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d .. /// <param
2390: 20 6e 61 6d 65 3d 22 61 72 67 73 22 3e 54 68 65 name="args">The
23a0: 20 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 arguments for t
23b0: 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 70 72 he command to pr
23c0: 6f 63 65 73 73 3c 2f 70 61 72 61 6d 3e 0d 0a 20 ocess</param>..
23d0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 /// <param na
23e0: 6d 65 3d 22 73 74 65 70 4e 75 6d 62 65 72 22 3e me="stepNumber">
23f0: 54 68 65 20 31 2d 62 61 73 65 64 20 73 74 65 70 The 1-based step
2400: 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 69 number. This i
2410: 73 20 69 6e 63 72 65 6d 65 6d 74 65 64 20 65 61 s incrememted ea
2420: 63 68 20 74 69 6d 65 20 74 68 65 20 73 74 65 70 ch time the step
2430: 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 method is calle
2440: 64 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 d.</param>..
2450: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d /// <param name=
2460: 22 63 6f 6e 74 65 78 74 44 61 74 61 22 3e 41 20 "contextData">A
2470: 70 6c 61 63 65 68 6f 6c 64 65 72 20 66 6f 72 20 placeholder for
2480: 69 6d 70 6c 65 6d 65 6e 74 65 72 73 20 74 6f 20 implementers to
2490: 73 74 6f 72 65 20 63 6f 6e 74 65 78 74 75 61 6c store contextual
24a0: 20 64 61 74 61 20 70 65 72 74 61 69 6e 69 6e 67 data pertaining
24b0: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 to the current
24c0: 63 6f 6e 74 65 78 74 2e 3c 2f 70 61 72 61 6d 3e context.</param>
24d0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 .. public vir
24e0: 74 75 61 6c 20 76 6f 69 64 20 53 74 65 70 28 6f tual void Step(o
24f0: 62 6a 65 63 74 5b 5d 20 61 72 67 73 2c 20 69 6e bject[] args, in
2500: 74 20 73 74 65 70 4e 75 6d 62 65 72 2c 20 72 65 t stepNumber, re
2510: 66 20 6f 62 6a 65 63 74 20 63 6f 6e 74 65 78 74 f object context
2520: 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 Data).. {..
2530: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 CheckDispose
2540: 64 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 d();.. }....
2550: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e /// <summary>
2560: 0d 0a 20 20 20 20 2f 2f 2f 20 41 67 67 72 65 67 .. /// Aggreg
2570: 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 76 ate functions ov
2580: 65 72 72 69 64 65 20 74 68 69 73 20 6d 65 74 68 erride this meth
2590: 6f 64 20 74 6f 20 66 69 6e 69 73 68 20 74 68 65 od to finish the
25a0: 69 72 20 61 67 67 72 65 67 61 74 65 20 70 72 6f ir aggregate pro
25b0: 63 65 73 73 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f cessing... //
25c0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 / </summary>..
25d0: 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d /// <remarks>.
25e0: 0a 20 20 20 20 2f 2f 2f 20 49 66 20 79 6f 75 20 . /// If you
25f0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 79 6f 75 72 implemented your
2600: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 aggregate funct
2610: 69 6f 6e 20 70 72 6f 70 65 72 6c 79 2c 0d 0a 20 ion properly,..
2620: 20 20 20 2f 2f 2f 20 79 6f 75 27 76 65 20 62 65 /// you've be
2630: 65 6e 20 72 65 63 6f 72 64 69 6e 67 20 61 6e 64 en recording and
2640: 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f keeping track o
2650: 66 20 79 6f 75 72 20 64 61 74 61 20 69 6e 20 74 f your data in t
2660: 68 65 20 63 6f 6e 74 65 78 74 44 61 74 61 20 6f he contextData o
2670: 62 6a 65 63 74 20 70 72 6f 76 69 64 65 64 2c 20 bject provided,
2680: 61 6e 64 20 6e 6f 77 20 61 74 20 74 68 69 73 20 and now at this
2690: 73 74 61 67 65 20 79 6f 75 20 73 68 6f 75 6c 64 stage you should
26a0: 20 68 61 76 65 0d 0a 20 20 20 20 2f 2f 2f 20 61 have.. /// a
26b0: 6c 6c 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 ll the informati
26c0: 6f 6e 20 79 6f 75 20 6e 65 65 64 20 69 6e 20 74 on you need in t
26d0: 68 65 72 65 20 74 6f 20 66 69 67 75 72 65 20 6f here to figure o
26e0: 75 74 20 77 68 61 74 20 74 6f 20 72 65 74 75 72 ut what to retur
26f0: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 4f 54 45 n... /// NOTE
2700: 3a 20 20 49 74 20 69 73 20 70 6f 73 73 69 62 6c : It is possibl
2710: 65 20 74 6f 20 61 72 72 69 76 65 20 68 65 72 65 e to arrive here
2720: 20 77 69 74 68 6f 75 74 20 72 65 63 65 69 76 69 without receivi
2730: 6e 67 20 61 20 70 72 65 76 69 6f 75 73 20 63 61 ng a previous ca
2740: 6c 6c 20 74 6f 20 53 74 65 70 28 29 2c 20 69 6e ll to Step(), in
2750: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 which case the
2760: 63 6f 6e 74 65 78 74 44 61 74 61 20 77 69 6c 6c contextData will
2770: 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20 6e 75 6c .. /// be nul
2780: 6c 2e 20 20 54 68 69 73 20 63 61 6e 20 68 61 70 l. This can hap
2790: 70 65 6e 20 77 68 65 6e 20 6e 6f 20 72 6f 77 73 pen when no rows
27a0: 20 77 65 72 65 20 72 65 74 75 72 6e 65 64 2e 20 were returned.
27b0: 20 59 6f 75 20 63 61 6e 20 65 69 74 68 65 72 20 You can either
27c0: 72 65 74 75 72 6e 20 6e 75 6c 6c 2c 20 6f 72 20 return null, or
27d0: 30 20 6f 72 20 73 6f 6d 65 20 6f 74 68 65 72 20 0 or some other
27e0: 63 75 73 74 6f 6d 20 72 65 74 75 72 6e 20 76 61 custom return va
27f0: 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 66 20 lue.. /// if
2800: 74 68 61 74 20 69 73 20 74 68 65 20 63 61 73 65 that is the case
2810: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d ... /// </rem
2820: 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c arks>.. /// <
2830: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 param name="cont
2840: 65 78 74 44 61 74 61 22 3e 59 6f 75 72 20 6f 77 extData">Your ow
2850: 6e 20 61 73 73 69 67 6e 65 64 20 63 6f 6e 74 65 n assigned conte
2860: 78 74 44 61 74 61 2c 20 70 72 6f 76 69 64 65 64 xtData, provided
2870: 20 66 6f 72 20 79 6f 75 20 73 6f 20 79 6f 75 20 for you so you
2880: 63 61 6e 20 72 65 74 75 72 6e 20 79 6f 75 72 20 can return your
2890: 66 69 6e 61 6c 20 72 65 73 75 6c 74 73 2e 3c 2f final results.</
28a0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 param>.. ///
28b0: 3c 72 65 74 75 72 6e 73 3e 59 6f 75 20 6d 61 79 <returns>You may
28c0: 20 72 65 74 75 72 6e 20 6d 6f 73 74 20 73 69 6d return most sim
28d0: 70 6c 65 20 74 79 70 65 73 20 61 73 20 61 20 72 ple types as a r
28e0: 65 74 75 72 6e 20 76 61 6c 75 65 2c 20 6e 75 6c eturn value, nul
28f0: 6c 20 6f 72 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 l or DBNull.Valu
2900: 65 20 74 6f 20 72 65 74 75 72 6e 20 6e 75 6c 6c e to return null
2910: 2c 20 44 61 74 65 54 69 6d 65 2c 20 6f 72 0d 0a , DateTime, or..
2920: 20 20 20 20 2f 2f 2f 20 79 6f 75 20 6d 61 79 20 /// you may
2930: 72 65 74 75 72 6e 20 61 6e 20 45 78 63 65 70 74 return an Except
2940: 69 6f 6e 2d 64 65 72 69 76 65 64 20 63 6c 61 73 ion-derived clas
2950: 73 20 69 66 20 79 6f 75 20 77 69 73 68 20 74 6f s if you wish to
2960: 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 return an error
2970: 20 74 6f 20 53 51 4c 69 74 65 2e 20 20 44 6f 20 to SQLite. Do
2980: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 74 68 72 not actually thr
2990: 6f 77 20 74 68 65 20 65 72 72 6f 72 2c 0d 0a 20 ow the error,..
29a0: 20 20 20 2f 2f 2f 20 6a 75 73 74 20 72 65 74 75 /// just retu
29b0: 72 6e 20 69 74 21 0d 0a 20 20 20 20 2f 2f 2f 20 rn it!.. ///
29c0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 </returns>..
29d0: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 6f public virtual o
29e0: 62 6a 65 63 74 20 46 69 6e 61 6c 28 6f 62 6a 65 bject Final(obje
29f0: 63 74 20 63 6f 6e 74 65 78 74 44 61 74 61 29 0d ct contextData).
2a00: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 . {.. Ch
2a10: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a eckDisposed();..
2a20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c return nul
2a30: 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 l;.. }....
2a40: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a /// <summary>..
2a50: 20 20 20 20 2f 2f 2f 20 55 73 65 72 2d 64 65 66 /// User-def
2a60: 69 6e 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 ined collation s
2a70: 65 71 75 65 6e 63 65 73 20 6f 76 65 72 72 69 64 equences overrid
2a80: 65 20 74 68 69 73 20 6d 65 74 68 6f 64 20 74 6f e this method to
2a90: 20 70 72 6f 76 69 64 65 20 61 20 63 75 73 74 6f provide a custo
2aa0: 6d 20 73 74 72 69 6e 67 20 73 6f 72 74 69 6e 67 m string sorting
2ab0: 20 61 6c 67 6f 72 69 74 68 6d 2e 0d 0a 20 20 20 algorithm...
2ac0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d /// </summary>.
2ad0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 . /// <param
2ae0: 6e 61 6d 65 3d 22 70 61 72 61 6d 31 22 3e 54 68 name="param1">Th
2af0: 65 20 66 69 72 73 74 20 73 74 72 69 6e 67 20 74 e first string t
2b00: 6f 20 63 6f 6d 70 61 72 65 3c 2f 70 61 72 61 6d o compare</param
2b10: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 >.. /// <para
2b20: 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d 32 22 3e m name="param2">
2b30: 54 68 65 20 73 65 63 6f 6e 64 20 73 74 72 6e 69 The second strni
2b40: 67 20 74 6f 20 63 6f 6d 70 61 72 65 3c 2f 70 61 g to compare</pa
2b50: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 ram>.. /// <r
2b60: 65 74 75 72 6e 73 3e 31 20 69 66 20 70 61 72 61 eturns>1 if para
2b70: 6d 31 20 69 73 20 67 72 65 61 74 65 72 20 74 68 m1 is greater th
2b80: 61 6e 20 70 61 72 61 6d 32 2c 20 30 20 69 66 20 an param2, 0 if
2b90: 74 68 65 79 20 61 72 65 20 65 71 75 61 6c 2c 20 they are equal,
2ba0: 6f 72 20 2d 31 20 69 66 20 70 61 72 61 6d 31 20 or -1 if param1
2bb0: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 70 61 72 is less than par
2bc0: 61 6d 32 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 am2</returns>..
2bd0: 20 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 public virtua
2be0: 6c 20 69 6e 74 20 43 6f 6d 70 61 72 65 28 73 74 l int Compare(st
2bf0: 72 69 6e 67 20 70 61 72 61 6d 31 2c 20 73 74 72 ring param1, str
2c00: 69 6e 67 20 70 61 72 61 6d 32 29 0d 0a 20 20 20 ing param2)..
2c10: 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 {.. CheckD
2c20: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 isposed();..
2c30: 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20 return 0;..
2c40: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 }.... /// <s
2c50: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f ummary>.. ///
2c60: 20 43 6f 6e 76 65 72 74 73 20 61 6e 20 49 6e 74 Converts an Int
2c70: 50 74 72 20 61 72 72 61 79 20 6f 66 20 63 6f 6e Ptr array of con
2c80: 74 65 78 74 20 61 72 67 75 6d 65 6e 74 73 20 74 text arguments t
2c90: 6f 20 61 6e 20 6f 62 6a 65 63 74 20 61 72 72 61 o an object arra
2ca0: 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 y containing the
2cb0: 20 72 65 73 6f 6c 76 65 64 20 70 61 72 61 6d 65 resolved parame
2cc0: 74 65 72 73 20 74 68 65 20 70 6f 69 6e 74 65 72 ters the pointer
2cd0: 73 20 70 6f 69 6e 74 20 74 6f 2e 0d 0a 20 20 20 s point to...
2ce0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d /// </summary>.
2cf0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b . /// <remark
2d00: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 50 61 72 61 s>.. /// Para
2d10: 6d 65 74 65 72 73 20 70 61 73 73 65 64 20 74 6f meters passed to
2d20: 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 functions have
2d30: 6f 6e 6c 79 20 61 6e 20 61 66 66 69 6e 69 74 79 only an affinity
2d40: 20 66 6f 72 20 61 20 63 65 72 74 61 69 6e 20 64 for a certain d
2d50: 61 74 61 20 74 79 70 65 2c 20 74 68 65 72 65 20 ata type, there
2d60: 69 73 20 6e 6f 20 75 6e 64 65 72 6c 79 69 6e 67 is no underlying
2d70: 20 73 63 68 65 6d 61 20 61 76 61 69 6c 61 62 6c schema availabl
2d80: 65 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 66 6f e.. /// to fo
2d90: 72 63 65 20 74 68 65 6d 20 69 6e 74 6f 20 61 20 rce them into a
2da0: 63 65 72 74 61 69 6e 20 74 79 70 65 2e 20 20 54 certain type. T
2db0: 68 65 72 65 66 6f 72 65 20 74 68 65 20 6f 6e 6c herefore the onl
2dc0: 79 20 74 79 70 65 73 20 79 6f 75 20 77 69 6c 6c y types you will
2dd0: 20 65 76 65 72 20 73 65 65 20 61 73 20 70 61 72 ever see as par
2de0: 61 6d 65 74 65 72 73 20 61 72 65 0d 0a 20 20 20 ameters are..
2df0: 20 2f 2f 2f 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 /// DBNull.Valu
2e00: 65 2c 20 49 6e 74 36 34 2c 20 44 6f 75 62 6c 65 e, Int64, Double
2e10: 2c 20 53 74 72 69 6e 67 20 6f 72 20 62 79 74 65 , String or byte
2e20: 5b 5d 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 2f [] array... /
2e30: 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 // </remarks>..
2e40: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 /// <param na
2e50: 6d 65 3d 22 6e 41 72 67 73 22 3e 54 68 65 20 6e me="nArgs">The n
2e60: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e umber of argumen
2e70: 74 73 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 ts</param>..
2e80: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d /// <param name=
2e90: 22 61 72 67 73 70 74 72 22 3e 41 20 70 6f 69 6e "argsptr">A poin
2ea0: 74 65 72 20 74 6f 20 74 68 65 20 61 72 72 61 79 ter to the array
2eb0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 3c 2f 70 of arguments</p
2ec0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c aram>.. /// <
2ed0: 72 65 74 75 72 6e 73 3e 41 6e 20 6f 62 6a 65 63 returns>An objec
2ee0: 74 20 61 72 72 61 79 20 6f 66 20 74 68 65 20 61 t array of the a
2ef0: 72 67 75 6d 65 6e 74 73 20 6f 6e 63 65 20 74 68 rguments once th
2f00: 65 79 27 76 65 20 62 65 65 6e 20 63 6f 6e 76 65 ey've been conve
2f10: 72 74 65 64 20 74 6f 20 2e 4e 45 54 20 76 61 6c rted to .NET val
2f20: 75 65 73 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 ues</returns>..
2f30: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 62 6a 65 internal obje
2f40: 63 74 5b 5d 20 43 6f 6e 76 65 72 74 50 61 72 61 ct[] ConvertPara
2f50: 6d 73 28 69 6e 74 20 6e 41 72 67 73 2c 20 49 6e ms(int nArgs, In
2f60: 74 50 74 72 20 61 72 67 73 70 74 72 29 0d 0a 20 tPtr argsptr)..
2f70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 6f 62 6a 65 {.. obje
2f80: 63 74 5b 5d 20 70 61 72 6d 73 20 3d 20 6e 65 77 ct[] parms = new
2f90: 20 6f 62 6a 65 63 74 5b 6e 41 72 67 73 5d 3b 0d object[nArgs];.
2fa0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 .#if !PLATFORM_C
2fb0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d OMPACTFRAMEWORK.
2fc0: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 5b 5d 20 . IntPtr[]
2fd0: 61 72 67 69 6e 74 20 3d 20 6e 65 77 20 49 6e 74 argint = new Int
2fe0: 50 74 72 5b 6e 41 72 67 73 5d 3b 0d 0a 23 65 6c Ptr[nArgs];..#el
2ff0: 73 65 0d 0a 20 20 20 20 20 20 69 6e 74 5b 5d 20 se.. int[]
3000: 61 72 67 69 6e 74 20 3d 20 6e 65 77 20 69 6e 74 argint = new int
3010: 5b 6e 41 72 67 73 5d 3b 0d 0a 23 65 6e 64 69 66 [nArgs];..#endif
3020: 0d 0a 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e .. Marshal.
3030: 43 6f 70 79 28 61 72 67 73 70 74 72 2c 20 61 72 Copy(argsptr, ar
3040: 67 69 6e 74 2c 20 30 2c 20 6e 41 72 67 73 29 3b gint, 0, nArgs);
3050: 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69 .... for (i
3060: 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 6e 41 nt n = 0; n < nA
3070: 72 67 73 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 rgs; n++)..
3080: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 77 69 74 {.. swit
3090: 63 68 20 28 5f 62 61 73 65 2e 47 65 74 50 61 72 ch (_base.GetPar
30a0: 61 6d 56 61 6c 75 65 54 79 70 65 28 28 49 6e 74 amValueType((Int
30b0: 50 74 72 29 61 72 67 69 6e 74 5b 6e 5d 29 29 0d Ptr)argint[n])).
30c0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 . {..
30d0: 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 case TypeA
30e0: 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 3a 0d 0a 20 ffinity.Null:..
30f0: 20 20 20 20 20 20 20 20 20 20 20 70 61 72 6d 73 parms
3100: 5b 6e 5d 20 3d 20 44 42 4e 75 6c 6c 2e 56 61 6c [n] = DBNull.Val
3110: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ue;..
3120: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 break;..
3130: 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 case TypeAffi
3140: 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 nity.Int64:..
3150: 20 20 20 20 20 20 20 20 20 70 61 72 6d 73 5b 6e parms[n
3160: 5d 20 3d 20 5f 62 61 73 65 2e 47 65 74 50 61 72 ] = _base.GetPar
3170: 61 6d 56 61 6c 75 65 49 6e 74 36 34 28 28 49 6e amValueInt64((In
3180: 74 50 74 72 29 61 72 67 69 6e 74 5b 6e 5d 29 3b tPtr)argint[n]);
3190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 .. br
31a0: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 eak;..
31b0: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 case TypeAffinit
31c0: 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 y.Double:..
31d0: 20 20 20 20 20 20 20 70 61 72 6d 73 5b 6e 5d 20 parms[n]
31e0: 3d 20 5f 62 61 73 65 2e 47 65 74 50 61 72 61 6d = _base.GetParam
31f0: 56 61 6c 75 65 44 6f 75 62 6c 65 28 28 49 6e 74 ValueDouble((Int
3200: 50 74 72 29 61 72 67 69 6e 74 5b 6e 5d 29 3b 0d Ptr)argint[n]);.
3210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 . bre
3220: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 ak;.. c
3230: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 ase TypeAffinity
3240: 2e 54 65 78 74 3a 0d 0a 20 20 20 20 20 20 20 20 .Text:..
3250: 20 20 20 20 70 61 72 6d 73 5b 6e 5d 20 3d 20 5f parms[n] = _
3260: 62 61 73 65 2e 47 65 74 50 61 72 61 6d 56 61 6c base.GetParamVal
3270: 75 65 54 65 78 74 28 28 49 6e 74 50 74 72 29 61 ueText((IntPtr)a
3280: 72 67 69 6e 74 5b 6e 5d 29 3b 0d 0a 20 20 20 20 rgint[n]);..
3290: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a break;..
32a0: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54 case T
32b0: 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 ypeAffinity.Blob
32c0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b :.. {
32d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
32e0: 69 6e 74 20 78 3b 0d 0a 20 20 20 20 20 20 20 20 int x;..
32f0: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 6c 6f byte[] blo
3300: 62 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 b;....
3310: 20 20 20 20 78 20 3d 20 28 69 6e 74 29 5f 62 61 x = (int)_ba
3320: 73 65 2e 47 65 74 50 61 72 61 6d 56 61 6c 75 65 se.GetParamValue
3330: 42 79 74 65 73 28 28 49 6e 74 50 74 72 29 61 72 Bytes((IntPtr)ar
3340: 67 69 6e 74 5b 6e 5d 2c 20 30 2c 20 6e 75 6c 6c gint[n], 0, null
3350: 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 , 0, 0);..
3360: 20 20 20 20 20 20 20 20 62 6c 6f 62 20 3d 20 6e blob = n
3370: 65 77 20 62 79 74 65 5b 78 5d 3b 0d 0a 20 20 20 ew byte[x];..
3380: 20 20 20 20 20 20 20 20 20 20 20 5f 62 61 73 65 _base
3390: 2e 47 65 74 50 61 72 61 6d 56 61 6c 75 65 42 79 .GetParamValueBy
33a0: 74 65 73 28 28 49 6e 74 50 74 72 29 61 72 67 69 tes((IntPtr)argi
33b0: 6e 74 5b 6e 5d 2c 20 30 2c 20 62 6c 6f 62 2c 20 nt[n], 0, blob,
33c0: 30 2c 20 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 0, x);..
33d0: 20 20 20 20 20 20 70 61 72 6d 73 5b 6e 5d 20 3d parms[n] =
33e0: 20 62 6c 6f 62 3b 0d 0a 20 20 20 20 20 20 20 20 blob;..
33f0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
3400: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 break;..
3410: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 case TypeAf
3420: 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65 3a finity.DateTime:
3430: 20 2f 2f 20 4e 65 76 65 72 20 68 61 70 70 65 6e // Never happen
3440: 73 20 68 65 72 65 20 62 75 74 20 77 68 61 74 20 s here but what
3450: 74 68 65 20 68 65 63 6b 2c 20 6d 61 79 62 65 20 the heck, maybe
3460: 69 74 20 77 69 6c 6c 20 6f 6e 65 20 64 61 79 2e it will one day.
3470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61 .. pa
3480: 72 6d 73 5b 6e 5d 20 3d 20 5f 62 61 73 65 2e 54 rms[n] = _base.T
3490: 6f 44 61 74 65 54 69 6d 65 28 5f 62 61 73 65 2e oDateTime(_base.
34a0: 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 65 78 GetParamValueTex
34b0: 74 28 28 49 6e 74 50 74 72 29 61 72 67 69 6e 74 t((IntPtr)argint
34c0: 5b 6e 5d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 [n]));..
34d0: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 break;..
34e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }..
34f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 70 61 72 return par
3500: 6d 73 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 ms;.. }....
3510: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d /// <summary>.
3520: 0a 20 20 20 20 2f 2f 2f 20 54 61 6b 65 73 20 74 . /// Takes t
3530: 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 he return value
3540: 66 72 6f 6d 20 49 6e 76 6f 6b 65 28 29 20 61 6e from Invoke() an
3550: 64 20 46 69 6e 61 6c 28 29 20 61 6e 64 20 66 69 d Final() and fi
3560: 67 75 72 65 73 20 6f 75 74 20 68 6f 77 20 74 6f gures out how to
3570: 20 72 65 74 75 72 6e 20 69 74 20 74 6f 20 53 51 return it to SQ
3580: 4c 69 74 65 27 73 20 63 6f 6e 74 65 78 74 2e 0d Lite's context..
3590: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 . /// </summa
35a0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 ry>.. /// <pa
35b0: 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 ram name="contex
35c0: 74 22 3e 54 68 65 20 63 6f 6e 74 65 78 74 20 74 t">The context t
35d0: 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 he return value
35e0: 61 70 70 6c 69 65 73 20 74 6f 3c 2f 70 61 72 61 applies to</para
35f0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 m>.. /// <par
3600: 61 6d 20 6e 61 6d 65 3d 22 72 65 74 75 72 6e 56 am name="returnV
3610: 61 6c 75 65 22 3e 54 68 65 20 70 61 72 61 6d 65 alue">The parame
3620: 74 65 72 20 74 6f 20 72 65 74 75 72 6e 20 74 6f ter to return to
3630: 20 53 51 4c 69 74 65 3c 2f 70 61 72 61 6d 3e 0d SQLite</param>.
3640: 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 . private voi
3650: 64 20 53 65 74 52 65 74 75 72 6e 56 61 6c 75 65 d SetReturnValue
3660: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c (IntPtr context,
3670: 20 6f 62 6a 65 63 74 20 72 65 74 75 72 6e 56 61 object returnVa
3680: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 lue).. {..
3690: 20 20 20 69 66 20 28 72 65 74 75 72 6e 56 61 6c if (returnVal
36a0: 75 65 20 3d 3d 20 6e 75 6c 6c 20 7c 7c 20 72 65 ue == null || re
36b0: 74 75 72 6e 56 61 6c 75 65 20 3d 3d 20 44 42 4e turnValue == DBN
36c0: 75 6c 6c 2e 56 61 6c 75 65 29 0d 0a 20 20 20 20 ull.Value)..
36d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 62 61 {.. _ba
36e0: 73 65 2e 52 65 74 75 72 6e 4e 75 6c 6c 28 63 6f se.ReturnNull(co
36f0: 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 20 20 20 ntext);..
3700: 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 return;..
3710: 7d 0d 0a 0d 0a 20 20 20 20 20 20 54 79 70 65 20 }.... Type
3720: 74 20 3d 20 72 65 74 75 72 6e 56 61 6c 75 65 2e t = returnValue.
3730: 47 65 74 54 79 70 65 28 29 3b 0d 0a 20 20 20 20 GetType();..
3740: 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f if (t == typeo
3750: 66 28 44 61 74 65 54 69 6d 65 29 29 0d 0a 20 20 f(DateTime))..
3760: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f {.. _
3770: 62 61 73 65 2e 52 65 74 75 72 6e 54 65 78 74 28 base.ReturnText(
3780: 63 6f 6e 74 65 78 74 2c 20 5f 62 61 73 65 2e 54 context, _base.T
3790: 6f 53 74 72 69 6e 67 28 28 44 61 74 65 54 69 6d oString((DateTim
37a0: 65 29 72 65 74 75 72 6e 56 61 6c 75 65 29 29 3b e)returnValue));
37b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return
37c0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ;.. }..
37d0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d else.. {.
37e0: 0a 20 20 20 20 20 20 20 20 45 78 63 65 70 74 69 . Excepti
37f0: 6f 6e 20 72 20 3d 20 72 65 74 75 72 6e 56 61 6c on r = returnVal
3800: 75 65 20 61 73 20 45 78 63 65 70 74 69 6f 6e 3b ue as Exception;
3810: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 .... if (
3820: 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 r != null)..
3830: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
3840: 20 5f 62 61 73 65 2e 52 65 74 75 72 6e 45 72 72 _base.ReturnErr
3850: 6f 72 28 63 6f 6e 74 65 78 74 2c 20 72 2e 4d 65 or(context, r.Me
3860: 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 ssage);..
3870: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 return;..
3880: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }..
3890: 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28 .. switch (
38a0: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 54 79 SQLiteConvert.Ty
38b0: 70 65 54 6f 41 66 66 69 6e 69 74 79 28 74 29 29 peToAffinity(t))
38c0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 .. {..
38d0: 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 case TypeAffi
38e0: 6e 69 74 79 2e 4e 75 6c 6c 3a 0d 0a 20 20 20 20 nity.Null:..
38f0: 20 20 20 20 20 20 5f 62 61 73 65 2e 52 65 74 75 _base.Retu
3900: 72 6e 4e 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b rnNull(context);
3910: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 .. retu
3920: 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 rn;.. cas
3930: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 e TypeAffinity.I
3940: 6e 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 nt64:..
3950: 20 5f 62 61 73 65 2e 52 65 74 75 72 6e 49 6e 74 _base.ReturnInt
3960: 36 34 28 63 6f 6e 74 65 78 74 2c 20 43 6f 6e 76 64(context, Conv
3970: 65 72 74 2e 54 6f 49 6e 74 36 34 28 72 65 74 75 ert.ToInt64(retu
3980: 72 6e 56 61 6c 75 65 2c 20 43 75 6c 74 75 72 65 rnValue, Culture
3990: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 Info.CurrentCult
39a0: 75 72 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 ure));..
39b0: 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 return;..
39c0: 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 case TypeAffi
39d0: 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 nity.Double:..
39e0: 20 20 20 20 20 20 20 20 5f 62 61 73 65 2e 52 65 _base.Re
39f0: 74 75 72 6e 44 6f 75 62 6c 65 28 63 6f 6e 74 65 turnDouble(conte
3a00: 78 74 2c 20 43 6f 6e 76 65 72 74 2e 54 6f 44 6f xt, Convert.ToDo
3a10: 75 62 6c 65 28 72 65 74 75 72 6e 56 61 6c 75 65 uble(returnValue
3a20: 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 , CultureInfo.Cu
3a30: 72 72 65 6e 74 43 75 6c 74 75 72 65 29 29 3b 0d rrentCulture));.
3a40: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 . retur
3a50: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 n;.. case
3a60: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 TypeAffinity.Te
3a70: 78 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 5f xt:.. _
3a80: 62 61 73 65 2e 52 65 74 75 72 6e 54 65 78 74 28 base.ReturnText(
3a90: 63 6f 6e 74 65 78 74 2c 20 72 65 74 75 72 6e 56 context, returnV
3aa0: 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 alue.ToString())
3ab0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 ;.. ret
3ac0: 75 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 urn;.. ca
3ad0: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e se TypeAffinity.
3ae0: 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 20 Blob:..
3af0: 20 5f 62 61 73 65 2e 52 65 74 75 72 6e 42 6c 6f _base.ReturnBlo
3b00: 62 28 63 6f 6e 74 65 78 74 2c 20 28 62 79 74 65 b(context, (byte
3b10: 5b 5d 29 72 65 74 75 72 6e 56 61 6c 75 65 29 3b [])returnValue);
3b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 .. retu
3b30: 72 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 rn;.. }..
3b40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c }.... /// <
3b50: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f summary>.. //
3b60: 2f 20 49 6e 74 65 72 6e 61 6c 20 73 63 61 6c 61 / Internal scala
3b70: 72 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 r callback funct
3b80: 69 6f 6e 2c 20 77 68 69 63 68 20 77 72 61 70 73 ion, which wraps
3b90: 20 74 68 65 20 72 61 77 20 63 6f 6e 74 65 78 74 the raw context
3ba0: 20 70 6f 69 6e 74 65 72 20 61 6e 64 20 63 61 6c pointer and cal
3bb0: 6c 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 49 ls the virtual I
3bc0: 6e 76 6f 6b 65 28 29 20 6d 65 74 68 6f 64 2e 0d nvoke() method..
3bd0: 0a 20 20 20 20 2f 2f 2f 20 57 41 52 4e 49 4e 47 . /// WARNING
3be0: 3a 20 4d 75 73 74 20 6e 6f 74 20 74 68 72 6f 77 : Must not throw
3bf0: 20 65 78 63 65 70 74 69 6f 6e 73 2e 0d 0a 20 20 exceptions...
3c00: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e /// </summary>
3c10: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d .. /// <param
3c20: 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74 22 3e name="context">
3c30: 41 20 72 61 77 20 63 6f 6e 74 65 78 74 20 70 6f A raw context po
3c40: 69 6e 74 65 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 inter</param>..
3c50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 /// <param na
3c60: 6d 65 3d 22 6e 41 72 67 73 22 3e 4e 75 6d 62 65 me="nArgs">Numbe
3c70: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 r of arguments p
3c80: 61 73 73 65 64 20 69 6e 3c 2f 70 61 72 61 6d 3e assed in</param>
3c90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d .. /// <param
3ca0: 20 6e 61 6d 65 3d 22 61 72 67 73 70 74 72 22 3e name="argsptr">
3cb0: 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 A pointer to the
3cc0: 20 61 72 72 61 79 20 6f 66 20 61 72 67 75 6d 65 array of argume
3cd0: 6e 74 73 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 nts</param>..
3ce0: 20 69 6e 74 65 72 6e 61 6c 20 76 6f 69 64 20 53 internal void S
3cf0: 63 61 6c 61 72 43 61 6c 6c 62 61 63 6b 28 49 6e calarCallback(In
3d00: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e tPtr context, in
3d10: 74 20 6e 41 72 67 73 2c 20 49 6e 74 50 74 72 20 t nArgs, IntPtr
3d20: 61 72 67 73 70 74 72 29 0d 0a 20 20 20 20 7b 0d argsptr).. {.
3d30: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 . try..
3d40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
3d50: 20 20 20 20 20 5f 63 6f 6e 74 65 78 74 20 3d 20 _context =
3d60: 63 6f 6e 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 context;..
3d70: 20 20 20 20 20 20 53 65 74 52 65 74 75 72 6e 56 SetReturnV
3d80: 61 6c 75 65 28 63 6f 6e 74 65 78 74 2c 0d 0a 20 alue(context,..
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 I
3da0: 6e 76 6f 6b 65 28 43 6f 6e 76 65 72 74 50 61 72 nvoke(ConvertPar
3db0: 61 6d 73 28 6e 41 72 67 73 2c 20 61 72 67 73 70 ams(nArgs, argsp
3dc0: 74 72 29 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 tr))); /* throw
3dd0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 */.. }..
3de0: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 catch (Ex
3df0: 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f ception e) /* NO
3e00: 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 TE: Must catch A
3e10: 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 LL. */..
3e20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t
3e30: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ry..
3e40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
3e50: 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 if ((_flags &
3e60: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f SQLiteConnectio
3e70: 6e 46 6c 61 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 nFlags.LogCallba
3e80: 63 6b 45 78 63 65 70 74 69 6f 6e 29 20 3d 3d 0d ckException) ==.
3e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3ea0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 SQLiteC
3eb0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c onnectionFlags.L
3ec0: 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63 65 70 74 ogCallbackExcept
3ed0: 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ion)..
3ee0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
3ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c SQL
3f00: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 iteLog.LogMessag
3f10: 65 28 53 51 4c 69 74 65 42 61 73 65 2e 43 4f 52 e(SQLiteBase.COR
3f20: 5f 45 5f 45 58 43 45 50 54 49 4f 4e 2c 0d 0a 20 _E_EXCEPTION,..
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3f40: 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f String.Fo
3f50: 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f rmat(CultureInfo
3f60: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c .CurrentCulture,
3f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
3f80: 20 20 20 20 20 20 20 20 20 20 22 43 61 75 67 68 "Caugh
3f90: 74 20 65 78 63 65 70 74 69 6f 6e 20 69 6e 20 5c t exception in \
3fa0: 22 49 6e 76 6f 6b 65 5c 22 20 6d 65 74 68 6f 64 "Invoke\" method
3fb0: 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 : {0}",..
3fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3fd0: 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a e)); /* throw *
3fe0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
3ff0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
4000: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
4010: 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 catch..
4020: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
4030: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 // do not
4040: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 hing...
4050: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }.
4060: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f . }.... //
4070: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 / <summary>..
4080: 20 2f 2f 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f /// Internal co
4090: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 llation sequence
40a0: 20 66 75 6e 63 74 69 6f 6e 2c 20 77 68 69 63 68 function, which
40b0: 20 77 72 61 70 73 20 75 70 20 74 68 65 20 72 61 wraps up the ra
40c0: 77 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 w string pointer
40d0: 73 20 61 6e 64 20 65 78 65 63 75 74 65 73 20 74 s and executes t
40e0: 68 65 20 43 6f 6d 70 61 72 65 28 29 20 76 69 72 he Compare() vir
40f0: 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a tual function...
4100: 20 20 20 20 2f 2f 2f 20 57 41 52 4e 49 4e 47 3a /// WARNING:
4110: 20 4d 75 73 74 20 6e 6f 74 20 74 68 72 6f 77 20 Must not throw
4120: 65 78 63 65 70 74 69 6f 6e 73 2e 0d 0a 20 20 20 exceptions...
4130: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d /// </summary>.
4140: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 . /// <param
4150: 6e 61 6d 65 3d 22 70 74 72 22 3e 4e 6f 74 20 75 name="ptr">Not u
4160: 73 65 64 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 sed</param>..
4170: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 /// <param name
4180: 3d 22 6c 65 6e 31 22 3e 4c 65 6e 67 74 68 20 6f ="len1">Length o
4190: 66 20 74 68 65 20 73 74 72 69 6e 67 20 70 76 31 f the string pv1
41a0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f </param>.. //
41b0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 / <param name="p
41c0: 74 72 31 22 3e 50 6f 69 6e 74 65 72 20 74 6f 20 tr1">Pointer to
41d0: 74 68 65 20 66 69 72 73 74 20 73 74 72 69 6e 67 the first string
41e0: 20 74 6f 20 63 6f 6d 70 61 72 65 3c 2f 70 61 72 to compare</par
41f0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 am>.. /// <pa
4200: 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 32 22 3e ram name="len2">
4210: 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 Length of the st
4220: 72 69 6e 67 20 70 76 32 3c 2f 70 61 72 61 6d 3e ring pv2</param>
4230: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d .. /// <param
4240: 20 6e 61 6d 65 3d 22 70 74 72 32 22 3e 50 6f 69 name="ptr2">Poi
4250: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 65 63 6f nter to the seco
4260: 6e 64 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6d nd string to com
4270: 70 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 pare</param>..
4280: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 /// <returns>R
4290: 65 74 75 72 6e 73 20 2d 31 20 69 66 20 74 68 65 eturns -1 if the
42a0: 20 66 69 72 73 74 20 73 74 72 69 6e 67 20 69 73 first string is
42b0: 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 73 less than the s
42c0: 65 63 6f 6e 64 2e 20 20 30 20 69 66 20 74 68 65 econd. 0 if the
42d0: 79 20 61 72 65 20 65 71 75 61 6c 2c 20 6f 72 20 y are equal, or
42e0: 31 20 69 66 20 74 68 65 20 66 69 72 73 74 20 73 1 if the first s
42f0: 74 72 69 6e 67 20 69 73 20 67 72 65 61 74 65 72 tring is greater
4300: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 61 6e 20 74 .. /// than t
4310: 68 65 20 73 65 63 6f 6e 64 2e 20 20 52 65 74 75 he second. Retu
4320: 72 6e 73 20 30 20 69 66 20 61 6e 20 65 78 63 65 rns 0 if an exce
4330: 70 74 69 6f 6e 20 69 73 20 63 61 75 67 68 74 2e ption is caught.
4340: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 </returns>..
4350: 69 6e 74 65 72 6e 61 6c 20 69 6e 74 20 43 6f 6d internal int Com
4360: 70 61 72 65 43 61 6c 6c 62 61 63 6b 28 49 6e 74 pareCallback(Int
4370: 50 74 72 20 70 74 72 2c 20 69 6e 74 20 6c 65 6e Ptr ptr, int len
4380: 31 2c 20 49 6e 74 50 74 72 20 70 74 72 31 2c 20 1, IntPtr ptr1,
4390: 69 6e 74 20 6c 65 6e 32 2c 20 49 6e 74 50 74 72 int len2, IntPtr
43a0: 20 70 74 72 32 29 0d 0a 20 20 20 20 7b 0d 0a 20 ptr2).. {..
43b0: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 try..
43c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
43d0: 20 20 20 72 65 74 75 72 6e 20 43 6f 6d 70 61 72 return Compar
43e0: 65 28 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e e(SQLiteConvert.
43f0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72 UTF8ToString(ptr
4400: 31 2c 20 6c 65 6e 31 29 2c 0d 0a 20 20 20 20 20 1, len1),..
4410: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 SQLit
4420: 65 43 6f 6e 76 65 72 74 2e 55 54 46 38 54 6f 53 eConvert.UTF8ToS
4430: 74 72 69 6e 67 28 70 74 72 32 2c 20 6c 65 6e 32 tring(ptr2, len2
4440: 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d )); /* throw */.
4450: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }..
4460: 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 catch (Excep
4470: 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a tion e) /* NOTE:
4480: 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e Must catch ALL.
4490: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a */.. {..
44a0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d try.
44b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
44c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
44d0: 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 if ((_flags & SQ
44e0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c LiteConnectionFl
44f0: 61 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 ags.LogCallbackE
4500: 78 63 65 70 74 69 6f 6e 29 20 3d 3d 0d 0a 20 20 xception) ==..
4510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4520: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e SQLiteConn
4530: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 43 ectionFlags.LogC
4540: 61 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e allbackException
4550: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
4560: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
4570: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 SQLite
4580: 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 Log.LogMessage(S
4590: 51 4c 69 74 65 42 61 73 65 2e 43 4f 52 5f 45 5f QLiteBase.COR_E_
45a0: 45 58 43 45 50 54 49 4f 4e 2c 0d 0a 20 20 20 20 EXCEPTION,..
45b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
45c0: 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 String.Forma
45d0: 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 t(CultureInfo.Cu
45e0: 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 rrentCulture,..
45f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4600: 20 20 20 20 20 20 20 22 43 61 75 67 68 74 20 65 "Caught e
4610: 78 63 65 70 74 69 6f 6e 20 69 6e 20 5c 22 43 6f xception in \"Co
4620: 6d 70 61 72 65 5c 22 20 28 55 54 46 38 29 20 6d mpare\" (UTF8) m
4630: 65 74 68 6f 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 ethod: {0}",..
4640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4650: 20 20 20 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 e)); /* th
4660: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 row */..
4670: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
4680: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
4690: 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 catch..
46a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 // d
46c0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 o nothing...
46d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
46e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
46f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e //.. // N
4700: 4f 54 45 3a 20 54 68 69 73 20 6d 75 73 74 20 62 OTE: This must b
4710: 65 20 64 6f 6e 65 20 74 6f 20 70 72 65 76 65 6e e done to preven
4720: 74 20 74 68 65 20 63 6f 72 65 20 53 51 4c 69 74 t the core SQLit
4730: 65 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 0d 0a e library from..
4740: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 //
4750: 20 75 73 69 6e 67 20 6f 75 72 20 28 69 6e 76 61 using our (inva
4760: 6c 69 64 29 20 72 65 73 75 6c 74 2e 0d 0a 20 20 lid) result...
4770: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
4780: 20 20 69 66 20 28 28 5f 62 61 73 65 20 21 3d 20 if ((_base !=
4790: 6e 75 6c 6c 29 20 26 26 20 5f 62 61 73 65 2e 49 null) && _base.I
47a0: 73 4f 70 65 6e 28 29 29 0d 0a 20 20 20 20 20 20 sOpen())..
47b0: 20 20 20 20 20 20 5f 62 61 73 65 2e 43 61 6e 63 _base.Canc
47c0: 65 6c 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 el();....
47d0: 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 return 0;..
47e0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 }.... /// <su
47f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 mmary>.. ///
4800: 49 6e 74 65 72 6e 61 6c 20 63 6f 6c 6c 61 74 69 Internal collati
4810: 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 75 6e 63 on sequence func
4820: 74 69 6f 6e 2c 20 77 68 69 63 68 20 77 72 61 70 tion, which wrap
4830: 73 20 75 70 20 74 68 65 20 72 61 77 20 73 74 72 s up the raw str
4840: 69 6e 67 20 70 6f 69 6e 74 65 72 73 20 61 6e 64 ing pointers and
4850: 20 65 78 65 63 75 74 65 73 20 74 68 65 20 43 6f executes the Co
4860: 6d 70 61 72 65 28 29 20 76 69 72 74 75 61 6c 20 mpare() virtual
4870: 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f function... /
4880: 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 4d 75 73 74 // WARNING: Must
4890: 20 6e 6f 74 20 74 68 72 6f 77 20 65 78 63 65 70 not throw excep
48a0: 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 tions... ///
48b0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 </summary>..
48c0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d /// <param name=
48d0: 22 70 74 72 22 3e 4e 6f 74 20 75 73 65 64 3c 2f "ptr">Not used</
48e0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 param>.. ///
48f0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e <param name="len
4900: 31 22 3e 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 1">Length of the
4910: 20 73 74 72 69 6e 67 20 70 76 31 3c 2f 70 61 72 string pv1</par
4920: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 am>.. /// <pa
4930: 72 61 6d 20 6e 61 6d 65 3d 22 70 74 72 31 22 3e ram name="ptr1">
4940: 50 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 Pointer to the f
4950: 69 72 73 74 20 73 74 72 69 6e 67 20 74 6f 20 63 irst string to c
4960: 6f 6d 70 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a ompare</param>..
4970: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e /// <param n
4980: 61 6d 65 3d 22 6c 65 6e 32 22 3e 4c 65 6e 67 74 ame="len2">Lengt
4990: 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 h of the string
49a0: 70 76 32 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 pv2</param>..
49b0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 /// <param name
49c0: 3d 22 70 74 72 32 22 3e 50 6f 69 6e 74 65 72 20 ="ptr2">Pointer
49d0: 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 20 73 74 to the second st
49e0: 72 69 6e 67 20 74 6f 20 63 6f 6d 70 61 72 65 3c ring to compare<
49f0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f /param>.. ///
4a00: 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e <returns>Return
4a10: 73 20 2d 31 20 69 66 20 74 68 65 20 66 69 72 73 s -1 if the firs
4a20: 74 20 73 74 72 69 6e 67 20 69 73 20 6c 65 73 73 t string is less
4a30: 20 74 68 61 6e 20 74 68 65 20 73 65 63 6f 6e 64 than the second
4a40: 2e 20 20 30 20 69 66 20 74 68 65 79 20 61 72 65 . 0 if they are
4a50: 20 65 71 75 61 6c 2c 20 6f 72 20 31 20 69 66 20 equal, or 1 if
4a60: 74 68 65 20 66 69 72 73 74 20 73 74 72 69 6e 67 the first string
4a70: 20 69 73 20 67 72 65 61 74 65 72 0d 0a 20 20 20 is greater..
4a80: 20 2f 2f 2f 20 74 68 61 6e 20 74 68 65 20 73 65 /// than the se
4a90: 63 6f 6e 64 2e 20 20 52 65 74 75 72 6e 73 20 30 cond. Returns 0
4aa0: 20 69 66 20 61 6e 20 65 78 63 65 70 74 69 6f 6e if an exception
4ab0: 20 69 73 20 63 61 75 67 68 74 2e 3c 2f 72 65 74 is caught.</ret
4ac0: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 urns>.. inter
4ad0: 6e 61 6c 20 69 6e 74 20 43 6f 6d 70 61 72 65 43 nal int CompareC
4ae0: 61 6c 6c 62 61 63 6b 31 36 28 49 6e 74 50 74 72 allback16(IntPtr
4af0: 20 70 74 72 2c 20 69 6e 74 20 6c 65 6e 31 2c 20 ptr, int len1,
4b00: 49 6e 74 50 74 72 20 70 74 72 31 2c 20 69 6e 74 IntPtr ptr1, int
4b10: 20 6c 65 6e 32 2c 20 49 6e 74 50 74 72 20 70 74 len2, IntPtr pt
4b20: 72 32 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 r2).. {..
4b30: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 try..
4b40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
4b50: 72 65 74 75 72 6e 20 43 6f 6d 70 61 72 65 28 53 return Compare(S
4b60: 51 4c 69 74 65 33 5f 55 54 46 31 36 2e 55 54 46 QLite3_UTF16.UTF
4b70: 31 36 54 6f 53 74 72 69 6e 67 28 70 74 72 31 2c 16ToString(ptr1,
4b80: 20 6c 65 6e 31 29 2c 0d 0a 20 20 20 20 20 20 20 len1),..
4b90: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 33 SQLite3
4ba0: 5f 55 54 46 31 36 2e 55 54 46 31 36 54 6f 53 74 _UTF16.UTF16ToSt
4bb0: 72 69 6e 67 28 70 74 72 32 2c 20 6c 65 6e 32 29 ring(ptr2, len2)
4bc0: 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a ); /* throw */..
4bd0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
4be0: 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 catch (Except
4bf0: 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 ion e) /* NOTE:
4c00: 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 Must catch ALL.
4c10: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 */.. {..
4c20: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a try..
4c30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
4c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
4c50: 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c f ((_flags & SQL
4c60: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 iteConnectionFla
4c70: 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78 gs.LogCallbackEx
4c80: 63 65 70 74 69 6f 6e 29 20 3d 3d 0d 0a 20 20 20 ception) ==..
4c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4ca0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 SQLiteConne
4cb0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 43 61 ctionFlags.LogCa
4cc0: 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e 29 llbackException)
4cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
4ce0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
4cf0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c SQLiteL
4d00: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 og.LogMessage(SQ
4d10: 4c 69 74 65 42 61 73 65 2e 43 4f 52 5f 45 5f 45 LiteBase.COR_E_E
4d20: 58 43 45 50 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 XCEPTION,..
4d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4d40: 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 String.Format
4d50: 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 (CultureInfo.Cur
4d60: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 rentCulture,..
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4d80: 20 20 20 20 20 20 22 43 61 75 67 68 74 20 65 78 "Caught ex
4d90: 63 65 70 74 69 6f 6e 20 69 6e 20 5c 22 43 6f 6d ception in \"Com
4da0: 70 61 72 65 5c 22 20 28 55 54 46 31 36 29 20 6d pare\" (UTF16) m
4db0: 65 74 68 6f 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 ethod: {0}",..
4dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4dd0: 20 20 20 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 e)); /* th
4de0: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 row */..
4df0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
4e00: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
4e10: 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 catch..
4e20: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
4e30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 // d
4e40: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 o nothing...
4e50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
4e60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
4e70: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e //.. // N
4e80: 4f 54 45 3a 20 54 68 69 73 20 6d 75 73 74 20 62 OTE: This must b
4e90: 65 20 64 6f 6e 65 20 74 6f 20 70 72 65 76 65 6e e done to preven
4ea0: 74 20 74 68 65 20 63 6f 72 65 20 53 51 4c 69 74 t the core SQLit
4eb0: 65 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 0d 0a e library from..
4ec0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 //
4ed0: 20 75 73 69 6e 67 20 6f 75 72 20 28 69 6e 76 61 using our (inva
4ee0: 6c 69 64 29 20 72 65 73 75 6c 74 2e 0d 0a 20 20 lid) result...
4ef0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
4f00: 20 20 69 66 20 28 28 5f 62 61 73 65 20 21 3d 20 if ((_base !=
4f10: 6e 75 6c 6c 29 20 26 26 20 5f 62 61 73 65 2e 49 null) && _base.I
4f20: 73 4f 70 65 6e 28 29 29 0d 0a 20 20 20 20 20 20 sOpen())..
4f30: 20 20 20 20 20 20 5f 62 61 73 65 2e 43 61 6e 63 _base.Canc
4f40: 65 6c 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 el();....
4f50: 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 return 0;..
4f60: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 }.... /// <su
4f70: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 mmary>.. ///
4f80: 54 68 65 20 69 6e 74 65 72 6e 61 6c 20 61 67 67 The internal agg
4f90: 72 65 67 61 74 65 20 53 74 65 70 20 66 75 6e 63 regate Step func
4fa0: 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 2c 20 77 tion callback, w
4fb0: 68 69 63 68 20 77 72 61 70 73 20 74 68 65 20 72 hich wraps the r
4fc0: 61 77 20 63 6f 6e 74 65 78 74 20 70 6f 69 6e 74 aw context point
4fd0: 65 72 20 61 6e 64 20 63 61 6c 6c 73 20 74 68 65 er and calls the
4fe0: 20 76 69 72 74 75 61 6c 20 53 74 65 70 28 29 20 virtual Step()
4ff0: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f method... ///
5000: 20 57 41 52 4e 49 4e 47 3a 20 4d 75 73 74 20 6e WARNING: Must n
5010: 6f 74 20 74 68 72 6f 77 20 65 78 63 65 70 74 69 ot throw excepti
5020: 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f ons... /// </
5030: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f summary>.. //
5040: 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 / <remarks>..
5050: 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 /// This functi
5060: 6f 6e 20 74 61 6b 65 73 20 63 61 72 65 20 6f 66 on takes care of
5070: 20 64 6f 69 6e 67 20 74 68 65 20 6c 6f 6f 6b 75 doing the looku
5080: 70 73 20 61 6e 64 20 67 65 74 74 69 6e 67 20 74 ps and getting t
5090: 68 65 20 69 6d 70 6f 72 74 61 6e 74 20 69 6e 66 he important inf
50a0: 6f 72 6d 61 74 69 6f 6e 20 70 75 74 20 74 6f 67 ormation put tog
50b0: 65 74 68 65 72 20 74 6f 20 63 61 6c 6c 20 74 68 ether to call th
50c0: 65 20 53 74 65 70 28 29 20 66 75 6e 63 74 69 6f e Step() functio
50d0: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 61 74 n... /// That
50e0: 20 69 6e 63 6c 75 64 65 73 20 70 75 6c 6c 69 6e includes pullin
50f0: 67 20 6f 75 74 20 74 68 65 20 75 73 65 72 27 73 g out the user's
5100: 20 63 6f 6e 74 65 78 74 44 61 74 61 20 61 6e 64 contextData and
5110: 20 75 70 64 61 74 69 6e 67 20 69 74 20 61 66 74 updating it aft
5120: 65 72 20 74 68 65 20 63 61 6c 6c 20 69 73 20 6d er the call is m
5130: 61 64 65 2e 20 20 57 65 20 75 73 65 20 61 20 73 ade. We use a s
5140: 6f 72 74 65 64 20 6c 69 73 74 20 66 6f 72 20 74 orted list for t
5150: 68 69 73 20 73 6f 0d 0a 20 20 20 20 2f 2f 2f 20 his so.. ///
5160: 62 69 6e 61 72 79 20 73 65 61 72 63 68 65 73 20 binary searches
5170: 63 61 6e 20 62 65 20 64 6f 6e 65 20 74 6f 20 66 can be done to f
5180: 69 6e 64 20 74 68 65 20 64 61 74 61 2e 0d 0a 20 ind the data...
5190: 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 /// </remarks
51a0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 >.. /// <para
51b0: 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74 22 m name="context"
51c0: 3e 41 20 72 61 77 20 63 6f 6e 74 65 78 74 20 70 >A raw context p
51d0: 6f 69 6e 74 65 72 3c 2f 70 61 72 61 6d 3e 0d 0a ointer</param>..
51e0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e /// <param n
51f0: 61 6d 65 3d 22 6e 41 72 67 73 22 3e 4e 75 6d 62 ame="nArgs">Numb
5200: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 er of arguments
5210: 70 61 73 73 65 64 20 69 6e 3c 2f 70 61 72 61 6d passed in</param
5220: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 >.. /// <para
5230: 6d 20 6e 61 6d 65 3d 22 61 72 67 73 70 74 72 22 m name="argsptr"
5240: 3e 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 >A pointer to th
5250: 65 20 61 72 72 61 79 20 6f 66 20 61 72 67 75 6d e array of argum
5260: 65 6e 74 73 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 ents</param>..
5270: 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f 69 64 20 internal void
5280: 53 74 65 70 43 61 6c 6c 62 61 63 6b 28 49 6e 74 StepCallback(Int
5290: 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e 74 Ptr context, int
52a0: 20 6e 41 72 67 73 2c 20 49 6e 74 50 74 72 20 61 nArgs, IntPtr a
52b0: 72 67 73 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a rgsptr).. {..
52c0: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 try..
52d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
52e0: 20 20 20 20 41 67 67 72 65 67 61 74 65 44 61 74 AggregateDat
52f0: 61 20 64 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a a data = null;..
5300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if
5310: 20 28 5f 62 61 73 65 20 21 3d 20 6e 75 6c 6c 29 (_base != null)
5320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
5330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5340: 20 49 6e 74 50 74 72 20 6e 41 75 78 20 3d 20 5f IntPtr nAux = _
5350: 62 61 73 65 2e 41 67 67 72 65 67 61 74 65 43 6f base.AggregateCo
5360: 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 29 3b 0d ntext(context);.
5370: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
5380: 20 20 20 69 66 20 28 28 5f 63 6f 6e 74 65 78 74 if ((_context
5390: 44 61 74 61 4c 69 73 74 20 21 3d 20 6e 75 6c 6c DataList != null
53a0: 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 ) &&..
53b0: 20 20 20 20 20 20 20 20 20 20 21 5f 63 6f 6e 74 !_cont
53c0: 65 78 74 44 61 74 61 4c 69 73 74 2e 54 72 79 47 extDataList.TryG
53d0: 65 74 56 61 6c 75 65 28 6e 41 75 78 2c 20 6f 75 etValue(nAux, ou
53e0: 74 20 64 61 74 61 29 29 0d 0a 20 20 20 20 20 20 t data))..
53f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
5400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5410: 20 64 61 74 61 20 3d 20 6e 65 77 20 41 67 67 72 data = new Aggr
5420: 65 67 61 74 65 44 61 74 61 28 29 3b 0d 0a 20 20 egateData();..
5430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5440: 20 20 5f 63 6f 6e 74 65 78 74 44 61 74 61 4c 69 _contextDataLi
5450: 73 74 5b 6e 41 75 78 5d 20 3d 20 64 61 74 61 3b st[nAux] = data;
5460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
5470: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
5480: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
5490: 20 20 69 66 20 28 64 61 74 61 20 3d 3d 20 6e 75 if (data == nu
54a0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
54b0: 20 20 20 20 20 64 61 74 61 20 3d 20 6e 65 77 20 data = new
54c0: 41 67 67 72 65 67 61 74 65 44 61 74 61 28 29 3b AggregateData();
54d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
54e0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 try..
54f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
5500: 20 20 20 20 5f 63 6f 6e 74 65 78 74 20 3d 20 63 _context = c
5510: 6f 6e 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 ontext;..
5520: 20 20 20 20 20 20 20 20 20 53 74 65 70 28 43 6f Step(Co
5530: 6e 76 65 72 74 50 61 72 61 6d 73 28 6e 41 72 67 nvertParams(nArg
5540: 73 2c 20 61 72 67 73 70 74 72 29 2c 0d 0a 20 20 s, argsptr),..
5550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5560: 20 20 64 61 74 61 2e 5f 63 6f 75 6e 74 2c 20 72 data._count, r
5570: 65 66 20 64 61 74 61 2e 5f 64 61 74 61 29 3b 20 ef data._data);
5580: 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 /* throw */..
5590: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
55a0: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d finally.
55b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
55c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
55d0: 64 61 74 61 2e 5f 63 6f 75 6e 74 2b 2b 3b 0d 0a data._count++;..
55e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
55f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
5600: 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 catch (Excepti
5610: 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d on e) /* NOTE: M
5620: 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a ust catch ALL. *
5630: 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 /.. {..
5640: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 try..
5650: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
5660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
5670: 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 ((_flags & SQLi
5680: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 teConnectionFlag
5690: 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63 s.LogCallbackExc
56a0: 65 70 74 69 6f 6e 29 20 3d 3d 0d 0a 20 20 20 20 eption) ==..
56b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
56c0: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 SQLiteConnec
56d0: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 43 61 6c tionFlags.LogCal
56e0: 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e 29 0d lbackException).
56f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5700: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
5710: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f SQLiteLo
5720: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c g.LogMessage(SQL
5730: 69 74 65 42 61 73 65 2e 43 4f 52 5f 45 5f 45 58 iteBase.COR_E_EX
5740: 43 45 50 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 CEPTION,..
5750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5760: 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 String.Format(
5770: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 CultureInfo.Curr
5780: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 entCulture,..
5790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
57a0: 20 20 20 20 20 22 43 61 75 67 68 74 20 65 78 63 "Caught exc
57b0: 65 70 74 69 6f 6e 20 69 6e 20 5c 22 53 74 65 70 eption in \"Step
57c0: 5c 22 20 6d 65 74 68 6f 64 3a 20 7b 31 7d 22 2c \" method: {1}",
57d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
57e0: 20 20 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f e)); /
57f0: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 * throw */..
5800: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
5810: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
5820: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d catch.
5830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
5840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5850: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a // do nothing...
5860: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
5870: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d }.. }.
5880: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d ... /// <summ
5890: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6e ary>.. /// An
58a0: 20 69 6e 74 65 72 6e 61 6c 20 61 67 67 72 65 67 internal aggreg
58b0: 61 74 65 20 46 69 6e 61 6c 20 66 75 6e 63 74 69 ate Final functi
58c0: 6f 6e 20 63 61 6c 6c 62 61 63 6b 2c 20 77 68 69 on callback, whi
58d0: 63 68 20 77 72 61 70 73 20 74 68 65 20 63 6f 6e ch wraps the con
58e0: 74 65 78 74 20 70 6f 69 6e 74 65 72 20 61 6e 64 text pointer and
58f0: 20 63 61 6c 6c 73 20 74 68 65 20 76 69 72 74 75 calls the virtu
5900: 61 6c 20 46 69 6e 61 6c 28 29 20 6d 65 74 68 6f al Final() metho
5910: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57 41 52 4e d... /// WARN
5920: 49 4e 47 3a 20 4d 75 73 74 20 6e 6f 74 20 74 68 ING: Must not th
5930: 72 6f 77 20 65 78 63 65 70 74 69 6f 6e 73 2e 0d row exceptions..
5940: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 . /// </summa
5950: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 ry>.. /// <pa
5960: 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 ram name="contex
5970: 74 22 3e 41 20 72 61 77 20 63 6f 6e 74 65 78 74 t">A raw context
5980: 20 70 6f 69 6e 74 65 72 3c 2f 70 61 72 61 6d 3e pointer</param>
5990: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 .. internal v
59a0: 6f 69 64 20 46 69 6e 61 6c 43 61 6c 6c 62 61 63 oid FinalCallbac
59b0: 6b 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 k(IntPtr context
59c0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 ).. {..
59d0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b try.. {
59e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 .. ob
59f0: 6a 65 63 74 20 6f 62 6a 20 3d 20 6e 75 6c 6c 3b ject obj = null;
5a00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
5a10: 69 66 20 28 5f 62 61 73 65 20 21 3d 20 6e 75 6c if (_base != nul
5a20: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l)..
5a30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
5a40: 20 20 20 49 6e 74 50 74 72 20 6e 20 3d 20 5f 62 IntPtr n = _b
5a50: 61 73 65 2e 41 67 67 72 65 67 61 74 65 43 6f 6e ase.AggregateCon
5a60: 74 65 78 74 28 63 6f 6e 74 65 78 74 29 3b 0d 0a text(context);..
5a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5a80: 41 67 67 72 65 67 61 74 65 44 61 74 61 20 61 67 AggregateData ag
5a90: 67 44 61 74 61 3b 0d 0a 0d 0a 20 20 20 20 20 20 gData;....
5aa0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 5f if ((_
5ab0: 63 6f 6e 74 65 78 74 44 61 74 61 4c 69 73 74 20 contextDataList
5ac0: 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 != null) &&..
5ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5ae0: 20 5f 63 6f 6e 74 65 78 74 44 61 74 61 4c 69 73 _contextDataLis
5af0: 74 2e 54 72 79 47 65 74 56 61 6c 75 65 28 6e 2c t.TryGetValue(n,
5b00: 20 6f 75 74 20 61 67 67 44 61 74 61 29 29 0d 0a out aggData))..
5b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5b20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
5b30: 20 20 20 20 20 20 20 6f 62 6a 20 3d 20 61 67 67 obj = agg
5b40: 44 61 74 61 2e 5f 64 61 74 61 3b 0d 0a 20 20 20 Data._data;..
5b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5b60: 20 5f 63 6f 6e 74 65 78 74 44 61 74 61 4c 69 73 _contextDataLis
5b70: 74 2e 52 65 6d 6f 76 65 28 6e 29 3b 0d 0a 20 20 t.Remove(n);..
5b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
5b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
5ba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 .. tr
5bb0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b y.. {
5bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
5bd0: 20 20 5f 63 6f 6e 74 65 78 74 20 3d 20 63 6f 6e _context = con
5be0: 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 text;..
5bf0: 20 20 20 20 20 20 20 53 65 74 52 65 74 75 72 6e SetReturn
5c00: 56 61 6c 75 65 28 63 6f 6e 74 65 78 74 2c 20 46 Value(context, F
5c10: 69 6e 61 6c 28 6f 62 6a 29 29 3b 20 2f 2a 20 74 inal(obj)); /* t
5c20: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 hrow */..
5c30: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
5c40: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 finally..
5c50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
5c60: 20 20 20 20 20 20 20 20 20 20 20 20 49 44 69 73 IDis
5c70: 70 6f 73 61 62 6c 65 20 64 69 73 70 20 3d 20 6f posable disp = o
5c80: 62 6a 20 61 73 20 49 44 69 73 70 6f 73 61 62 6c bj as IDisposabl
5c90: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
5ca0: 20 20 20 20 69 66 20 28 64 69 73 70 20 21 3d 20 if (disp !=
5cb0: 6e 75 6c 6c 29 20 64 69 73 70 2e 44 69 73 70 6f null) disp.Dispo
5cc0: 73 65 28 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a se(); /* throw *
5cd0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d /.. }
5ce0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }..
5cf0: 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 catch (Exce
5d00: 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 ption e) /* NOTE
5d10: 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c : Must catch ALL
5d20: 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d . */.. {.
5d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 . try
5d40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
5d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5d60: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 if ((_flags & S
5d70: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 QLiteConnectionF
5d80: 6c 61 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b lags.LogCallback
5d90: 45 78 63 65 70 74 69 6f 6e 29 20 3d 3d 0d 0a 20 Exception) ==..
5da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5db0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e SQLiteCon
5dc0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 nectionFlags.Log
5dd0: 43 61 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f CallbackExceptio
5de0: 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n)..
5df0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
5e00: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 SQLit
5e10: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 eLog.LogMessage(
5e20: 53 51 4c 69 74 65 42 61 73 65 2e 43 4f 52 5f 45 SQLiteBase.COR_E
5e30: 5f 45 58 43 45 50 54 49 4f 4e 2c 0d 0a 20 20 20 _EXCEPTION,..
5e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5e50: 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d String.Form
5e60: 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 at(CultureInfo.C
5e70: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a urrentCulture,..
5e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5e90: 20 20 20 20 20 20 20 20 22 43 61 75 67 68 74 20 "Caught
5ea0: 65 78 63 65 70 74 69 6f 6e 20 69 6e 20 5c 22 46 exception in \"F
5eb0: 69 6e 61 6c 5c 22 20 6d 65 74 68 6f 64 3a 20 7b inal\" method: {
5ec0: 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 1}",..
5ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 29 e)
5ee0: 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a ); /* throw */..
5ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5f00: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
5f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 .. ca
5f20: 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 tch..
5f30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
5f40: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e // do nothin
5f50: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 g...
5f60: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }..
5f70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c }.... /// <
5f80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f summary>.. //
5f90: 2f 20 55 73 69 6e 67 20 72 65 66 6c 65 63 74 69 / Using reflecti
5fa0: 6f 6e 2c 20 65 6e 75 6d 65 72 61 74 65 20 61 6c on, enumerate al
5fb0: 6c 20 61 73 73 65 6d 62 6c 69 65 73 20 69 6e 20 l assemblies in
5fc0: 74 68 65 20 63 75 72 72 65 6e 74 20 61 70 70 64 the current appd
5fd0: 6f 6d 61 69 6e 20 6c 6f 6f 6b 69 6e 67 20 66 6f omain looking fo
5fe0: 72 20 63 6c 61 73 73 65 73 20 74 68 61 74 0d 0a r classes that..
5ff0: 20 20 20 20 2f 2f 2f 20 68 61 76 65 20 61 20 53 /// have a S
6000: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 QLiteFunctionAtt
6010: 72 69 62 75 74 65 20 61 74 74 72 69 62 75 74 65 ribute attribute
6020: 2c 20 61 6e 64 20 72 65 67 69 73 74 65 72 69 6e , and registerin
6030: 67 20 74 68 65 6d 20 61 63 63 6f 72 64 69 6e 67 g them according
6040: 6c 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 ly... /// </s
6050: 75 6d 6d 61 72 79 3e 0d 0a 23 69 66 20 21 50 4c ummary>..#if !PL
6060: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 ATFORM_COMPACTFR
6070: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 5b 53 65 AMEWORK.. [Se
6080: 63 75 72 69 74 79 2e 50 65 72 6d 69 73 73 69 6f curity.Permissio
6090: 6e 73 2e 46 69 6c 65 49 4f 50 65 72 6d 69 73 73 ns.FileIOPermiss
60a0: 69 6f 6e 28 53 65 63 75 72 69 74 79 2e 50 65 72 ion(Security.Per
60b0: 6d 69 73 73 69 6f 6e 73 2e 53 65 63 75 72 69 74 missions.Securit
60c0: 79 41 63 74 69 6f 6e 2e 41 73 73 65 72 74 2c 20 yAction.Assert,
60d0: 41 6c 6c 46 69 6c 65 73 20 3d 20 53 65 63 75 72 AllFiles = Secur
60e0: 69 74 79 2e 50 65 72 6d 69 73 73 69 6f 6e 73 2e ity.Permissions.
60f0: 46 69 6c 65 49 4f 50 65 72 6d 69 73 73 69 6f 6e FileIOPermission
6100: 41 63 63 65 73 73 2e 50 61 74 68 44 69 73 63 6f Access.PathDisco
6110: 76 65 72 79 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a very)]..#endif..
6120: 20 20 20 20 73 74 61 74 69 63 20 53 51 4c 69 74 static SQLit
6130: 65 46 75 6e 63 74 69 6f 6e 28 29 0d 0a 20 20 20 eFunction()..
6140: 20 7b 0d 0a 20 20 20 20 20 20 5f 72 65 67 69 73 {.. _regis
6150: 74 65 72 65 64 46 75 6e 63 74 69 6f 6e 73 20 3d teredFunctions =
6160: 20 6e 65 77 20 4c 69 73 74 3c 53 51 4c 69 74 65 new List<SQLite
6170: 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 FunctionAttribut
6180: 65 3e 28 29 3b 0d 0a 20 20 20 20 20 20 74 72 79 e>();.. try
6190: 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 .. {..#if !
61a0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 PLATFORM_COMPACT
61b0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 FRAMEWORK..
61c0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f //.. /
61d0: 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 / NOTE: If the "
61e0: 4e 6f 5f 53 51 4c 69 74 65 46 75 6e 63 74 69 6f No_SQLiteFunctio
61f0: 6e 73 22 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 ns" environment
6200: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 2c variable is set,
6210: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 .. //
6220: 20 20 20 73 6b 69 70 20 61 6c 6c 20 6f 75 72 20 skip all our
6230: 73 70 65 63 69 61 6c 20 63 6f 64 65 20 61 6e 64 special code and
6240: 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 2e 0d simply return..
6250: 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 . //..
6260: 20 20 20 20 20 69 66 20 28 55 6e 73 61 66 65 4e if (UnsafeN
6270: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 ativeMethods.Get
6280: 53 65 74 74 69 6e 67 56 61 6c 75 65 28 22 4e 6f SettingValue("No
6290: 5f 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 73 _SQLiteFunctions
62a0: 22 2c 20 6e 75 6c 6c 29 20 21 3d 20 6e 75 6c 6c ", null) != null
62b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 ).. ret
62c0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 urn;....
62d0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 SQLiteFunctionAt
62e0: 74 72 69 62 75 74 65 20 61 74 3b 0d 0a 20 20 20 tribute at;..
62f0: 20 20 20 20 20 53 79 73 74 65 6d 2e 52 65 66 6c System.Refl
6300: 65 63 74 69 6f 6e 2e 41 73 73 65 6d 62 6c 79 5b ection.Assembly[
6310: 5d 20 61 72 41 73 73 65 6d 62 6c 69 65 73 20 3d ] arAssemblies =
6320: 20 53 79 73 74 65 6d 2e 41 70 70 44 6f 6d 61 69 System.AppDomai
6330: 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e 2e n.CurrentDomain.
6340: 47 65 74 41 73 73 65 6d 62 6c 69 65 73 28 29 3b GetAssemblies();
6350: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 77 20 .. int w
6360: 3d 20 61 72 41 73 73 65 6d 62 6c 69 65 73 2e 4c = arAssemblies.L
6370: 65 6e 67 74 68 3b 0d 0a 20 20 20 20 20 20 20 20 ength;..
6380: 53 79 73 74 65 6d 2e 52 65 66 6c 65 63 74 69 6f System.Reflectio
6390: 6e 2e 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 73 n.AssemblyName s
63a0: 71 6c 69 74 65 20 3d 20 53 79 73 74 65 6d 2e 52 qlite = System.R
63b0: 65 66 6c 65 63 74 69 6f 6e 2e 41 73 73 65 6d 62 eflection.Assemb
63c0: 6c 79 2e 47 65 74 45 78 65 63 75 74 69 6e 67 41 ly.GetExecutingA
63d0: 73 73 65 6d 62 6c 79 28 29 2e 47 65 74 4e 61 6d ssembly().GetNam
63e0: 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 e();....
63f0: 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 for (int n = 0;
6400: 6e 20 3c 20 77 3b 20 6e 2b 2b 29 0d 0a 20 20 20 n < w; n++)..
6410: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
6420: 20 20 54 79 70 65 5b 5d 20 61 72 54 79 70 65 73 Type[] arTypes
6430: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f ;.. boo
6440: 6c 20 66 6f 75 6e 64 20 3d 20 66 61 6c 73 65 3b l found = false;
6450: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 79 73 74 .. Syst
6460: 65 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 2e 41 73 em.Reflection.As
6470: 73 65 6d 62 6c 79 4e 61 6d 65 5b 5d 20 72 65 66 semblyName[] ref
6480: 65 72 65 6e 63 65 73 3b 0d 0a 20 20 20 20 20 20 erences;..
6490: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 try..
64a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
64b0: 20 20 2f 2f 20 49 6e 73 70 65 63 74 20 6f 6e 6c // Inspect onl
64c0: 79 20 61 73 73 65 6d 62 6c 69 65 73 20 74 68 61 y assemblies tha
64d0: 74 20 72 65 66 65 72 65 6e 63 65 20 53 51 4c 69 t reference SQLi
64e0: 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 te..
64f0: 72 65 66 65 72 65 6e 63 65 73 20 3d 20 61 72 41 references = arA
6500: 73 73 65 6d 62 6c 69 65 73 5b 6e 5d 2e 47 65 74 ssemblies[n].Get
6510: 52 65 66 65 72 65 6e 63 65 64 41 73 73 65 6d 62 ReferencedAssemb
6520: 6c 69 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 lies();..
6530: 20 20 20 20 20 69 6e 74 20 74 20 3d 20 72 65 66 int t = ref
6540: 65 72 65 6e 63 65 73 2e 4c 65 6e 67 74 68 3b 0d erences.Length;.
6550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 . for
6560: 20 28 69 6e 74 20 7a 20 3d 20 30 3b 20 7a 20 3c (int z = 0; z <
6570: 20 74 3b 20 7a 2b 2b 29 0d 0a 20 20 20 20 20 20 t; z++)..
6580: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
6590: 20 20 20 20 20 20 20 69 66 20 28 72 65 66 65 72 if (refer
65a0: 65 6e 63 65 73 5b 7a 5d 2e 4e 61 6d 65 20 3d 3d ences[z].Name ==
65b0: 20 73 71 6c 69 74 65 2e 4e 61 6d 65 29 0d 0a 20 sqlite.Name)..
65c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
65d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
65e0: 66 6f 75 6e 64 20 3d 20 74 72 75 65 3b 0d 0a 20 found = true;..
65f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 b
6600: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 reak;..
6610: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
6620: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
6630: 20 20 20 20 20 69 66 20 28 66 6f 75 6e 64 20 3d if (found =
6640: 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20 = false)..
6650: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 continue
6660: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
6670: 20 61 72 54 79 70 65 73 20 3d 20 61 72 41 73 73 arTypes = arAss
6680: 65 6d 62 6c 69 65 73 5b 6e 5d 2e 47 65 74 54 79 emblies[n].GetTy
6690: 70 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 pes();..
66a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 63 }.. c
66b0: 61 74 63 68 20 28 52 65 66 6c 65 63 74 69 6f 6e atch (Reflection
66c0: 2e 52 65 66 6c 65 63 74 69 6f 6e 54 79 70 65 4c .ReflectionTypeL
66d0: 6f 61 64 45 78 63 65 70 74 69 6f 6e 20 65 29 0d oadException e).
66e0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 . {..
66f0: 20 20 20 20 20 20 20 20 20 20 61 72 54 79 70 65 arType
6700: 73 20 3d 20 65 2e 54 79 70 65 73 3b 0d 0a 20 20 s = e.Types;..
6710: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
6720: 20 20 20 20 20 20 20 69 6e 74 20 76 20 3d 20 61 int v = a
6730: 72 54 79 70 65 73 2e 4c 65 6e 67 74 68 3b 0d 0a rTypes.Length;..
6740: 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 for (i
6750: 6e 74 20 78 20 3d 20 30 3b 20 78 20 3c 20 76 3b nt x = 0; x < v;
6760: 20 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 x++)..
6770: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
6780: 69 66 20 28 61 72 54 79 70 65 73 5b 78 5d 20 3d if (arTypes[x] =
6790: 3d 20 6e 75 6c 6c 29 20 63 6f 6e 74 69 6e 75 65 = null) continue
67a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
67b0: 20 6f 62 6a 65 63 74 5b 5d 20 61 72 41 74 74 20 object[] arAtt
67c0: 3d 20 61 72 54 79 70 65 73 5b 78 5d 2e 47 65 74 = arTypes[x].Get
67d0: 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73 CustomAttributes
67e0: 28 74 79 70 65 6f 66 28 53 51 4c 69 74 65 46 75 (typeof(SQLiteFu
67f0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29 nctionAttribute)
6800: 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 , false);..
6810: 20 20 20 20 20 20 20 69 6e 74 20 75 20 3d 20 61 int u = a
6820: 72 41 74 74 2e 4c 65 6e 67 74 68 3b 0d 0a 20 20 rAtt.Length;..
6830: 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 for (i
6840: 6e 74 20 79 20 3d 20 30 3b 20 79 20 3c 20 75 3b nt y = 0; y < u;
6850: 20 79 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 y++)..
6860: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
6870: 20 20 20 20 61 74 20 3d 20 61 72 41 74 74 5b 79 at = arAtt[y
6880: 5d 20 61 73 20 53 51 4c 69 74 65 46 75 6e 63 74 ] as SQLiteFunct
6890: 69 6f 6e 41 74 74 72 69 62 75 74 65 3b 0d 0a 20 ionAttribute;..
68a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
68b0: 28 61 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 (at != null)..
68c0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
68d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 a
68e0: 74 2e 49 6e 73 74 61 6e 63 65 54 79 70 65 20 3d t.InstanceType =
68f0: 20 61 72 54 79 70 65 73 5b 78 5d 3b 0d 0a 20 20 arTypes[x];..
6900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 72 _r
6910: 65 67 69 73 74 65 72 65 64 46 75 6e 63 74 69 6f egisteredFunctio
6920: 6e 73 2e 41 64 64 28 61 74 29 3b 0d 0a 20 20 20 ns.Add(at);..
6930: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
6940: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
6950: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
6960: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 }..#endif..
6970: 20 20 20 7d 0d 0a 20 20 20 20 20 20 63 61 74 63 }.. catc
6980: 68 20 2f 2f 20 53 51 4c 69 74 65 20 70 72 6f 76 h // SQLite prov
6990: 69 64 65 72 20 63 61 6e 20 63 6f 6e 74 69 6e 75 ider can continu
69a0: 65 20 77 69 74 68 6f 75 74 20 62 65 69 6e 67 20 e without being
69b0: 61 62 6c 65 20 74 6f 20 66 69 6e 64 20 62 75 69 able to find bui
69c0: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 0d lt-in functions.
69d0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 . {..
69e0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.. }....
69f0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 /// <summary>..
6a00: 20 20 20 2f 2f 2f 20 4d 61 6e 75 61 6c 20 6d 65 /// Manual me
6a10: 74 68 6f 64 20 6f 66 20 72 65 67 69 73 74 65 72 thod of register
6a20: 69 6e 67 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 ing a function.
6a30: 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 73 The type must s
6a40: 74 69 6c 6c 20 68 61 76 65 20 74 68 65 20 53 51 till have the SQ
6a50: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 LiteFunctionAttr
6a60: 69 62 75 74 65 73 20 69 6e 20 6f 72 64 65 72 20 ibutes in order
6a70: 74 6f 20 77 6f 72 6b 0d 0a 20 20 20 20 2f 2f 2f to work.. ///
6a80: 20 70 72 6f 70 65 72 6c 79 2c 20 62 75 74 20 74 properly, but t
6a90: 68 69 73 20 69 73 20 61 20 77 6f 72 6b 61 72 6f his is a workaro
6aa0: 75 6e 64 20 66 6f 72 20 74 68 65 20 43 6f 6d 70 und for the Comp
6ab0: 61 63 74 20 46 72 61 6d 65 77 6f 72 6b 20 77 68 act Framework wh
6ac0: 65 72 65 20 65 6e 75 6d 65 72 61 74 69 6e 67 20 ere enumerating
6ad0: 61 73 73 65 6d 62 6c 69 65 73 20 69 73 20 6e 6f assemblies is no
6ae0: 74 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70 70 t currently supp
6af0: 6f 72 74 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 orted... ///
6b00: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 </summary>..
6b10: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d /// <param name=
6b20: 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20 6f "typ">The type o
6b30: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 f the function t
6b40: 6f 20 72 65 67 69 73 74 65 72 3c 2f 70 61 72 61 o register</para
6b50: 6d 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 m>.. public s
6b60: 74 61 74 69 63 20 76 6f 69 64 20 52 65 67 69 73 tatic void Regis
6b70: 74 65 72 46 75 6e 63 74 69 6f 6e 28 54 79 70 65 terFunction(Type
6b80: 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 typ).. {..
6b90: 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20 61 72 41 object[] arA
6ba0: 74 74 20 3d 20 74 79 70 2e 47 65 74 43 75 73 74 tt = typ.GetCust
6bb0: 6f 6d 41 74 74 72 69 62 75 74 65 73 28 74 79 70 omAttributes(typ
6bc0: 65 6f 66 28 53 51 4c 69 74 65 46 75 6e 63 74 69 eof(SQLiteFuncti
6bd0: 6f 6e 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 onAttribute), fa
6be0: 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74 lse);.. int
6bf0: 20 75 20 3d 20 61 72 41 74 74 2e 4c 65 6e 67 74 u = arAtt.Lengt
6c00: 68 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 h;.. SQLite
6c10: 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 FunctionAttribut
6c20: 65 20 61 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 e at;.... f
6c30: 6f 72 20 28 69 6e 74 20 79 20 3d 20 30 3b 20 79 or (int y = 0; y
6c40: 20 3c 20 75 3b 20 79 2b 2b 29 0d 0a 20 20 20 20 < u; y++)..
6c50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 74 20 {.. at
6c60: 3d 20 61 72 41 74 74 5b 79 5d 20 61 73 20 53 51 = arAtt[y] as SQ
6c70: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 LiteFunctionAttr
6c80: 69 62 75 74 65 3b 0d 0a 20 20 20 20 20 20 20 20 ibute;..
6c90: 69 66 20 28 61 74 20 21 3d 20 6e 75 6c 6c 29 0d if (at != null).
6ca0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 . {..
6cb0: 20 20 20 20 20 20 61 74 2e 49 6e 73 74 61 6e 63 at.Instanc
6cc0: 65 54 79 70 65 20 3d 20 74 79 70 3b 0d 0a 20 20 eType = typ;..
6cd0: 20 20 20 20 20 20 20 20 5f 72 65 67 69 73 74 65 _registe
6ce0: 72 65 64 46 75 6e 63 74 69 6f 6e 73 2e 41 64 64 redFunctions.Add
6cf0: 28 61 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d (at);.. }
6d00: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. }
6d10: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d .... /// <sum
6d20: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 mary>.. /// C
6d30: 61 6c 6c 65 64 20 62 79 20 53 51 4c 69 74 65 42 alled by SQLiteB
6d40: 61 73 65 20 64 65 72 69 76 65 64 20 63 6c 61 73 ase derived clas
6d50: 73 65 73 2c 20 74 68 69 73 20 66 75 6e 63 74 69 ses, this functi
6d60: 6f 6e 20 62 69 6e 64 73 20 61 6c 6c 20 75 73 65 on binds all use
6d70: 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 r-defined functi
6d80: 6f 6e 73 20 74 6f 20 61 20 63 6f 6e 6e 65 63 74 ons to a connect
6d90: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 74 ion... /// It
6da0: 20 69 73 20 64 6f 6e 65 20 74 68 69 73 20 77 61 is done this wa
6db0: 79 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 75 73 y so that all us
6dc0: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 er-defined funct
6dd0: 69 6f 6e 73 20 77 69 6c 6c 20 61 63 63 65 73 73 ions will access
6de0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73 the database us
6df0: 69 6e 67 20 74 68 65 20 73 61 6d 65 20 65 6e 63 ing the same enc
6e00: 6f 64 69 6e 67 20 73 63 68 65 6d 65 0d 0a 20 20 oding scheme..
6e10: 20 20 2f 2f 2f 20 61 73 20 74 68 65 20 63 6f 6e /// as the con
6e20: 6e 65 63 74 69 6f 6e 20 28 55 54 46 2d 38 20 6f nection (UTF-8 o
6e30: 72 20 55 54 46 2d 31 36 29 2e 0d 0a 20 20 20 20 r UTF-16)...
6e40: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a /// </summary>..
6e50: 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 /// <remarks
6e60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 77 >.. /// The w
6e70: 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e 73 rapper functions
6e80: 20 74 68 61 74 20 69 6e 74 65 72 6f 70 20 77 69 that interop wi
6e90: 74 68 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 63 th SQLite will c
6ea0: 72 65 61 74 65 20 61 20 75 6e 69 71 75 65 20 63 reate a unique c
6eb0: 6f 6f 6b 69 65 20 76 61 6c 75 65 2c 20 77 68 69 ookie value, whi
6ec0: 63 68 20 69 6e 74 65 72 6e 61 6c 6c 79 20 69 73 ch internally is
6ed0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0d 0a 20 a pointer to..
6ee0: 20 20 20 2f 2f 2f 20 61 6c 6c 20 74 68 65 20 77 /// all the w
6ef0: 72 61 70 70 65 64 20 63 61 6c 6c 62 61 63 6b 20 rapped callback
6f00: 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 functions. The
6f10: 69 6e 74 65 72 6f 70 20 66 75 6e 63 74 69 6f 6e interop function
6f20: 20 75 73 65 73 20 69 74 20 74 6f 20 6d 61 70 20 uses it to map
6f30: 43 44 65 63 6c 20 63 61 6c 6c 62 61 63 6b 73 20 CDecl callbacks
6f40: 74 6f 20 53 74 64 43 61 6c 6c 20 63 61 6c 6c 62 to StdCall callb
6f50: 61 63 6b 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c acks... /// <
6f60: 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f /remarks>.. /
6f70: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 // <param name="
6f80: 73 71 6c 62 61 73 65 22 3e 54 68 65 20 62 61 73 sqlbase">The bas
6f90: 65 20 6f 62 6a 65 63 74 20 6f 6e 20 77 68 69 63 e object on whic
6fa0: 68 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 h the functions
6fb0: 61 72 65 20 74 6f 20 62 69 6e 64 3c 2f 70 61 72 are to bind</par
6fc0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 am>.. /// <pa
6fd0: 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 ram name="flags"
6fe0: 3e 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 >The flags assoc
6ff0: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 iated with the p
7000: 61 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e arent connection
7010: 20 6f 62 6a 65 63 74 3c 2f 70 61 72 61 6d 3e 0d object</param>.
7020: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e . /// <return
7030: 73 3e 52 65 74 75 72 6e 73 20 61 20 6c 6f 67 69 s>Returns a logi
7040: 63 61 6c 20 6c 69 73 74 20 6f 66 20 66 75 6e 63 cal list of func
7050: 74 69 6f 6e 73 20 77 68 69 63 68 20 74 68 65 20 tions which the
7060: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 68 6f 75 6c connection shoul
7070: 64 20 72 65 74 61 69 6e 20 75 6e 74 69 6c 20 69 d retain until i
7080: 74 20 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 72 65 t is closed.</re
7090: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 turns>.. inte
70a0: 72 6e 61 6c 20 73 74 61 74 69 63 20 49 45 6e 75 rnal static IEnu
70b0: 6d 65 72 61 62 6c 65 3c 53 51 4c 69 74 65 46 75 merable<SQLiteFu
70c0: 6e 63 74 69 6f 6e 3e 20 42 69 6e 64 46 75 6e 63 nction> BindFunc
70d0: 74 69 6f 6e 73 28 53 51 4c 69 74 65 42 61 73 65 tions(SQLiteBase
70e0: 20 73 71 6c 62 61 73 65 2c 20 53 51 4c 69 74 65 sqlbase, SQLite
70f0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 ConnectionFlags
7100: 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 flags).. {..
7110: 20 20 20 20 20 20 20 4c 69 73 74 3c 53 51 4c 69 List<SQLi
7120: 74 65 46 75 6e 63 74 69 6f 6e 3e 20 6c 46 75 6e teFunction> lFun
7130: 63 74 69 6f 6e 73 20 3d 20 6e 65 77 20 4c 69 73 ctions = new Lis
7140: 74 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e t<SQLiteFunction
7150: 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 >();....
7160: 66 6f 72 65 61 63 68 20 28 53 51 4c 69 74 65 46 foreach (SQLiteF
7170: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 unctionAttribute
7180: 20 70 72 20 69 6e 20 5f 72 65 67 69 73 74 65 72 pr in _register
7190: 65 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 edFunctions)..
71a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
71b0: 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 SQLiteFunct
71c0: 69 6f 6e 20 66 20 3d 20 28 53 51 4c 69 74 65 46 ion f = (SQLiteF
71d0: 75 6e 63 74 69 6f 6e 29 41 63 74 69 76 61 74 6f unction)Activato
71e0: 72 2e 43 72 65 61 74 65 49 6e 73 74 61 6e 63 65 r.CreateInstance
71f0: 28 70 72 2e 49 6e 73 74 61 6e 63 65 54 79 70 65 (pr.InstanceType
7200: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
7210: 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c BindFunction(sql
7220: 62 61 73 65 2c 20 70 72 2c 20 66 2c 20 66 6c 61 base, pr, f, fla
7230: 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 gs);..
7240: 20 20 6c 46 75 6e 63 74 69 6f 6e 73 2e 41 64 64 lFunctions.Add
7250: 28 66 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d (f);.. }.
7260: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ... retur
7270: 6e 20 6c 46 75 6e 63 74 69 6f 6e 73 3b 0d 0a 20 n lFunctions;..
7280: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 }.... ///
7290: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f <summary>.. /
72a0: 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e // This function
72b0: 20 62 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65 binds a user-de
72c0: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 fined functions
72d0: 74 6f 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e to a connection.
72e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d .. /// </summ
72f0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 ary>.. /// <p
7300: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 71 6c 69 74 aram name="sqlit
7310: 65 42 61 73 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f eBase">.. ///
7320: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 The <see cref="
7330: 53 51 4c 69 74 65 42 61 73 65 22 20 2f 3e 20 6f SQLiteBase" /> o
7340: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 bject instance a
7350: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 ssociated with t
7360: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 he.. /// <see
7370: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e cref="SQLiteCon
7380: 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 74 68 61 74 nection" /> that
7390: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 73 68 the function sh
73a0: 6f 75 6c 64 20 62 65 20 62 6f 75 6e 64 20 74 6f ould be bound to
73b0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 ... /// </par
73c0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 am>.. /// <pa
73d0: 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 ram name="functi
73e0: 6f 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20 onAttribute">..
73f0: 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 /// The <see
7400: 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 cref="SQLiteFunc
7410: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f 3e tionAttribute"/>
7420: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 object instance
7430: 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 containing..
7440: 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61 74 /// the metadat
7450: 61 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 a for the functi
7460: 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d on to be bound..
7470: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d . /// </param
7480: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 >.. /// <para
7490: 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e m name="function
74a0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 ">.. /// The
74b0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 <see cref="SQLit
74c0: 65 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62 6a eFunction"/> obj
74d0: 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74 68 61 ect instance tha
74e0: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 t implements the
74f0: 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 .. /// functi
7500: 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d on to be bound..
7510: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d . /// </param
7520: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 >.. /// <para
7530: 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d m name="flags">.
7540: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 . /// The fla
7550: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 gs associated wi
7560: 74 68 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f th the parent co
7570: 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e nnection object.
7580: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 .. /// </para
7590: 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c m>.. internal
75a0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 42 69 6e static void Bin
75b0: 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 dFunction(..
75c0: 20 20 20 20 53 51 4c 69 74 65 42 61 73 65 20 73 SQLiteBase s
75d0: 71 6c 69 74 65 42 61 73 65 2c 0d 0a 20 20 20 20 qliteBase,..
75e0: 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 SQLiteFuncti
75f0: 6f 6e 41 74 74 72 69 62 75 74 65 20 66 75 6e 63 onAttribute func
7600: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 0d 0a tionAttribute,..
7610: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 SQLiteFu
7620: 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c nction function,
7630: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 .. SQLite
7640: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 ConnectionFlags
7650: 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 29 flags.. )
7660: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 .. {..
7670: 20 69 66 20 28 73 71 6c 69 74 65 42 61 73 65 20 if (sqliteBase
7680: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 == null)..
7690: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 throw new
76a0: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 ArgumentNullExce
76b0: 70 74 69 6f 6e 28 22 73 71 6c 69 74 65 42 61 73 ption("sqliteBas
76c0: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 e");....
76d0: 69 66 20 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 if (functionAttr
76e0: 69 62 75 74 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a ibute == null)..
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f thro
7700: 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 w new ArgumentNu
7710: 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 66 75 6e llException("fun
7720: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 29 ctionAttribute")
7730: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 ;.... if
7740: 28 66 75 6e 63 74 69 6f 6e 20 3d 3d 20 6e 75 6c (function == nul
7750: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l)..
7760: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 throw new Argume
7770: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 ntNullException(
7780: 22 66 75 6e 63 74 69 6f 6e 22 29 3b 0d 0a 0d 0a "function");....
7790: 20 20 20 20 20 20 20 20 46 75 6e 63 74 69 6f 6e Function
77a0: 54 79 70 65 20 66 75 6e 63 74 69 6f 6e 54 79 70 Type functionTyp
77b0: 65 20 3d 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 e = functionAttr
77c0: 69 62 75 74 65 2e 46 75 6e 63 54 79 70 65 3b 0d ibute.FuncType;.
77d0: 0a 0d 0a 20 20 20 20 20 20 20 20 66 75 6e 63 74 ... funct
77e0: 69 6f 6e 2e 5f 62 61 73 65 20 3d 20 73 71 6c 69 ion._base = sqli
77f0: 74 65 42 61 73 65 3b 0d 0a 20 20 20 20 20 20 20 teBase;..
7800: 20 66 75 6e 63 74 69 6f 6e 2e 5f 66 6c 61 67 73 function._flags
7810: 20 3d 20 66 6c 61 67 73 3b 0d 0a 0d 0a 20 20 20 = flags;....
7820: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 2e 5f 49 function._I
7830: 6e 76 6f 6b 65 46 75 6e 63 20 3d 20 28 66 75 6e nvokeFunc = (fun
7840: 63 74 69 6f 6e 54 79 70 65 20 3d 3d 20 46 75 6e ctionType == Fun
7850: 63 74 69 6f 6e 54 79 70 65 2e 53 63 61 6c 61 72 ctionType.Scalar
7860: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ) ?..
7870: 20 6e 65 77 20 53 51 4c 69 74 65 43 61 6c 6c 62 new SQLiteCallb
7880: 61 63 6b 28 66 75 6e 63 74 69 6f 6e 2e 53 63 61 ack(function.Sca
7890: 6c 61 72 43 61 6c 6c 62 61 63 6b 29 20 3a 20 6e larCallback) : n
78a0: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ull;....
78b0: 66 75 6e 63 74 69 6f 6e 2e 5f 53 74 65 70 46 75 function._StepFu
78c0: 6e 63 20 3d 20 28 66 75 6e 63 74 69 6f 6e 54 79 nc = (functionTy
78d0: 70 65 20 3d 3d 20 46 75 6e 63 74 69 6f 6e 54 79 pe == FunctionTy
78e0: 70 65 2e 41 67 67 72 65 67 61 74 65 29 20 3f 0d pe.Aggregate) ?.
78f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 . new
7900: 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 28 SQLiteCallback(
7910: 66 75 6e 63 74 69 6f 6e 2e 53 74 65 70 43 61 6c function.StepCal
7920: 6c 62 61 63 6b 29 20 3a 20 6e 75 6c 6c 3b 0d 0a lback) : null;..
7930: 0d 0a 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 .. functi
7940: 6f 6e 2e 5f 46 69 6e 61 6c 46 75 6e 63 20 3d 20 on._FinalFunc =
7950: 28 66 75 6e 63 74 69 6f 6e 54 79 70 65 20 3d 3d (functionType ==
7960: 20 46 75 6e 63 74 69 6f 6e 54 79 70 65 2e 41 67 FunctionType.Ag
7970: 67 72 65 67 61 74 65 29 20 3f 0d 0a 20 20 20 20 gregate) ?..
7980: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 new SQLi
7990: 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 28 teFinalCallback(
79a0: 66 75 6e 63 74 69 6f 6e 2e 46 69 6e 61 6c 43 61 function.FinalCa
79b0: 6c 6c 62 61 63 6b 29 20 3a 20 6e 75 6c 6c 3b 0d llback) : null;.
79c0: 0a 0d 0a 20 20 20 20 20 20 20 20 66 75 6e 63 74 ... funct
79d0: 69 6f 6e 2e 5f 43 6f 6d 70 61 72 65 46 75 6e 63 ion._CompareFunc
79e0: 20 3d 20 28 66 75 6e 63 74 69 6f 6e 54 79 70 65 = (functionType
79f0: 20 3d 3d 20 46 75 6e 63 74 69 6f 6e 54 79 70 65 == FunctionType
7a00: 2e 43 6f 6c 6c 61 74 69 6f 6e 29 20 3f 0d 0a 20 .Collation) ?..
7a10: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 new S
7a20: 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 66 QLiteCollation(f
7a30: 75 6e 63 74 69 6f 6e 2e 43 6f 6d 70 61 72 65 43 unction.CompareC
7a40: 61 6c 6c 62 61 63 6b 29 20 3a 20 6e 75 6c 6c 3b allback) : null;
7a50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 75 6e 63 .... func
7a60: 74 69 6f 6e 2e 5f 43 6f 6d 70 61 72 65 46 75 6e tion._CompareFun
7a70: 63 31 36 20 3d 20 28 66 75 6e 63 74 69 6f 6e 54 c16 = (functionT
7a80: 79 70 65 20 3d 3d 20 46 75 6e 63 74 69 6f 6e 54 ype == FunctionT
7a90: 79 70 65 2e 43 6f 6c 6c 61 74 69 6f 6e 29 20 3f ype.Collation) ?
7aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 .. ne
7ab0: 77 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f w SQLiteCollatio
7ac0: 6e 28 66 75 6e 63 74 69 6f 6e 2e 43 6f 6d 70 61 n(function.Compa
7ad0: 72 65 43 61 6c 6c 62 61 63 6b 31 36 29 20 3a 20 reCallback16) :
7ae0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 null;....
7af0: 20 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 66 string name = f
7b00: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 unctionAttribute
7b10: 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 .Name;....
7b20: 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 54 79 if (functionTy
7b30: 70 65 20 21 3d 20 46 75 6e 63 74 69 6f 6e 54 79 pe != FunctionTy
7b40: 70 65 2e 43 6f 6c 6c 61 74 69 6f 6e 29 0d 0a 20 pe.Collation)..
7b50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
7b60: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 65 65 64 43 bool needC
7b70: 6f 6c 6c 53 65 71 20 3d 20 28 66 75 6e 63 74 69 ollSeq = (functi
7b80: 6f 6e 20 69 73 20 53 51 4c 69 74 65 46 75 6e 63 on is SQLiteFunc
7b90: 74 69 6f 6e 45 78 29 3b 0d 0a 0d 0a 20 20 20 20 tionEx);....
7ba0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 42 61 sqliteBa
7bb0: 73 65 2e 43 72 65 61 74 65 46 75 6e 63 74 69 6f se.CreateFunctio
7bc0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n(..
7bd0: 20 20 20 20 6e 61 6d 65 2c 20 66 75 6e 63 74 69 name, functi
7be0: 6f 6e 41 74 74 72 69 62 75 74 65 2e 41 72 67 75 onAttribute.Argu
7bf0: 6d 65 6e 74 73 2c 20 6e 65 65 64 43 6f 6c 6c 53 ments, needCollS
7c00: 65 71 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 eq,..
7c10: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 2e 5f 49 function._I
7c20: 6e 76 6f 6b 65 46 75 6e 63 2c 20 66 75 6e 63 74 nvokeFunc, funct
7c30: 69 6f 6e 2e 5f 53 74 65 70 46 75 6e 63 2c 0d 0a ion._StepFunc,..
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7c50: 66 75 6e 63 74 69 6f 6e 2e 5f 46 69 6e 61 6c 46 function._FinalF
7c60: 75 6e 63 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d unc);.. }
7c70: 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a .. else..
7c80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
7c90: 20 20 20 20 20 20 20 73 71 6c 69 74 65 42 61 73 sqliteBas
7ca0: 65 2e 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f e.CreateCollatio
7cb0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n(..
7cc0: 20 20 20 20 6e 61 6d 65 2c 20 66 75 6e 63 74 69 name, functi
7cd0: 6f 6e 2e 5f 43 6f 6d 70 61 72 65 46 75 6e 63 2c on._CompareFunc,
7ce0: 20 66 75 6e 63 74 69 6f 6e 2e 5f 43 6f 6d 70 61 function._Compa
7cf0: 72 65 46 75 6e 63 31 36 29 3b 0d 0a 20 20 20 20 reFunc16);..
7d00: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 }.. }..
7d10: 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d }.... /// <summ
7d20: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 45 78 74 65 ary>.. /// Exte
7d30: 6e 64 73 20 53 51 4c 69 74 65 46 75 6e 63 74 69 nds SQLiteFuncti
7d40: 6f 6e 20 61 6e 64 20 61 6c 6c 6f 77 73 20 61 6e on and allows an
7d50: 20 69 6e 68 65 72 69 74 65 64 20 63 6c 61 73 73 inherited class
7d60: 20 74 6f 20 6f 62 74 61 69 6e 20 74 68 65 20 63 to obtain the c
7d70: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 ollating sequenc
7d80: 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 e associated wit
7d90: 68 20 61 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c h a function cal
7da0: 6c 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d l... /// </summ
7db0: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 72 65 6d ary>.. /// <rem
7dc0: 61 72 6b 73 3e 0d 0a 20 20 2f 2f 2f 20 55 73 65 arks>.. /// Use
7dd0: 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 r-defined functi
7de0: 6f 6e 73 20 63 61 6e 20 63 61 6c 6c 20 74 68 65 ons can call the
7df0: 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 GetCollationSeq
7e00: 75 65 6e 63 65 28 29 20 6d 65 74 68 6f 64 20 69 uence() method i
7e10: 6e 20 74 68 69 73 20 63 6c 61 73 73 20 61 6e 64 n this class and
7e20: 20 75 73 65 20 69 74 20 74 6f 20 63 6f 6d 70 61 use it to compa
7e30: 72 65 20 73 74 72 69 6e 67 73 20 61 6e 64 20 63 re strings and c
7e40: 68 61 72 20 61 72 72 61 79 73 2e 0d 0a 20 20 2f har arrays... /
7e50: 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 // </remarks>..
7e60: 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20 53 51 public class SQ
7e70: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 45 78 20 3a LiteFunctionEx :
7e80: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 0d SQLiteFunction.
7e90: 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 . {.. /// <s
7ea0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f ummary>.. ///
7eb0: 20 4f 62 74 61 69 6e 73 20 74 68 65 20 63 6f 6c Obtains the col
7ec0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 lating sequence
7ed0: 69 6e 20 65 66 66 65 63 74 20 66 6f 72 20 74 68 in effect for th
7ee0: 65 20 67 69 76 65 6e 20 66 75 6e 63 74 69 6f 6e e given function
7ef0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d ... /// </sum
7f00: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c mary>.. /// <
7f10: 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e returns></return
7f20: 73 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 s>.. protecte
7f30: 64 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 d CollationSeque
7f40: 6e 63 65 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e nce GetCollation
7f50: 53 65 71 75 65 6e 63 65 28 29 0d 0a 20 20 20 20 Sequence()..
7f60: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 {.. return
7f70: 5f 62 61 73 65 2e 47 65 74 43 6f 6c 6c 61 74 69 _base.GetCollati
7f80: 6f 6e 53 65 71 75 65 6e 63 65 28 74 68 69 73 2c onSequence(this,
7f90: 20 5f 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 _context);..
7fa0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f }.... //////
7fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
8010: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 #region IDispos
8020: 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d able "Pattern" M
8030: 65 6d 62 65 72 73 0d 0a 20 20 20 20 70 72 69 76 embers.. priv
8040: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 ate bool dispose
8050: 64 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 d;.. private
8060: 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 void CheckDispos
8070: 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f ed() /* throw */
8080: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 .. {..#if THR
8090: 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a OW_ON_DISPOSED..
80a0: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 if (disp
80b0: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 osed)..
80c0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a throw new Obj
80d0: 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 ectDisposedExcep
80e0: 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c 69 tion(typeof(SQLi
80f0: 74 65 46 75 6e 63 74 69 6f 6e 45 78 29 2e 4e 61 teFunctionEx).Na
8100: 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 me);..#endif..
8110: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f }.... /////
8120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
8180: 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 protected over
8190: 72 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73 ride void Dispos
81a0: 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 e(bool disposing
81b0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 ).. {..
81c0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b try.. {
81d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if
81e0: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 (!disposed)..
81f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
8200: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 //i
8210: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 f (disposing)..
8220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
8230: 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 /{..
8240: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f // //////
8250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
8270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8280: 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 // // dispose
8290: 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 managed resourc
82a0: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 es here.....
82b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
82c0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
82d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
82e0: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //////..
82f0: 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 //}....
8300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
8310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8330: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 /////..
8340: 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 // releas
8350: 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f e unmanaged reso
8360: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 urces here.....
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
8380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
83a0: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 /////..
83b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }.
83c0: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 . finally
83d0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 .. {..
83e0: 20 20 20 20 20 20 20 20 20 62 61 73 65 2e 44 69 base.Di
83f0: 73 70 6f 73 65 28 64 69 73 70 6f 73 69 6e 67 29 spose(disposing)
8400: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
8410: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
8420: 20 2f 2f 20 4e 4f 54 45 3a 20 45 76 65 72 79 74 // NOTE: Everyt
8430: 68 69 6e 67 20 73 68 6f 75 6c 64 20 62 65 20 66 hing should be f
8440: 75 6c 6c 79 20 64 69 73 70 6f 73 65 64 20 61 74 ully disposed at
8450: 20 74 68 69 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 this point...
8460: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
8470: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 dispos
8480: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 ed = true;..
8490: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 }.. }..
84a0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 #endregion..
84b0: 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d }.... /// <summ
84c0: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 ary>.. /// The
84d0: 74 79 70 65 20 6f 66 20 75 73 65 72 2d 64 65 66 type of user-def
84e0: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f ined function to
84f0: 20 64 65 63 6c 61 72 65 0d 0a 20 20 2f 2f 2f 20 declare.. ///
8500: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 </summary>.. pu
8510: 62 6c 69 63 20 65 6e 75 6d 20 46 75 6e 63 74 69 blic enum Functi
8520: 6f 6e 54 79 70 65 0d 0a 20 20 7b 0d 0a 20 20 20 onType.. {..
8530: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a /// <summary>..
8540: 20 20 20 20 2f 2f 2f 20 53 63 61 6c 61 72 20 66 /// Scalar f
8550: 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 64 65 73 unctions are des
8560: 69 67 6e 65 64 20 74 6f 20 62 65 20 63 61 6c 6c igned to be call
8570: 65 64 20 61 6e 64 20 72 65 74 75 72 6e 20 61 20 ed and return a
8580: 72 65 73 75 6c 74 20 69 6d 6d 65 64 69 61 74 65 result immediate
8590: 6c 79 2e 20 20 45 78 61 6d 70 6c 65 73 20 69 6e ly. Examples in
85a0: 63 6c 75 64 65 20 41 42 53 28 29 2c 20 55 70 70 clude ABS(), Upp
85b0: 65 72 28 29 2c 20 4c 6f 77 65 72 28 29 2c 20 65 er(), Lower(), e
85c0: 74 63 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 tc... /// </s
85d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 53 63 61 ummary>.. Sca
85e0: 6c 61 72 20 3d 20 30 2c 0d 0a 20 20 20 20 2f 2f lar = 0,.. //
85f0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 / <summary>..
8600: 20 2f 2f 2f 20 41 67 67 72 65 67 61 74 65 20 66 /// Aggregate f
8610: 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 64 65 73 unctions are des
8620: 69 67 6e 65 64 20 74 6f 20 61 63 63 75 6d 75 6c igned to accumul
8630: 61 74 65 20 64 61 74 61 20 75 6e 74 69 6c 20 74 ate data until t
8640: 68 65 20 65 6e 64 20 6f 66 20 61 20 63 61 6c 6c he end of a call
8650: 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e and then return
8660: 20 61 20 72 65 73 75 6c 74 20 67 6c 65 61 6e 65 a result gleane
8670: 64 20 66 72 6f 6d 20 74 68 65 20 61 63 63 75 6d d from the accum
8680: 75 6c 61 74 65 64 20 64 61 74 61 2e 0d 0a 20 20 ulated data...
8690: 20 20 2f 2f 2f 20 45 78 61 6d 70 6c 65 73 20 69 /// Examples i
86a0: 6e 63 6c 75 64 65 20 53 55 4d 28 29 2c 20 43 4f nclude SUM(), CO
86b0: 55 4e 54 28 29 2c 20 41 56 47 28 29 2c 20 65 74 UNT(), AVG(), et
86c0: 63 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 c... /// </su
86d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 41 67 67 72 mmary>.. Aggr
86e0: 65 67 61 74 65 20 3d 20 31 2c 0d 0a 20 20 20 20 egate = 1,..
86f0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 /// <summary>..
8700: 20 20 20 2f 2f 2f 20 43 6f 6c 6c 61 74 69 6f 6e /// Collation
8710: 20 73 65 71 75 65 6e 63 65 73 20 61 72 65 20 75 sequences are u
8720: 73 65 64 20 74 6f 20 73 6f 72 74 20 74 65 78 74 sed to sort text
8730: 75 61 6c 20 64 61 74 61 20 69 6e 20 61 20 63 75 ual data in a cu
8740: 73 74 6f 6d 20 6d 61 6e 6e 65 72 2c 20 61 6e 64 stom manner, and
8750: 20 61 70 70 65 61 72 20 69 6e 20 61 6e 20 4f 52 appear in an OR
8760: 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 20 DER BY clause.
8770: 54 79 70 69 63 61 6c 6c 79 20 74 65 78 74 20 69 Typically text i
8780: 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20 69 73 n an ORDER BY is
8790: 0d 0a 20 20 20 20 2f 2f 2f 20 73 6f 72 74 65 64 .. /// sorted
87a0: 20 75 73 69 6e 67 20 61 20 73 74 72 61 69 67 68 using a straigh
87b0: 74 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 t case-insensiti
87c0: 76 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 ve comparison fu
87d0: 6e 63 74 69 6f 6e 2e 20 20 43 75 73 74 6f 6d 20 nction. Custom
87e0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e collating sequen
87f0: 63 65 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 ces can be used
8800: 74 6f 20 61 6c 74 65 72 20 74 68 65 20 62 65 68 to alter the beh
8810: 61 76 69 6f 72 20 6f 66 20 74 65 78 74 20 73 6f avior of text so
8820: 72 74 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 69 rting.. /// i
8830: 6e 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64 n a user-defined
8840: 20 6d 61 6e 6e 65 72 2e 0d 0a 20 20 20 20 2f 2f manner... //
8850: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 / </summary>..
8860: 20 20 43 6f 6c 6c 61 74 69 6f 6e 20 3d 20 32 2c Collation = 2,
8870: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c .. }.... /// <
8880: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 summary>.. ///
8890: 41 6e 20 69 6e 74 65 72 6e 61 6c 20 63 61 6c 6c An internal call
88a0: 62 61 63 6b 20 64 65 6c 65 67 61 74 65 20 64 65 back delegate de
88b0: 63 6c 61 72 61 74 69 6f 6e 2e 0d 0a 20 20 2f 2f claration... //
88c0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 / </summary>..
88d0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d /// <param name=
88e0: 22 63 6f 6e 74 65 78 74 22 3e 52 61 77 20 6e 61 "context">Raw na
88f0: 74 69 76 65 20 63 6f 6e 74 65 78 74 20 70 6f 69 tive context poi
8900: 6e 74 65 72 20 66 6f 72 20 74 68 65 20 75 73 65 nter for the use
8910: 72 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 61 72 r function.</par
8920: 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 am>.. /// <para
8930: 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e 54 6f m name="argc">To
8940: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 tal number of ar
8950: 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 75 guments to the u
8960: 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 ser function.</p
8970: 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 aram>.. /// <pa
8980: 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e ram name="argv">
8990: 52 61 77 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 Raw native point
89a0: 65 72 20 74 6f 20 74 68 65 20 61 72 72 61 79 20 er to the array
89b0: 6f 66 20 72 61 77 20 6e 61 74 69 76 65 20 61 72 of raw native ar
89c0: 67 75 6d 65 6e 74 20 70 6f 69 6e 74 65 72 73 2e gument pointers.
89d0: 3c 2f 70 61 72 61 6d 3e 0d 0a 23 69 66 20 21 50 </param>..#if !P
89e0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 LATFORM_COMPACTF
89f0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 5b 55 6e 6d RAMEWORK.. [Unm
8a00: 61 6e 61 67 65 64 46 75 6e 63 74 69 6f 6e 50 6f anagedFunctionPo
8a10: 69 6e 74 65 72 28 43 61 6c 6c 69 6e 67 43 6f 6e inter(CallingCon
8a20: 76 65 6e 74 69 6f 6e 2e 43 64 65 63 6c 29 5d 0d vention.Cdecl)].
8a30: 0a 23 65 6e 64 69 66 0d 0a 20 20 70 75 62 6c 69 .#endif.. publi
8a40: 63 20 64 65 6c 65 67 61 74 65 20 76 6f 69 64 20 c delegate void
8a50: 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 28 49 SQLiteCallback(I
8a60: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 ntPtr context, i
8a70: 6e 74 20 61 72 67 63 2c 20 49 6e 74 50 74 72 20 nt argc, IntPtr
8a80: 61 72 67 76 29 3b 0d 0a 20 20 2f 2f 2f 20 3c 73 argv);.. /// <s
8a90: 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 41 ummary>.. /// A
8aa0: 6e 20 69 6e 74 65 72 6e 61 6c 20 66 69 6e 61 6c n internal final
8ab0: 20 63 61 6c 6c 62 61 63 6b 20 64 65 6c 65 67 61 callback delega
8ac0: 74 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 2e 0d te declaration..
8ad0: 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 . /// </summary
8ae0: 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 >.. /// <param
8af0: 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74 22 3e 52 name="context">R
8b00: 61 77 20 63 6f 6e 74 65 78 74 20 70 6f 69 6e 74 aw context point
8b10: 65 72 20 66 6f 72 20 74 68 65 20 75 73 65 72 20 er for the user
8b20: 66 75 6e 63 74 69 6f 6e 3c 2f 70 61 72 61 6d 3e function</param>
8b30: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f ..#if !PLATFORM_
8b40: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b COMPACTFRAMEWORK
8b50: 0d 0a 20 20 5b 55 6e 6d 61 6e 61 67 65 64 46 75 .. [UnmanagedFu
8b60: 6e 63 74 69 6f 6e 50 6f 69 6e 74 65 72 28 43 61 nctionPointer(Ca
8b70: 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 2e llingConvention.
8b80: 43 64 65 63 6c 29 5d 0d 0a 23 65 6e 64 69 66 0d Cdecl)]..#endif.
8b90: 0a 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 . internal dele
8ba0: 67 61 74 65 20 76 6f 69 64 20 53 51 4c 69 74 65 gate void SQLite
8bb0: 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 28 49 6e FinalCallback(In
8bc0: 74 50 74 72 20 63 6f 6e 74 65 78 74 29 3b 0d 0a tPtr context);..
8bd0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d /// <summary>.
8be0: 0a 20 20 2f 2f 2f 20 49 6e 74 65 72 6e 61 6c 20 . /// Internal
8bf0: 63 61 6c 6c 62 61 63 6b 20 64 65 6c 65 67 61 74 callback delegat
8c00: 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69 e for implementi
8c10: 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 ng collation seq
8c20: 75 65 6e 63 65 73 0d 0a 20 20 2f 2f 2f 20 3c 2f uences.. /// </
8c30: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 summary>.. ///
8c40: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 75 73 <param name="pus
8c50: 65 72 22 3e 4e 6f 74 20 75 73 65 64 3c 2f 70 61 er">Not used</pa
8c60: 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 ram>.. /// <par
8c70: 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 31 22 3e 4c am name="len1">L
8c80: 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 ength of the str
8c90: 69 6e 67 20 70 76 31 3c 2f 70 61 72 61 6d 3e 0d ing pv1</param>.
8ca0: 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 . /// <param na
8cb0: 6d 65 3d 22 70 76 31 22 3e 50 6f 69 6e 74 65 72 me="pv1">Pointer
8cc0: 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 73 74 to the first st
8cd0: 72 69 6e 67 20 74 6f 20 63 6f 6d 70 61 72 65 3c ring to compare<
8ce0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c /param>.. /// <
8cf0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 32 param name="len2
8d00: 22 3e 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 ">Length of the
8d10: 73 74 72 69 6e 67 20 70 76 32 3c 2f 70 61 72 61 string pv2</para
8d20: 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d m>.. /// <param
8d30: 20 6e 61 6d 65 3d 22 70 76 32 22 3e 50 6f 69 6e name="pv2">Poin
8d40: 74 65 72 20 74 6f 20 74 68 65 20 73 65 63 6f 6e ter to the secon
8d50: 64 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6d 70 d string to comp
8d60: 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f are</param>.. /
8d70: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 // <returns>Retu
8d80: 72 6e 73 20 2d 31 20 69 66 20 74 68 65 20 66 69 rns -1 if the fi
8d90: 72 73 74 20 73 74 72 69 6e 67 20 69 73 20 6c 65 rst string is le
8da0: 73 73 20 74 68 61 6e 20 74 68 65 20 73 65 63 6f ss than the seco
8db0: 6e 64 2e 20 20 30 20 69 66 20 74 68 65 79 20 61 nd. 0 if they a
8dc0: 72 65 20 65 71 75 61 6c 2c 20 6f 72 20 31 20 69 re equal, or 1 i
8dd0: 66 20 74 68 65 20 66 69 72 73 74 20 73 74 72 69 f the first stri
8de0: 6e 67 20 69 73 20 67 72 65 61 74 65 72 0d 0a 20 ng is greater..
8df0: 20 2f 2f 2f 20 74 68 61 6e 20 74 68 65 20 73 65 /// than the se
8e00: 63 6f 6e 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d cond.</returns>.
8e10: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 .#if !PLATFORM_C
8e20: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d OMPACTFRAMEWORK.
8e30: 0a 20 20 5b 55 6e 6d 61 6e 61 67 65 64 46 75 6e . [UnmanagedFun
8e40: 63 74 69 6f 6e 50 6f 69 6e 74 65 72 28 43 61 6c ctionPointer(Cal
8e50: 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 2e 43 lingConvention.C
8e60: 64 65 63 6c 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a decl)]..#endif..
8e70: 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 internal deleg
8e80: 61 74 65 20 69 6e 74 20 53 51 4c 69 74 65 43 6f ate int SQLiteCo
8e90: 6c 6c 61 74 69 6f 6e 28 49 6e 74 50 74 72 20 70 llation(IntPtr p
8ea0: 75 73 65 72 2c 20 69 6e 74 20 6c 65 6e 31 2c 20 user, int len1,
8eb0: 49 6e 74 50 74 72 20 70 76 31 2c 20 69 6e 74 20 IntPtr pv1, int
8ec0: 6c 65 6e 32 2c 20 49 6e 74 50 74 72 20 70 76 32 len2, IntPtr pv2
8ed0: 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d );.... /// <sum
8ee0: 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 mary>.. /// The
8ef0: 20 74 79 70 65 20 6f 66 20 63 6f 6c 6c 61 74 69 type of collati
8f00: 6e 67 20 73 65 71 75 65 6e 63 65 0d 0a 20 20 2f ng sequence.. /
8f10: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 // </summary>..
8f20: 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 43 6f 6c public enum Col
8f30: 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d 0d 0a lationTypeEnum..
8f40: 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 {.. /// <su
8f50: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 mmary>.. ///
8f60: 54 68 65 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e The built-in BIN
8f70: 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 ARY collating se
8f80: 71 75 65 6e 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 quence.. ///
8f90: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 </summary>..
8fa0: 42 69 6e 61 72 79 20 3d 20 31 2c 0d 0a 20 20 20 Binary = 1,..
8fb0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a /// <summary>..
8fc0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 62 75 69 6c /// The buil
8fd0: 74 2d 69 6e 20 4e 4f 43 41 53 45 20 63 6f 6c 6c t-in NOCASE coll
8fe0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 0d 0a ating sequence..
8ff0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 /// </summar
9000: 79 3e 0d 0a 20 20 20 20 4e 6f 43 61 73 65 20 3d y>.. NoCase =
9010: 20 32 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 2,.. /// <su
9020: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 mmary>.. ///
9030: 54 68 65 20 62 75 69 6c 74 2d 69 6e 20 52 45 56 The built-in REV
9040: 45 52 53 45 20 63 6f 6c 6c 61 74 69 6e 67 20 73 ERSE collating s
9050: 65 71 75 65 6e 63 65 0d 0a 20 20 20 20 2f 2f 2f equence.. ///
9060: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 </summary>..
9070: 20 52 65 76 65 72 73 65 20 3d 20 33 2c 0d 0a 20 Reverse = 3,..
9080: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e /// <summary>
9090: 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 63 75 73 74 .. /// A cust
90a0: 6f 6d 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 om user-defined
90b0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e collating sequen
90c0: 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 ce.. /// </su
90d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 43 75 73 74 mmary>.. Cust
90e0: 6f 6d 20 3d 20 30 2c 0d 0a 20 20 7d 0d 0a 0d 0a om = 0,.. }....
90f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d /// <summary>.
9100: 0a 20 20 2f 2f 2f 20 54 68 65 20 65 6e 63 6f 64 . /// The encod
9110: 69 6e 67 20 74 79 70 65 20 74 68 65 20 63 6f 6c ing type the col
9120: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 lation sequence
9130: 75 73 65 73 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 uses.. /// </su
9140: 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62 6c 69 63 mmary>.. public
9150: 20 65 6e 75 6d 20 43 6f 6c 6c 61 74 69 6f 6e 45 enum CollationE
9160: 6e 63 6f 64 69 6e 67 45 6e 75 6d 0d 0a 20 20 7b ncodingEnum.. {
9170: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 .. /// <summa
9180: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 ry>.. /// The
9190: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 collation seque
91a0: 6e 63 65 20 69 73 20 55 54 46 38 0d 0a 20 20 20 nce is UTF8..
91b0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d /// </summary>.
91c0: 0a 20 20 20 20 55 54 46 38 20 3d 20 31 2c 0d 0a . UTF8 = 1,..
91d0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 /// <summary
91e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 >.. /// The c
91f0: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 ollation sequenc
9200: 65 20 69 73 20 55 54 46 31 36 20 6c 69 74 74 6c e is UTF16 littl
9210: 65 2d 65 6e 64 69 61 6e 0d 0a 20 20 20 20 2f 2f e-endian.. //
9220: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 / </summary>..
9230: 20 20 55 54 46 31 36 4c 45 20 3d 20 32 2c 0d 0a UTF16LE = 2,..
9240: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 /// <summary
9250: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 >.. /// The c
9260: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 ollation sequenc
9270: 65 20 69 73 20 55 54 46 31 36 20 62 69 67 2d 65 e is UTF16 big-e
9280: 6e 64 69 61 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c ndian.. /// <
9290: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 55 /summary>.. U
92a0: 54 46 31 36 42 45 20 3d 20 33 2c 0d 0a 20 20 7d TF16BE = 3,.. }
92b0: 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 .... /// <summa
92c0: 72 79 3e 0d 0a 20 20 2f 2f 2f 20 41 20 73 74 72 ry>.. /// A str
92d0: 75 63 74 20 64 65 73 63 72 69 62 69 6e 67 20 74 uct describing t
92e0: 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 he collating seq
92f0: 75 65 6e 63 65 20 61 20 66 75 6e 63 74 69 6f 6e uence a function
9300: 20 69 73 20 65 78 65 63 75 74 69 6e 67 20 69 6e is executing in
9310: 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 .. /// </summar
9320: 79 3e 0d 0a 20 20 70 75 62 6c 69 63 20 73 74 72 y>.. public str
9330: 75 63 74 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 uct CollationSeq
9340: 75 65 6e 63 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 uence.. {..
9350: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 /// <summary>..
9360: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 /// The name
9370: 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 of the collating
9380: 20 73 65 71 75 65 6e 63 65 0d 0a 20 20 20 20 2f sequence.. /
9390: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 // </summary>..
93a0: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 public string
93b0: 20 4e 61 6d 65 3b 0d 0a 20 20 20 20 2f 2f 2f 20 Name;.. ///
93c0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f <summary>.. /
93d0: 2f 2f 20 54 68 65 20 74 79 70 65 20 6f 66 20 63 // The type of c
93e0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 ollating sequenc
93f0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d e.. /// </sum
9400: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 mary>.. publi
9410: 63 20 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 c CollationTypeE
9420: 6e 75 6d 20 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 num Type;....
9430: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a /// <summary>..
9440: 20 20 20 20 2f 2f 2f 20 54 68 65 20 74 65 78 74 /// The text
9450: 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65 encoding of the
9460: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 collation seque
9470: 6e 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 nce.. /// </s
9480: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 ummary>.. pub
9490: 6c 69 63 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 lic CollationEnc
94a0: 6f 64 69 6e 67 45 6e 75 6d 20 45 6e 63 6f 64 69 odingEnum Encodi
94b0: 6e 67 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c ng;.... /// <
94c0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f summary>.. //
94d0: 2f 20 43 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 / Context of the
94e0: 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 function that r
94f0: 65 71 75 65 73 74 65 64 20 74 68 65 20 63 6f 6c equested the col
9500: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 0d lating sequence.
9510: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 . /// </summa
9520: 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 ry>.. interna
9530: 6c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e l SQLiteFunction
9540: 20 5f 66 75 6e 63 3b 0d 0a 0d 0a 20 20 20 20 2f _func;.... /
9550: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 // <summary>..
9560: 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 /// Calls the
9570: 62 61 73 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 base collating s
9580: 65 71 75 65 6e 63 65 20 74 6f 20 63 6f 6d 70 61 equence to compa
9590: 72 65 20 74 77 6f 20 73 74 72 69 6e 67 73 0d 0a re two strings..
95a0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 /// </summar
95b0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 y>.. /// <par
95c0: 61 6d 20 6e 61 6d 65 3d 22 73 31 22 3e 54 68 65 am name="s1">The
95d0: 20 66 69 72 73 74 20 73 74 72 69 6e 67 20 74 6f first string to
95e0: 20 63 6f 6d 70 61 72 65 3c 2f 70 61 72 61 6d 3e compare</param>
95f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d .. /// <param
9600: 20 6e 61 6d 65 3d 22 73 32 22 3e 54 68 65 20 73 name="s2">The s
9610: 65 63 6f 6e 64 20 73 74 72 69 6e 67 20 74 6f 20 econd string to
9620: 63 6f 6d 70 61 72 65 3c 2f 70 61 72 61 6d 3e 0d compare</param>.
9630: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e . /// <return
9640: 73 3e 2d 31 20 69 66 20 73 31 20 69 73 20 6c 65 s>-1 if s1 is le
9650: 73 73 20 74 68 61 6e 20 73 32 2c 20 30 20 69 66 ss than s2, 0 if
9660: 20 73 31 20 69 73 20 65 71 75 61 6c 20 74 6f 20 s1 is equal to
9670: 73 32 2c 20 61 6e 64 20 31 20 69 66 20 73 31 20 s2, and 1 if s1
9680: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 is greater than
9690: 73 32 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 s2</returns>..
96a0: 20 20 70 75 62 6c 69 63 20 69 6e 74 20 43 6f 6d public int Com
96b0: 70 61 72 65 28 73 74 72 69 6e 67 20 73 31 2c 20 pare(string s1,
96c0: 73 74 72 69 6e 67 20 73 32 29 0d 0a 20 20 20 20 string s2)..
96d0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 {.. return
96e0: 5f 66 75 6e 63 2e 5f 62 61 73 65 2e 43 6f 6e 74 _func._base.Cont
96f0: 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 extCollateCompar
9700: 65 28 45 6e 63 6f 64 69 6e 67 2c 20 5f 66 75 6e e(Encoding, _fun
9710: 63 2e 5f 63 6f 6e 74 65 78 74 2c 20 73 31 2c 20 c._context, s1,
9720: 73 32 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 s2);.. }....
9730: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e /// <summary>
9740: 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 .. /// Calls
9750: 74 68 65 20 62 61 73 65 20 63 6f 6c 6c 61 74 69 the base collati
9760: 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20 63 ng sequence to c
9770: 6f 6d 70 61 72 65 20 74 77 6f 20 63 68 61 72 61 ompare two chara
9780: 63 74 65 72 20 61 72 72 61 79 73 0d 0a 20 20 20 cter arrays..
9790: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d /// </summary>.
97a0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 . /// <param
97b0: 6e 61 6d 65 3d 22 63 31 22 3e 54 68 65 20 66 69 name="c1">The fi
97c0: 72 73 74 20 61 72 72 61 79 20 74 6f 20 63 6f 6d rst array to com
97d0: 70 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 pare</param>..
97e0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d /// <param nam
97f0: 65 3d 22 63 32 22 3e 54 68 65 20 73 65 63 6f 6e e="c2">The secon
9800: 64 20 61 72 72 61 79 20 74 6f 20 63 6f 6d 70 61 d array to compa
9810: 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 re</param>..
9820: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 2d 31 20 /// <returns>-1
9830: 69 66 20 63 31 20 69 73 20 6c 65 73 73 20 74 68 if c1 is less th
9840: 61 6e 20 63 32 2c 20 30 20 69 66 20 63 31 20 69 an c2, 0 if c1 i
9850: 73 20 65 71 75 61 6c 20 74 6f 20 63 32 2c 20 61 s equal to c2, a
9860: 6e 64 20 31 20 69 66 20 63 31 20 69 73 20 67 72 nd 1 if c1 is gr
9870: 65 61 74 65 72 20 74 68 61 6e 20 63 32 3c 2f 72 eater than c2</r
9880: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 eturns>.. pub
9890: 6c 69 63 20 69 6e 74 20 43 6f 6d 70 61 72 65 28 lic int Compare(
98a0: 63 68 61 72 5b 5d 20 63 31 2c 20 63 68 61 72 5b char[] c1, char[
98b0: 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 ] c2).. {..
98c0: 20 20 20 20 72 65 74 75 72 6e 20 5f 66 75 6e 63 return _func
98d0: 2e 5f 62 61 73 65 2e 43 6f 6e 74 65 78 74 43 6f ._base.ContextCo
98e0: 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 45 6e 63 llateCompare(Enc
98f0: 6f 64 69 6e 67 2c 20 5f 66 75 6e 63 2e 5f 63 6f oding, _func._co
9900: 6e 74 65 78 74 2c 20 63 31 2c 20 63 32 29 3b 0d ntext, c1, c2);.
9910: 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a . }.. }..}..