System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 1efa1802b7465783a8e2ce153ac3ad39107019fd:


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 20 0a 20 2a 20 52  ft.com). * . * R
00b0: 65 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70  eleased to the p
00c0: 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73  ublic domain, us
00d0: 65 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69  e at your own ri
00e0: 73 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  sk!. ***********
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 2f 0a 0a  *************/..
0120: 6e 61 6d 65 73 70 61 63 65 20 53 79 73 74 65 6d  namespace System
0130: 2e 44 61 74 61 2e 53 51 4c 69 74 65 0a 7b 0a 20  .Data.SQLite.{. 
0140: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a   using System;..
0150: 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79  ..  /// <summary
0160: 3e 0a 20 20 2f 2f 2f 20 41 20 73 69 6d 70 6c 65  >.  /// A simple
0170: 20 63 75 73 74 6f 6d 20 61 74 74 72 69 62 75 74   custom attribut
0180: 65 20 74 6f 20 65 6e 61 62 6c 65 20 75 73 20 74  e to enable us t
0190: 6f 20 65 61 73 69 6c 79 20 66 69 6e 64 20 75 73  o easily find us
01a0: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
01b0: 69 6f 6e 73 20 69 6e 0a 20 20 2f 2f 2f 20 74 68  ions in.  /// th
01c0: 65 20 6c 6f 61 64 65 64 20 61 73 73 65 6d 62 6c  e loaded assembl
01d0: 69 65 73 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  ies and initiali
01e0: 7a 65 20 74 68 65 6d 20 69 6e 20 53 51 4c 69 74  ze them in SQLit
01f0: 65 20 61 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  e as connections
0200: 20 61 72 65 20 6d 61 64 65 2e 0a 20 20 2f 2f 2f   are made..  ///
0210: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 5b 41   </summary>.  [A
0220: 74 74 72 69 62 75 74 65 55 73 61 67 65 28 41 74  ttributeUsage(At
0230: 74 72 69 62 75 74 65 54 61 72 67 65 74 73 2e 43  tributeTargets.C
0240: 6c 61 73 73 2c 20 49 6e 68 65 72 69 74 65 64 20  lass, Inherited 
0250: 3d 20 66 61 6c 73 65 2c 20 41 6c 6c 6f 77 4d 75  = false, AllowMu
0260: 6c 74 69 70 6c 65 20 3d 20 74 72 75 65 29 5d 0a  ltiple = true)].
0270: 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20    public sealed 
0280: 63 6c 61 73 73 20 53 51 4c 69 74 65 46 75 6e 63  class SQLiteFunc
0290: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 3a 20  tionAttribute : 
02a0: 41 74 74 72 69 62 75 74 65 0a 20 20 7b 0a 20 20  Attribute.  {.  
02b0: 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
02c0: 20 20 20 20 20 20 20 5f 6e 61 6d 65 3b 0d 0a 20         _name;.. 
02d0: 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 20     private int  
02e0: 20 20 20 20 20 20 20 20 5f 61 72 67 75 6d 65 6e          _argumen
02f0: 74 43 6f 75 6e 74 3b 0a 20 20 20 20 70 72 69 76  tCount;.    priv
0300: 61 74 65 20 46 75 6e 63 74 69 6f 6e 54 79 70 65  ate FunctionType
0310: 20 5f 66 75 6e 63 74 69 6f 6e 54 79 70 65 3b 0a   _functionType;.
0320: 20 20 20 20 70 72 69 76 61 74 65 20 54 79 70 65      private Type
0330: 20 20 20 20 20 20 20 20 20 5f 69 6e 73 74 61 6e           _instan
0340: 63 65 54 79 70 65 3b 0a 0a 20 20 20 20 2f 2f 2f  ceType;..    ///
0350: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
0360: 2f 2f 20 44 65 66 61 75 6c 74 20 63 6f 6e 73 74  // Default const
0370: 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c 69  ructor, initiali
0380: 7a 65 73 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  zes the internal
0390: 20 76 61 72 69 61 62 6c 65 73 20 66 6f 72 20 74   variables for t
03a0: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 20  he function..   
03b0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
03c0: 0a 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69  .    public SQLi
03d0: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
03e0: 75 74 65 28 29 0d 0a 20 20 20 20 20 20 20 20 3a  ute()..        :
03f0: 20 74 68 69 73 28 53 74 72 69 6e 67 2e 45 6d 70   this(String.Emp
0400: 74 79 2c 20 2d 31 2c 20 46 75 6e 63 74 69 6f 6e  ty, -1, Function
0410: 54 79 70 65 2e 53 63 61 6c 61 72 29 0d 0a 20 20  Type.Scalar)..  
0420: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20    {..        // 
0430: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
0440: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
0450: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
0460: 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69   Constructs an i
0470: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
0480: 63 6c 61 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  class...    /// 
0490: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
04a0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
04b0: 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  "name">..    ///
04c0: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
04d0: 20 66 75 6e 63 74 69 6f 6e 2c 20 61 73 20 73 65   function, as se
04e0: 65 6e 20 62 79 20 74 68 65 20 53 51 4c 69 74 65  en by the SQLite
04f0: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a   core library...
0500: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
0510: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0520: 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e 74 43   name="argumentC
0530: 6f 75 6e 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  ount">..    /// 
0540: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  The number of ar
0550: 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65  guments that the
0560: 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 61   function will a
0570: 63 63 65 70 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ccept...    /// 
0580: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0590: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
05a0: 75 6e 63 74 69 6f 6e 54 79 70 65 22 3e 0d 0a 20  unctionType">.. 
05b0: 20 20 20 2f 2f 2f 20 54 68 65 20 74 79 70 65 20     /// The type 
05c0: 6f 66 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e  of function bein
05d0: 67 20 64 65 63 6c 61 72 65 64 2e 20 20 54 68 69  g declared.  Thi
05e0: 73 20 77 69 6c 6c 20 65 69 74 68 65 72 20 62 65  s will either be
05f0: 20 53 63 61 6c 61 72 2c 0d 0a 20 20 20 20 2f 2f   Scalar,..    //
0600: 2f 20 41 67 67 72 65 67 61 74 65 2c 20 6f 72 20  / Aggregate, or 
0610: 43 6f 6c 6c 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  Collation...    
0620: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
0630: 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 46    public SQLiteF
0640: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
0650: 28 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  (..        strin
0660: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
0670: 20 69 6e 74 20 61 72 67 75 6d 65 6e 74 43 6f 75   int argumentCou
0680: 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 46 75 6e  nt,..        Fun
0690: 63 74 69 6f 6e 54 79 70 65 20 66 75 6e 63 74 69  ctionType functi
06a0: 6f 6e 54 79 70 65 0d 0a 20 20 20 20 20 20 20 20  onType..        
06b0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
06c0: 20 20 5f 6e 61 6d 65 20 3d 20 6e 61 6d 65 3b 0d    _name = name;.
06d0: 0a 20 20 20 20 20 20 20 20 5f 61 72 67 75 6d 65  .        _argume
06e0: 6e 74 43 6f 75 6e 74 20 3d 20 61 72 67 75 6d 65  ntCount = argume
06f0: 6e 74 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20  ntCount;..      
0700: 20 20 5f 66 75 6e 63 74 69 6f 6e 54 79 70 65 20    _functionType 
0710: 3d 20 66 75 6e 63 74 69 6f 6e 54 79 70 65 3b 0d  = functionType;.
0720: 0a 20 20 20 20 20 20 20 20 5f 69 6e 73 74 61 6e  .        _instan
0730: 63 65 54 79 70 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  ceType = null;..
0740: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c      }..    /// <
0750: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
0760: 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 27 73 20   The function's 
0770: 6e 61 6d 65 20 61 73 20 69 74 20 77 69 6c 6c 20  name as it will 
0780: 62 65 20 75 73 65 64 20 69 6e 20 53 51 4c 69 74  be used in SQLit
0790: 65 20 63 6f 6d 6d 61 6e 64 20 74 65 78 74 2e 0a  e command text..
07a0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
07b0: 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74  y>.    public st
07c0: 72 69 6e 67 20 4e 61 6d 65 0a 20 20 20 20 7b 0a  ring Name.    {.
07d0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
07e0: 72 6e 20 5f 6e 61 6d 65 3b 20 7d 0a 20 20 20 20  rn _name; }.    
07f0: 20 20 73 65 74 20 7b 20 5f 6e 61 6d 65 20 3d 20    set { _name = 
0800: 76 61 6c 75 65 3b 20 7d 0a 20 20 20 20 7d 0a 0a  value; }.    }..
0810: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0820: 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75  >.    /// The nu
0830: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
0840: 73 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  s this function 
0850: 65 78 70 65 63 74 73 2e 20 20 2d 31 20 69 66 20  expects.  -1 if 
0860: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
0870: 67 75 6d 65 6e 74 73 20 69 73 20 76 61 72 69 61  guments is varia
0880: 62 6c 65 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ble..    /// </s
0890: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 75 62 6c  ummary>.    publ
08a0: 69 63 20 69 6e 74 20 41 72 67 75 6d 65 6e 74 73  ic int Arguments
08b0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
08c0: 74 20 7b 20 72 65 74 75 72 6e 20 5f 61 72 67 75  t { return _argu
08d0: 6d 65 6e 74 43 6f 75 6e 74 3b 20 7d 0d 0a 20 20  mentCount; }..  
08e0: 20 20 20 20 73 65 74 20 7b 20 5f 61 72 67 75 6d      set { _argum
08f0: 65 6e 74 43 6f 75 6e 74 20 3d 20 76 61 6c 75 65  entCount = value
0900: 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ; }.    }..    /
0910: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
0920: 20 2f 2f 2f 20 54 68 65 20 74 79 70 65 20 6f 66   /// The type of
0930: 20 66 75 6e 63 74 69 6f 6e 20 74 68 69 73 20 69   function this i
0940: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 77 69  mplementation wi
0950: 6c 6c 20 62 65 2e 0a 20 20 20 20 2f 2f 2f 20 3c  ll be..    /// <
0960: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70 75  /summary>.    pu
0970: 62 6c 69 63 20 46 75 6e 63 74 69 6f 6e 54 79 70  blic FunctionTyp
0980: 65 20 46 75 6e 63 54 79 70 65 0a 20 20 20 20 7b  e FuncType.    {
0990: 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74  .      get { ret
09a0: 75 72 6e 20 5f 66 75 6e 63 74 69 6f 6e 54 79 70  urn _functionTyp
09b0: 65 3b 20 7d 0a 20 20 20 20 20 20 73 65 74 20 7b  e; }.      set {
09c0: 20 5f 66 75 6e 63 74 69 6f 6e 54 79 70 65 20 3d   _functionType =
09d0: 20 76 61 6c 75 65 3b 20 7d 0a 20 20 20 20 7d 0a   value; }.    }.
09e0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
09f0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
0a00: 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73 74 65  <see cref="Syste
0a10: 6d 2e 54 79 70 65 22 20 2f 3e 20 6f 62 6a 65 63  m.Type" /> objec
0a20: 74 20 69 6e 73 74 61 6e 63 65 20 74 68 61 74 20  t instance that 
0a30: 64 65 73 63 72 69 62 65 73 20 74 68 65 20 63 6c  describes the cl
0a40: 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e  ass..    /// con
0a50: 74 61 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c  taining the impl
0a60: 65 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 74  ementation for t
0a70: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 66 75  he associated fu
0a80: 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  nction...    ///
0a90: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
0aa0: 69 6e 74 65 72 6e 61 6c 20 54 79 70 65 20 49 6e  internal Type In
0ab0: 73 74 61 6e 63 65 54 79 70 65 0a 20 20 20 20 7b  stanceType.    {
0ac0: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 20 7b 20  ..        get { 
0ad0: 72 65 74 75 72 6e 20 5f 69 6e 73 74 61 6e 63 65  return _instance
0ae0: 54 79 70 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Type; }..       
0af0: 20 73 65 74 20 7b 20 5f 69 6e 73 74 61 6e 63 65   set { _instance
0b00: 54 79 70 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0a  Type = value; }.
0b10: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a                  }.  }.}.