System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact c640ec6173b3e4b7d4a987d9c977f2560ea2894b:


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 0a 20 2a 20 41 44 4f  *********. * ADO
0040: 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50 72  .NET 2.0 Data Pr
0050: 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74  ovider for SQLit
0060: 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0a 20 2a  e Version 3.X. *
0070: 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f 62 65   Written by Robe
0080: 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f 62 65  rt Simpson (robe
0090: 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65 73 6f  rt@blackcastleso
00a0: 66 74 2e 63 6f 6d 29 0a 20 2a 0a 20 2a 20 52 65  ft.com). *. * Re
00b0: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
00c0: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
00d0: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
00e0: 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  k!. ************
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 2f 0a 0a 6e  ************/..n
0120: 61 6d 65 73 70 61 63 65 20 53 79 73 74 65 6d 2e  amespace System.
0130: 44 61 74 61 2e 53 51 4c 69 74 65 0a 7b 0a 20 20  Data.SQLite.{.  
0140: 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0a 0a 20  using System;.. 
0150: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
0160: 20 2f 2f 2f 20 41 20 73 69 6d 70 6c 65 20 63 75   /// A simple cu
0170: 73 74 6f 6d 20 61 74 74 72 69 62 75 74 65 20 74  stom attribute t
0180: 6f 20 65 6e 61 62 6c 65 20 75 73 20 74 6f 20 65  o enable us to e
0190: 61 73 69 6c 79 20 66 69 6e 64 20 75 73 65 72 2d  asily find user-
01a0: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
01b0: 73 20 69 6e 0a 20 20 2f 2f 2f 20 74 68 65 20 6c  s in.  /// the l
01c0: 6f 61 64 65 64 20 61 73 73 65 6d 62 6c 69 65 73  oaded assemblies
01d0: 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20   and initialize 
01e0: 74 68 65 6d 20 69 6e 20 53 51 4c 69 74 65 20 61  them in SQLite a
01f0: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 61 72  s connections ar
0200: 65 20 6d 61 64 65 2e 0a 20 20 2f 2f 2f 20 3c 2f  e made..  /// </
0210: 73 75 6d 6d 61 72 79 3e 0a 20 20 5b 41 74 74 72  summary>.  [Attr
0220: 69 62 75 74 65 55 73 61 67 65 28 41 74 74 72 69  ibuteUsage(Attri
0230: 62 75 74 65 54 61 72 67 65 74 73 2e 43 6c 61 73  buteTargets.Clas
0240: 73 2c 20 49 6e 68 65 72 69 74 65 64 20 3d 20 66  s, Inherited = f
0250: 61 6c 73 65 2c 20 41 6c 6c 6f 77 4d 75 6c 74 69  alse, AllowMulti
0260: 70 6c 65 20 3d 20 74 72 75 65 29 5d 0a 20 20 70  ple = true)].  p
0270: 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61  ublic sealed cla
0280: 73 73 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ss SQLiteFunctio
0290: 6e 41 74 74 72 69 62 75 74 65 20 3a 20 41 74 74  nAttribute : Att
02a0: 72 69 62 75 74 65 0a 20 20 7b 0a 20 20 20 20 70  ribute.  {.    p
02b0: 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 20 20  rivate string   
02c0: 20 20 20 20 5f 6e 61 6d 65 3b 0a 20 20 20 20 70      _name;.    p
02d0: 72 69 76 61 74 65 20 69 6e 74 20 20 20 20 20 20  rivate int      
02e0: 20 20 20 20 5f 61 72 67 75 6d 65 6e 74 43 6f 75      _argumentCou
02f0: 6e 74 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20  nt;.    private 
0300: 46 75 6e 63 74 69 6f 6e 54 79 70 65 20 5f 66 75  FunctionType _fu
0310: 6e 63 74 69 6f 6e 54 79 70 65 3b 0a 20 20 20 20  nctionType;.    
0320: 70 72 69 76 61 74 65 20 54 79 70 65 20 20 20 20  private Type    
0330: 20 20 20 20 20 5f 69 6e 73 74 61 6e 63 65 54 79       _instanceTy
0340: 70 65 3b 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  pe;..    /// <su
0350: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 44  mmary>.    /// D
0360: 65 66 61 75 6c 74 20 63 6f 6e 73 74 72 75 63 74  efault construct
0370: 6f 72 2c 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  or, initializes 
0380: 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 76 61 72  the internal var
0390: 69 61 62 6c 65 73 20 66 6f 72 20 74 68 65 20 66  iables for the f
03a0: 75 6e 63 74 69 6f 6e 2e 0a 20 20 20 20 2f 2f 2f  unction..    ///
03b0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
03c0: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 46 75 6e  public SQLiteFun
03d0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 28 29  ctionAttribute()
03e0: 0a 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28  .        : this(
03f0: 53 74 72 69 6e 67 2e 45 6d 70 74 79 2c 20 2d 31  String.Empty, -1
0400: 2c 20 46 75 6e 63 74 69 6f 6e 54 79 70 65 2e 53  , FunctionType.S
0410: 63 61 6c 61 72 29 0a 20 20 20 20 7b 0a 20 20 20  calar).    {.   
0420: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
0430: 6e 67 2e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ng..    }..    /
0440: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
0450: 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20   /// Constructs 
0460: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
0470: 68 69 73 20 63 6c 61 73 73 2e 0a 20 20 20 20 2f  his class..    /
0480: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
0490: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
04a0: 65 3d 22 6e 61 6d 65 22 3e 0a 20 20 20 20 2f 2f  e="name">.    //
04b0: 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  / The name of th
04c0: 65 20 66 75 6e 63 74 69 6f 6e 2c 20 61 73 20 73  e function, as s
04d0: 65 65 6e 20 62 79 20 74 68 65 20 53 51 4c 69 74  een by the SQLit
04e0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0a  e core library..
04f0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
0500: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
0510: 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e 74 43 6f  name="argumentCo
0520: 75 6e 74 22 3e 0a 20 20 20 20 2f 2f 2f 20 54 68  unt">.    /// Th
0530: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
0540: 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 66  ments that the f
0550: 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 61 63 63  unction will acc
0560: 65 70 74 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ept..    /// </p
0570: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  aram>.    /// <p
0580: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74  aram name="funct
0590: 69 6f 6e 54 79 70 65 22 3e 0a 20 20 20 20 2f 2f  ionType">.    //
05a0: 2f 20 54 68 65 20 74 79 70 65 20 6f 66 20 66 75  / The type of fu
05b0: 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63  nction being dec
05c0: 6c 61 72 65 64 2e 20 20 54 68 69 73 20 77 69 6c  lared.  This wil
05d0: 6c 20 65 69 74 68 65 72 20 62 65 20 53 63 61 6c  l either be Scal
05e0: 61 72 2c 0a 20 20 20 20 2f 2f 2f 20 41 67 67 72  ar,.    /// Aggr
05f0: 65 67 61 74 65 2c 20 6f 72 20 43 6f 6c 6c 61 74  egate, or Collat
0600: 69 6f 6e 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ion..    /// </p
0610: 61 72 61 6d 3e 0a 20 20 20 20 70 75 62 6c 69 63  aram>.    public
0620: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41   SQLiteFunctionA
0630: 74 74 72 69 62 75 74 65 28 0a 20 20 20 20 20 20  ttribute(.      
0640: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0a 20    string name,. 
0650: 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d         int argum
0660: 65 6e 74 43 6f 75 6e 74 2c 0a 20 20 20 20 20 20  entCount,.      
0670: 20 20 46 75 6e 63 74 69 6f 6e 54 79 70 65 20 66    FunctionType f
0680: 75 6e 63 74 69 6f 6e 54 79 70 65 0a 20 20 20 20  unctionType.    
0690: 20 20 20 20 29 0a 20 20 20 20 7b 0a 20 20 20 20      ).    {.    
06a0: 20 20 20 20 5f 6e 61 6d 65 20 3d 20 6e 61 6d 65      _name = name
06b0: 3b 0a 20 20 20 20 20 20 20 20 5f 61 72 67 75 6d  ;.        _argum
06c0: 65 6e 74 43 6f 75 6e 74 20 3d 20 61 72 67 75 6d  entCount = argum
06d0: 65 6e 74 43 6f 75 6e 74 3b 0a 20 20 20 20 20 20  entCount;.      
06e0: 20 20 5f 66 75 6e 63 74 69 6f 6e 54 79 70 65 20    _functionType 
06f0: 3d 20 66 75 6e 63 74 69 6f 6e 54 79 70 65 3b 0a  = functionType;.
0700: 20 20 20 20 20 20 20 20 5f 69 6e 73 74 61 6e 63          _instanc
0710: 65 54 79 70 65 20 3d 20 6e 75 6c 6c 3b 0a 20 20  eType = null;.  
0720: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
0730: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 54  mmary>.    /// T
0740: 68 65 20 66 75 6e 63 74 69 6f 6e 27 73 20 6e 61  he function's na
0750: 6d 65 20 61 73 20 69 74 20 77 69 6c 6c 20 62 65  me as it will be
0760: 20 75 73 65 64 20 69 6e 20 53 51 4c 69 74 65 20   used in SQLite 
0770: 63 6f 6d 6d 61 6e 64 20 74 65 78 74 2e 0a 20 20  command text..  
0780: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0790: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69  .    public stri
07a0: 6e 67 20 4e 61 6d 65 0a 20 20 20 20 7b 0a 20 20  ng Name.    {.  
07b0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
07c0: 20 5f 6e 61 6d 65 3b 20 7d 0a 20 20 20 20 20 20   _name; }.      
07d0: 73 65 74 20 7b 20 5f 6e 61 6d 65 20 3d 20 76 61  set { _name = va
07e0: 6c 75 65 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20  lue; }.    }..  
07f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
0800: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
0810: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
0820: 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 65 78  this function ex
0830: 70 65 63 74 73 2e 20 20 2d 31 20 69 66 20 74 68  pects.  -1 if th
0840: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
0850: 6d 65 6e 74 73 20 69 73 20 76 61 72 69 61 62 6c  ments is variabl
0860: 65 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  e..    /// </sum
0870: 6d 61 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63  mary>.    public
0880: 20 69 6e 74 20 41 72 67 75 6d 65 6e 74 73 0a 20   int Arguments. 
0890: 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b     {.      get {
08a0: 20 72 65 74 75 72 6e 20 5f 61 72 67 75 6d 65 6e   return _argumen
08b0: 74 43 6f 75 6e 74 3b 20 7d 0a 20 20 20 20 20 20  tCount; }.      
08c0: 73 65 74 20 7b 20 5f 61 72 67 75 6d 65 6e 74 43  set { _argumentC
08d0: 6f 75 6e 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0a  ount = value; }.
08e0: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
08f0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
0900: 20 54 68 65 20 74 79 70 65 20 6f 66 20 66 75 6e   The type of fun
0910: 63 74 69 6f 6e 20 74 68 69 73 20 69 6d 70 6c 65  ction this imple
0920: 6d 65 6e 74 61 74 69 6f 6e 20 77 69 6c 6c 20 62  mentation will b
0930: 65 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  e..    /// </sum
0940: 6d 61 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63  mary>.    public
0950: 20 46 75 6e 63 74 69 6f 6e 54 79 70 65 20 46 75   FunctionType Fu
0960: 6e 63 54 79 70 65 0a 20 20 20 20 7b 0a 20 20 20  ncType.    {.   
0970: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
0980: 5f 66 75 6e 63 74 69 6f 6e 54 79 70 65 3b 20 7d  _functionType; }
0990: 0a 20 20 20 20 20 20 73 65 74 20 7b 20 5f 66 75  .      set { _fu
09a0: 6e 63 74 69 6f 6e 54 79 70 65 20 3d 20 76 61 6c  nctionType = val
09b0: 75 65 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20  ue; }.    }..   
09c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
09d0: 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
09e0: 63 72 65 66 3d 22 53 79 73 74 65 6d 2e 54 79 70  cref="System.Typ
09f0: 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
0a00: 74 61 6e 63 65 20 74 68 61 74 20 64 65 73 63 72  tance that descr
0a10: 69 62 65 73 20 74 68 65 20 63 6c 61 73 73 0a 20  ibes the class. 
0a20: 20 20 20 2f 2f 2f 20 63 6f 6e 74 61 69 6e 69 6e     /// containin
0a30: 67 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  g the implementa
0a40: 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 61 73 73  tion for the ass
0a50: 6f 63 69 61 74 65 64 20 66 75 6e 63 74 69 6f 6e  ociated function
0a60: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
0a70: 61 72 79 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61  ary>.    interna
0a80: 6c 20 54 79 70 65 20 49 6e 73 74 61 6e 63 65 54  l Type InstanceT
0a90: 79 70 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ype.    {.      
0aa0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
0ab0: 69 6e 73 74 61 6e 63 65 54 79 70 65 3b 20 7d 0a  instanceType; }.
0ac0: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 5f 69          set { _i
0ad0: 6e 73 74 61 6e 63 65 54 79 70 65 20 3d 20 76 61  nstanceType = va
0ae0: 6c 75 65 3b 20 7d 0a 20 20 20 20 7d 0a 20 20 7d  lue; }.    }.  }
0af0: 0a 7d 0a                                         .}.