System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 77c41c94be0e51e4cfaf4084716c431b4409ab0f:


0000: ef bb bf 2f 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 2a 2a 2a 0a 20 2a 20  ************. * 
0040: 41 44 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61  ADO.NET 2.0 Data
0050: 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51   Provider for SQ
0060: 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58  Lite Version 3.X
0070: 0a 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52  . * Written by R
0080: 6f 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72  obert Simpson (r
0090: 6f 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c  obert@blackcastl
00a0: 65 73 6f 66 74 2e 63 6f 6d 29 0a 20 2a 20 0a 20  esoft.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 0a 20 2a 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: 2f 0a 0a 6e 61 6d 65 73 70 61 63 65 20 53 51 4c  /..namespace SQL
0130: 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 44 65 73  ite.Designer.Des
0140: 69 67 6e 0a 7b 0a 20 20 75 73 69 6e 67 20 53 79  ign.{.  using Sy
0150: 73 74 65 6d 3b 0a 20 20 75 73 69 6e 67 20 53 79  stem;.  using Sy
0160: 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73  stem.Collections
0170: 2e 47 65 6e 65 72 69 63 3b 0a 20 20 75 73 69 6e  .Generic;.  usin
0180: 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74  g System.Collect
0190: 69 6f 6e 73 3b 0a 20 20 75 73 69 6e 67 20 53 79  ions;.  using Sy
01a0: 73 74 65 6d 2e 54 65 78 74 3b 0a 20 20 75 73 69  stem.Text;.  usi
01b0: 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e  ng System.Compon
01c0: 65 6e 74 4d 6f 64 65 6c 3b 0a 20 20 75 73 69 6e  entModel;.  usin
01d0: 67 20 53 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e 65  g System.Compone
01e0: 6e 74 4d 6f 64 65 6c 2e 44 65 73 69 67 6e 3b 0a  ntModel.Design;.
01f0: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 57    using System.W
0200: 69 6e 64 6f 77 73 2e 46 6f 72 6d 73 3b 0a 20 20  indows.Forms;.  
0210: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 72 61  using System.Dra
0220: 77 69 6e 67 2e 44 65 73 69 67 6e 3b 0a 20 20 75  wing.Design;.  u
0230: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
0240: 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ;.  using System
0250: 2e 44 61 74 61 2e 43 6f 6d 6d 6f 6e 3b 0a 0a 20  .Data.Common;.. 
0260: 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 54 72 69   public enum Tri
0270: 67 67 65 72 4f 63 63 75 72 73 0a 20 20 7b 0a 20  ggerOccurs.  {. 
0280: 20 20 20 42 65 66 6f 72 65 20 3d 20 30 2c 0a 20     Before = 0,. 
0290: 20 20 20 41 66 74 65 72 20 3d 20 31 2c 0a 20 20     After = 1,.  
02a0: 7d 0a 20 20 0a 20 20 70 75 62 6c 69 63 20 65 6e  }.  .  public en
02b0: 75 6d 20 56 69 65 77 54 72 69 67 67 65 72 4f 63  um ViewTriggerOc
02c0: 63 75 72 73 0a 20 20 7b 0a 20 20 20 20 49 6e 73  curs.  {.    Ins
02d0: 74 65 61 64 4f 66 20 3d 20 32 0a 20 20 7d 0a 0a  teadOf = 2.  }..
02e0: 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 54 72    public enum Tr
02f0: 69 67 67 65 72 54 79 70 65 0a 20 20 7b 0a 20 20  iggerType.  {.  
0300: 20 20 44 65 6c 65 74 65 20 3d 20 30 2c 0a 20 20    Delete = 0,.  
0310: 20 20 49 6e 73 65 72 74 20 3d 20 31 2c 0a 20 20    Insert = 1,.  
0320: 20 20 55 70 64 61 74 65 20 3d 20 32 2c 0a 20 20    Update = 2,.  
0330: 7d 0a 0a 20 20 69 6e 74 65 72 6e 61 6c 20 63 6c  }..  internal cl
0340: 61 73 73 20 56 69 65 77 54 72 69 67 67 65 72 20  ass ViewTrigger 
0350: 3a 20 54 72 69 67 67 65 72 2c 20 49 43 6c 6f 6e  : Trigger, IClon
0360: 65 61 62 6c 65 0a 20 20 7b 0a 20 20 20 20 69 6e  eable.  {.    in
0370: 74 65 72 6e 61 6c 20 56 69 65 77 54 72 69 67 67  ternal ViewTrigg
0380: 65 72 28 56 69 65 77 54 72 69 67 67 65 72 20 73  er(ViewTrigger s
0390: 6f 75 72 63 65 29 0a 20 20 20 20 20 20 3a 20 62  ource).      : b
03a0: 61 73 65 28 73 6f 75 72 63 65 29 0a 20 20 20 20  ase(source).    
03b0: 7b 0a 20 20 20 20 20 20 5f 74 72 69 67 67 65 72  {.      _trigger
03c0: 4f 63 63 75 72 73 20 3d 20 28 69 6e 74 29 56 69  Occurs = (int)Vi
03d0: 65 77 54 72 69 67 67 65 72 4f 63 63 75 72 73 2e  ewTriggerOccurs.
03e0: 49 6e 73 74 65 61 64 4f 66 3b 0a 20 20 20 20 7d  InsteadOf;.    }
03f0: 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 56  ..    internal V
0400: 69 65 77 54 72 69 67 67 65 72 28 56 69 65 77 54  iewTrigger(ViewT
0410: 61 62 6c 65 42 61 73 65 20 70 61 72 65 6e 74 2c  ableBase parent,
0420: 20 44 61 74 61 52 6f 77 20 72 6f 77 29 0a 20 20   DataRow row).  
0430: 20 20 20 20 3a 20 62 61 73 65 28 70 61 72 65 6e      : base(paren
0440: 74 2c 20 72 6f 77 29 0a 20 20 20 20 7b 0a 20 20  t, row).    {.  
0450: 20 20 20 20 5f 74 72 69 67 67 65 72 4f 63 63 75      _triggerOccu
0460: 72 73 20 3d 20 28 69 6e 74 29 56 69 65 77 54 72  rs = (int)ViewTr
0470: 69 67 67 65 72 4f 63 63 75 72 73 2e 49 6e 73 74  iggerOccurs.Inst
0480: 65 61 64 4f 66 3b 0a 20 20 20 20 7d 0a 0a 20 20  eadOf;.    }..  
0490: 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 74 72 75    [Browsable(tru
04a0: 65 29 5d 0a 20 20 20 20 5b 44 65 66 61 75 6c 74  e)].    [Default
04b0: 56 61 6c 75 65 28 56 69 65 77 54 72 69 67 67 65  Value(ViewTrigge
04c0: 72 4f 63 63 75 72 73 2e 49 6e 73 74 65 61 64 4f  rOccurs.InsteadO
04d0: 66 29 5d 0a 20 20 20 20 5b 43 61 74 65 67 6f 72  f)].    [Categor
04e0: 79 28 22 45 76 65 6e 74 22 29 5d 0a 20 20 20 20  y("Event")].    
04f0: 5b 44 65 73 63 72 69 70 74 69 6f 6e 28 22 44 65  [Description("De
0500: 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74 68  termines when th
0510: 65 20 74 72 69 67 67 65 72 20 66 69 72 65 73 2e  e trigger fires.
0520: 20 20 46 6f 72 20 74 61 62 6c 65 73 2c 20 42 65    For tables, Be
0530: 66 6f 72 65 20 6f 72 20 41 66 74 65 72 20 61 72  fore or After ar
0540: 65 20 73 75 70 70 6f 72 74 65 64 2e 20 20 46 6f  e supported.  Fo
0550: 72 20 76 69 65 77 73 2c 20 49 6e 73 74 65 61 64  r views, Instead
0560: 20 4f 66 20 69 73 20 74 68 65 20 6f 6e 6c 79 20   Of is the only 
0570: 6f 70 74 69 6f 6e 2e 22 29 5d 0a 20 20 20 20 70  option.")].    p
0580: 75 62 6c 69 63 20 6e 65 77 20 56 69 65 77 54 72  ublic new ViewTr
0590: 69 67 67 65 72 4f 63 63 75 72 73 20 4f 63 63 75  iggerOccurs Occu
05a0: 72 73 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67  rs.    {.      g
05b0: 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  et.      {.     
05c0: 20 20 20 72 65 74 75 72 6e 20 56 69 65 77 54 72     return ViewTr
05d0: 69 67 67 65 72 4f 63 63 75 72 73 2e 49 6e 73 74  iggerOccurs.Inst
05e0: 65 61 64 4f 66 3b 0a 20 20 20 20 20 20 7d 0a 20  eadOf;.      }. 
05f0: 20 20 20 7d 0a 0a 20 20 20 20 23 72 65 67 69 6f     }..    #regio
0600: 6e 20 49 43 6c 6f 6e 65 61 62 6c 65 20 4d 65 6d  n ICloneable Mem
0610: 62 65 72 73 0a 0a 20 20 20 20 6f 62 6a 65 63 74  bers..    object
0620: 20 49 43 6c 6f 6e 65 61 62 6c 65 2e 43 6c 6f 6e   ICloneable.Clon
0630: 65 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  e().    {.      
0640: 72 65 74 75 72 6e 20 6e 65 77 20 56 69 65 77 54  return new ViewT
0650: 72 69 67 67 65 72 28 74 68 69 73 29 3b 0a 20 20  rigger(this);.  
0660: 20 20 7d 0a 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
0670: 69 6f 6e 0a 20 20 7d 0a 0a 20 20 5b 44 65 66 61  ion.  }..  [Defa
0680: 75 6c 74 50 72 6f 70 65 72 74 79 28 22 53 51 4c  ultProperty("SQL
0690: 22 29 5d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 63  ")].  internal c
06a0: 6c 61 73 73 20 54 72 69 67 67 65 72 20 3a 20 49  lass Trigger : I
06b0: 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f 6e 2c 20  HaveConnection, 
06c0: 49 43 6c 6f 6e 65 61 62 6c 65 0a 20 20 7b 0a 20  ICloneable.  {. 
06d0: 20 20 20 70 72 6f 74 65 63 74 65 64 20 69 6e 74     protected int
06e0: 20 5f 74 72 69 67 67 65 72 4f 63 63 75 72 73 3b   _triggerOccurs;
06f0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 54 72 69  .    private Tri
0700: 67 67 65 72 54 79 70 65 20 5f 74 79 70 65 20 3d  ggerType _type =
0710: 20 54 72 69 67 67 65 72 54 79 70 65 2e 55 70 64   TriggerType.Upd
0720: 61 74 65 3b 0a 20 20 20 20 2f 2f 70 72 69 76 61  ate;.    //priva
0730: 74 65 20 62 6f 6f 6c 20 5f 65 61 63 68 52 6f 77  te bool _eachRow
0740: 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ;.    private st
0750: 72 69 6e 67 20 5f 77 68 65 6e 3b 0a 20 20 20 20  ring _when;.    
0760: 70 72 69 76 61 74 65 20 56 69 65 77 54 61 62 6c  private ViewTabl
0770: 65 42 61 73 65 20 5f 74 61 62 6c 65 3b 0a 20 20  eBase _table;.  
0780: 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
0790: 20 5f 6e 61 6d 65 3b 0a 20 20 20 20 70 72 69 76   _name;.    priv
07a0: 61 74 65 20 73 74 72 69 6e 67 20 5f 63 6f 6c 75  ate string _colu
07b0: 6d 6e 73 3b 0a 20 20 20 20 70 72 69 76 61 74 65  mns;.    private
07c0: 20 73 74 72 69 6e 67 20 5f 61 63 74 69 6f 6e 3b   string _action;
07d0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f  .    private boo
07e0: 6c 20 5f 63 61 6c 63 6e 61 6d 65 3b 0a 20 20 20  l _calcname;.   
07f0: 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
0800: 5f 6f 72 69 67 73 71 6c 3b 0a 20 20 20 20 70 72  _origsql;.    pr
0810: 69 76 61 74 65 20 62 6f 6f 6c 20 5f 64 69 72 74  ivate bool _dirt
0820: 79 20 3d 20 66 61 6c 73 65 3b 0a 0a 20 20 20 20  y = false;..    
0830: 70 72 6f 74 65 63 74 65 64 20 54 72 69 67 67 65  protected Trigge
0840: 72 28 54 72 69 67 67 65 72 20 73 6f 75 72 63 65  r(Trigger source
0850: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f 74  ).    {.      _t
0860: 72 69 67 67 65 72 4f 63 63 75 72 73 20 3d 20 73  riggerOccurs = s
0870: 6f 75 72 63 65 2e 5f 74 72 69 67 67 65 72 4f 63  ource._triggerOc
0880: 63 75 72 73 3b 0a 20 20 20 20 20 20 5f 74 79 70  curs;.      _typ
0890: 65 20 3d 20 73 6f 75 72 63 65 2e 5f 74 79 70 65  e = source._type
08a0: 3b 0a 20 20 20 20 20 20 2f 2f 5f 65 61 63 68 52  ;.      //_eachR
08b0: 6f 77 20 3d 20 73 6f 75 72 63 65 2e 5f 65 61 63  ow = source._eac
08c0: 68 52 6f 77 3b 0a 20 20 20 20 20 20 5f 77 68 65  hRow;.      _whe
08d0: 6e 20 3d 20 73 6f 75 72 63 65 2e 5f 77 68 65 6e  n = source._when
08e0: 3b 0a 20 20 20 20 20 20 5f 74 61 62 6c 65 20 3d  ;.      _table =
08f0: 20 73 6f 75 72 63 65 2e 5f 74 61 62 6c 65 3b 0a   source._table;.
0900: 20 20 20 20 20 20 5f 6e 61 6d 65 20 3d 20 73 6f        _name = so
0910: 75 72 63 65 2e 5f 6e 61 6d 65 3b 0a 20 20 20 20  urce._name;.    
0920: 20 20 5f 63 6f 6c 75 6d 6e 73 20 3d 20 73 6f 75    _columns = sou
0930: 72 63 65 2e 5f 63 6f 6c 75 6d 6e 73 3b 0a 20 20  rce._columns;.  
0940: 20 20 20 20 5f 61 63 74 69 6f 6e 20 3d 20 73 6f      _action = so
0950: 75 72 63 65 2e 5f 61 63 74 69 6f 6e 3b 0a 20 20  urce._action;.  
0960: 20 20 20 20 5f 64 69 72 74 79 20 3d 20 73 6f 75      _dirty = sou
0970: 72 63 65 2e 5f 64 69 72 74 79 3b 0a 20 20 20 20  rce._dirty;.    
0980: 7d 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  }..    internal 
0990: 76 6f 69 64 20 4d 61 6b 65 44 69 72 74 79 28 29  void MakeDirty()
09a0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f 64 69  .    {.      _di
09b0: 72 74 79 20 3d 20 74 72 75 65 3b 0a 20 20 20 20  rty = true;.    
09c0: 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c  }..    [Browsabl
09d0: 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20 69 6e  e(false)].    in
09e0: 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 49 73 44 69  ternal bool IsDi
09f0: 72 74 79 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  rty.    {.      
0a00: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 64 69  get { return _di
0a10: 72 74 79 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20  rty; }.    }..  
0a20: 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f 69 64 20    internal void 
0a30: 43 6c 65 61 72 44 69 72 74 79 28 29 0a 20 20 20  ClearDirty().   
0a40: 20 7b 0a 20 20 20 20 20 20 5f 64 69 72 74 79 20   {.      _dirty 
0a50: 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 7d 0a 0a  = false;.    }..
0a60: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 69 72      internal vir
0a70: 74 75 61 6c 20 76 6f 69 64 20 57 72 69 74 65 53  tual void WriteS
0a80: 71 6c 28 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ql(StringBuilder
0a90: 20 62 75 69 6c 64 65 72 29 0a 20 20 20 20 7b 0a   builder).    {.
0aa0: 20 20 20 20 20 20 57 72 69 74 65 53 71 6c 28 62        WriteSql(b
0ab0: 75 69 6c 64 65 72 2c 20 66 61 6c 73 65 29 3b 0a  uilder, false);.
0ac0: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61      }..    priva
0ad0: 74 65 20 76 6f 69 64 20 57 72 69 74 65 53 71 6c  te void WriteSql
0ae0: 28 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 62  (StringBuilder b
0af0: 75 69 6c 64 65 72 2c 20 62 6f 6f 6c 20 74 65 6d  uilder, bool tem
0b00: 70 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 73  p).    {.      s
0b10: 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 4e 61 6d  tring name = Nam
0b20: 65 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 74 65  e;..      if (te
0b30: 6d 70 20 3d 3d 20 74 72 75 65 29 0a 20 20 20 20  mp == true).    
0b40: 20 20 20 20 6e 61 6d 65 20 3d 20 53 74 72 69 6e      name = Strin
0b50: 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5f 7b 31  g.Format("{0}_{1
0b60: 7d 22 2c 20 6e 61 6d 65 2c 20 47 75 69 64 2e 4e  }", name, Guid.N
0b70: 65 77 47 75 69 64 28 29 2e 54 6f 53 74 72 69 6e  ewGuid().ToStrin
0b80: 67 28 22 4e 22 29 29 3b 0a 0a 20 20 20 20 20 20  g("N"));..      
0b90: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f  builder.AppendFo
0ba0: 72 6d 61 74 28 22 43 52 45 41 54 45 20 54 52 49  rmat("CREATE TRI
0bb0: 47 47 45 52 20 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d  GGER [{0}].[{1}]
0bc0: 22 2c 20 5f 74 61 62 6c 65 2e 43 61 74 61 6c 6f  ", _table.Catalo
0bd0: 67 2c 20 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20  g, name);.      
0be0: 73 77 69 74 63 68 20 28 5f 74 72 69 67 67 65 72  switch (_trigger
0bf0: 4f 63 63 75 72 73 29 0a 20 20 20 20 20 20 7b 0a  Occurs).      {.
0c00: 20 20 20 20 20 20 20 20 63 61 73 65 20 30 3a 0a          case 0:.
0c10: 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65            builde
0c20: 72 2e 41 70 70 65 6e 64 28 22 20 42 45 46 4f 52  r.Append(" BEFOR
0c30: 45 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 62  E");.          b
0c40: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61  reak;.        ca
0c50: 73 65 20 31 3a 0a 20 20 20 20 20 20 20 20 20 20  se 1:.          
0c60: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22  builder.Append("
0c70: 20 41 46 54 45 52 22 29 3b 0a 20 20 20 20 20 20   AFTER");.      
0c80: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
0c90: 20 20 20 63 61 73 65 20 32 3a 0a 20 20 20 20 20     case 2:.     
0ca0: 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70       builder.App
0cb0: 65 6e 64 28 22 20 49 4e 53 54 45 41 44 20 4f 46  end(" INSTEAD OF
0cc0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72  ");.          br
0cd0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  eak;.      }..  
0ce0: 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65      builder.Appe
0cf0: 6e 64 46 6f 72 6d 61 74 28 22 20 7b 30 7d 22 2c  ndFormat(" {0}",
0d00: 20 5f 74 79 70 65 2e 54 6f 53 74 72 69 6e 67 28   _type.ToString(
0d10: 29 2e 54 6f 55 70 70 65 72 49 6e 76 61 72 69 61  ).ToUpperInvaria
0d20: 6e 74 28 29 29 3b 0a 20 20 20 20 20 20 69 66 20  nt());.      if 
0d30: 28 5f 74 79 70 65 20 3d 3d 20 54 72 69 67 67 65  (_type == Trigge
0d40: 72 54 79 70 65 2e 55 70 64 61 74 65 20 26 26 20  rType.Update && 
0d50: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
0d60: 6d 70 74 79 28 43 6f 6c 75 6d 6e 73 29 20 3d 3d  mpty(Columns) ==
0d70: 20 66 61 6c 73 65 29 0a 20 20 20 20 20 20 20 20   false).        
0d80: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f  builder.AppendFo
0d90: 72 6d 61 74 28 22 20 4f 46 20 7b 30 7d 22 2c 20  rmat(" OF {0}", 
0da0: 43 6f 6c 75 6d 6e 73 29 3b 0a 0a 20 20 20 20 20  Columns);..     
0db0: 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46   builder.AppendF
0dc0: 6f 72 6d 61 74 28 22 20 4f 4e 20 5b 7b 30 7d 5d  ormat(" ON [{0}]
0dd0: 2e 5b 7b 31 7d 5d 22 2c 20 5f 74 61 62 6c 65 2e  .[{1}]", _table.
0de0: 43 61 74 61 6c 6f 67 2c 20 5f 74 61 62 6c 65 2e  Catalog, _table.
0df0: 4e 61 6d 65 29 3b 0a 0a 20 20 20 20 20 20 69 66  Name);..      if
0e00: 20 28 45 61 63 68 52 6f 77 29 0a 20 20 20 20 20   (EachRow).     
0e10: 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
0e20: 64 46 6f 72 6d 61 74 28 22 20 46 4f 52 20 45 41  dFormat(" FOR EA
0e30: 43 48 20 52 4f 57 22 29 3b 0a 20 20 20 20 20 20  CH ROW");.      
0e40: 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
0e50: 6c 4f 72 45 6d 70 74 79 28 57 68 65 6e 29 20 3d  lOrEmpty(When) =
0e60: 3d 20 66 61 6c 73 65 29 0a 20 20 20 20 20 20 20  = false).       
0e70: 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46   builder.AppendF
0e80: 6f 72 6d 61 74 28 22 20 57 48 45 4e 20 7b 30 7d  ormat(" WHEN {0}
0e90: 22 2c 20 57 68 65 6e 29 3b 0a 0a 20 20 20 20 20  ", When);..     
0ea0: 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46   builder.AppendF
0eb0: 6f 72 6d 61 74 28 22 5c 72 5c 6e 42 45 47 49 4e  ormat("\r\nBEGIN
0ec0: 5c 72 5c 6e 7b 30 7d 22 2c 20 53 51 4c 29 3b 0a  \r\n{0}", SQL);.
0ed0: 20 20 20 20 20 20 53 69 6d 70 6c 65 54 6f 6b 65        SimpleToke
0ee0: 6e 69 7a 65 72 2e 53 74 72 69 6e 67 50 61 72 74  nizer.StringPart
0ef0: 73 5b 5d 20 61 72 72 20 3d 20 53 69 6d 70 6c 65  s[] arr = Simple
0f00: 54 6f 6b 65 6e 69 7a 65 72 2e 42 72 65 61 6b 53  Tokenizer.BreakS
0f10: 74 72 69 6e 67 28 53 51 4c 29 3b 0a 20 20 20 20  tring(SQL);.    
0f20: 20 20 69 66 20 28 61 72 72 5b 61 72 72 2e 4c 65    if (arr[arr.Le
0f30: 6e 67 74 68 20 2d 20 31 5d 2e 73 65 70 63 68 61  ngth - 1].sepcha
0f40: 72 20 21 3d 20 27 3b 27 29 0a 20 20 20 20 20 20  r != ';').      
0f50: 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
0f60: 28 22 3b 22 29 3b 0a 0a 20 20 20 20 20 20 62 75  (";");..      bu
0f70: 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 5c 72  ilder.Append("\r
0f80: 5c 6e 45 4e 44 3b 22 29 3b 0a 20 20 20 20 7d 0a  \nEND;");.    }.
0f90: 0a 20 20 20 20 5b 44 65 66 61 75 6c 74 56 61 6c  .    [DefaultVal
0fa0: 75 65 28 54 72 69 67 67 65 72 4f 63 63 75 72 73  ue(TriggerOccurs
0fb0: 2e 42 65 66 6f 72 65 29 5d 0a 20 20 20 20 5b 43  .Before)].    [C
0fc0: 61 74 65 67 6f 72 79 28 22 45 76 65 6e 74 22 29  ategory("Event")
0fd0: 5d 0a 20 20 20 20 5b 44 65 73 63 72 69 70 74 69  ].    [Descripti
0fe0: 6f 6e 28 22 44 65 74 65 72 6d 69 6e 65 73 20 77  on("Determines w
0ff0: 68 65 6e 20 74 68 65 20 74 72 69 67 67 65 72 20  hen the trigger 
1000: 66 69 72 65 73 2e 20 20 46 6f 72 20 74 61 62 6c  fires.  For tabl
1010: 65 73 2c 20 42 65 66 6f 72 65 20 6f 72 20 41 66  es, Before or Af
1020: 74 65 72 20 61 72 65 20 73 75 70 70 6f 72 74 65  ter are supporte
1030: 64 2e 20 20 46 6f 72 20 76 69 65 77 73 2c 20 49  d.  For views, I
1040: 6e 73 74 65 61 64 20 4f 66 20 69 73 20 74 68 65  nstead Of is the
1050: 20 6f 6e 6c 79 20 6f 70 74 69 6f 6e 2e 22 29 5d   only option.")]
1060: 0a 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74  .    public virt
1070: 75 61 6c 20 54 72 69 67 67 65 72 4f 63 63 75 72  ual TriggerOccur
1080: 73 20 4f 63 63 75 72 73 0a 20 20 20 20 7b 0a 20  s Occurs.    {. 
1090: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
10a0: 6e 20 28 54 72 69 67 67 65 72 4f 63 63 75 72 73  n (TriggerOccurs
10b0: 29 5f 74 72 69 67 67 65 72 4f 63 63 75 72 73 3b  )_triggerOccurs;
10c0: 20 7d 0a 20 20 20 20 20 20 73 65 74 0a 20 20 20   }.      set.   
10d0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20     {.        if 
10e0: 28 5f 74 72 69 67 67 65 72 4f 63 63 75 72 73 20  (_triggerOccurs 
10f0: 21 3d 20 28 69 6e 74 29 76 61 6c 75 65 29 0a 20  != (int)value). 
1100: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
1110: 20 20 20 5f 74 72 69 67 67 65 72 4f 63 63 75 72     _triggerOccur
1120: 73 20 3d 20 28 69 6e 74 29 76 61 6c 75 65 3b 0a  s = (int)value;.
1130: 20 20 20 20 20 20 20 20 20 20 4d 61 6b 65 44 69            MakeDi
1140: 72 74 79 28 29 3b 0a 20 20 20 20 20 20 20 20 7d  rty();.        }
1150: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
1160: 20 20 20 20 5b 44 65 66 61 75 6c 74 56 61 6c 75      [DefaultValu
1170: 65 28 54 72 69 67 67 65 72 54 79 70 65 2e 55 70  e(TriggerType.Up
1180: 64 61 74 65 29 5d 0a 20 20 20 20 5b 43 61 74 65  date)].    [Cate
1190: 67 6f 72 79 28 22 45 76 65 6e 74 22 29 5d 0a 20  gory("Event")]. 
11a0: 20 20 20 5b 44 65 73 63 72 69 70 74 69 6f 6e 28     [Description(
11b0: 22 44 65 74 65 72 6d 69 6e 65 73 20 77 68 61 74  "Determines what
11c0: 20 74 79 70 65 20 6f 66 20 6f 70 65 72 61 74 69   type of operati
11d0: 6f 6e 20 74 68 65 20 74 72 69 67 67 65 72 20 61  on the trigger a
11e0: 70 70 6c 69 65 73 20 74 6f 2e 20 20 43 61 6e 20  pplies to.  Can 
11f0: 62 65 20 65 69 74 68 65 72 20 49 6e 73 65 72 74  be either Insert
1200: 2c 20 55 70 64 61 74 65 20 6f 72 20 44 65 6c 65  , Update or Dele
1210: 74 65 2e 22 29 5d 0a 20 20 20 20 70 75 62 6c 69  te.")].    publi
1220: 63 20 54 72 69 67 67 65 72 54 79 70 65 20 54 79  c TriggerType Ty
1230: 70 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67  pe.    {.      g
1240: 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 74 79 70  et { return _typ
1250: 65 3b 20 7d 0a 20 20 20 20 20 20 73 65 74 0a 20  e; }.      set. 
1260: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69       {.        i
1270: 66 20 28 5f 74 79 70 65 20 21 3d 20 76 61 6c 75  f (_type != valu
1280: 65 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  e).        {.   
1290: 20 20 20 20 20 20 20 5f 74 79 70 65 20 3d 20 76         _type = v
12a0: 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  alue;.          
12b0: 4d 61 6b 65 44 69 72 74 79 28 29 3b 0a 20 20 20  MakeDirty();.   
12c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
12d0: 20 20 20 7d 0a 0a 20 20 20 20 5b 44 65 66 61 75     }..    [Defau
12e0: 6c 74 56 61 6c 75 65 28 74 72 75 65 29 5d 0a 20  ltValue(true)]. 
12f0: 20 20 20 5b 43 61 74 65 67 6f 72 79 28 22 45 76     [Category("Ev
1300: 65 6e 74 22 29 5d 0a 20 20 20 20 5b 44 65 73 63  ent")].    [Desc
1310: 72 69 70 74 69 6f 6e 28 22 57 68 65 6e 20 73 65  ription("When se
1320: 74 20 74 6f 20 74 72 75 65 2c 20 74 68 65 20 74  t to true, the t
1330: 72 69 67 67 65 72 20 77 69 6c 6c 20 66 69 72 65  rigger will fire
1340: 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e   for each row in
1350: 20 61 6e 20 75 70 64 61 74 65 2c 20 69 6e 73 65   an update, inse
1360: 72 74 20 6f 72 20 64 65 6c 65 74 65 20 6f 70 65  rt or delete ope
1370: 72 61 74 69 6f 6e 2e 22 29 5d 0a 20 20 20 20 70  ration.")].    p
1380: 75 62 6c 69 63 20 62 6f 6f 6c 20 45 61 63 68 52  ublic bool EachR
1390: 6f 77 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67  ow.    {.      g
13a0: 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72 75 65  et { return true
13b0: 3b 20 7d 0a 20 20 20 20 20 20 2f 2f 67 65 74 20  ; }.      //get 
13c0: 7b 20 72 65 74 75 72 6e 20 5f 65 61 63 68 52 6f  { return _eachRo
13d0: 77 3b 20 7d 0a 20 20 20 20 20 20 2f 2f 73 65 74  w; }.      //set
13e0: 20 7b 20 5f 65 61 63 68 52 6f 77 20 3d 20 76 61   { _eachRow = va
13f0: 6c 75 65 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20  lue; }.    }..  
1400: 20 20 5b 43 61 74 65 67 6f 72 79 28 22 43 6f 6e    [Category("Con
1410: 73 74 72 61 69 6e 74 22 29 5d 0a 20 20 20 20 5b  straint")].    [
1420: 44 65 73 63 72 69 70 74 69 6f 6e 28 22 4c 69 6d  Description("Lim
1430: 69 74 73 20 74 68 65 20 65 78 65 63 74 69 6f 6e  its the exection
1440: 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 20   of the trigger 
1450: 73 6f 20 69 74 20 6f 6e 6c 79 20 6f 63 63 75 72  so it only occur
1460: 73 20 77 68 65 6e 20 74 68 65 20 65 78 70 72 65  s when the expre
1470: 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
1480: 74 6f 20 54 72 75 65 2e 22 29 5d 0a 20 20 20 20  to True.")].    
1490: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 57 68  public string Wh
14a0: 65 6e 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67  en.    {.      g
14b0: 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 77 68 65  et { return _whe
14c0: 6e 3b 20 7d 0a 20 20 20 20 20 20 73 65 74 0a 20  n; }.      set. 
14d0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69       {.        i
14e0: 66 20 28 5f 77 68 65 6e 20 21 3d 20 76 61 6c 75  f (_when != valu
14f0: 65 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  e).        {.   
1500: 20 20 20 20 20 20 20 5f 77 68 65 6e 20 3d 20 76         _when = v
1510: 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  alue;.          
1520: 4d 61 6b 65 44 69 72 74 79 28 29 3b 0a 20 20 20  MakeDirty();.   
1530: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
1540: 20 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73     }..    [Brows
1550: 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20  able(false)].   
1560: 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
1570: 61 6c 20 73 74 72 69 6e 67 20 4e 61 6d 65 50 72  al string NamePr
1580: 65 66 69 78 0a 20 20 20 20 7b 0a 20 20 20 20 20  efix.    {.     
1590: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 22 54   get { return "T
15a0: 52 47 22 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20  RG"; }.    }..  
15b0: 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c    [Browsable(fal
15c0: 73 65 29 5d 0a 20 20 20 20 70 72 6f 74 65 63 74  se)].    protect
15d0: 65 64 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e  ed virtual strin
15e0: 67 20 4e 65 77 4e 61 6d 65 0a 20 20 20 20 7b 0a  g NewName.    {.
15f0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1600: 72 6e 20 22 4e 65 77 54 72 69 67 67 65 72 22 3b  rn "NewTrigger";
1610: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b 42   }.    }..    [B
1620: 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d  rowsable(false)]
1630: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 56 69  .    internal Vi
1640: 65 77 54 61 62 6c 65 42 61 73 65 20 56 69 65 77  ewTableBase View
1650: 54 61 62 6c 65 42 61 73 65 0a 20 20 20 20 7b 0a  TableBase.    {.
1660: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1670: 72 6e 20 5f 74 61 62 6c 65 3b 20 7d 0a 20 20 20  rn _table; }.   
1680: 20 7d 0a 0a 20 20 20 20 5b 50 61 72 65 6e 74 68   }..    [Parenth
1690: 65 73 69 7a 65 50 72 6f 70 65 72 74 79 4e 61 6d  esizePropertyNam
16a0: 65 28 74 72 75 65 29 5d 0a 20 20 20 20 5b 43 61  e(true)].    [Ca
16b0: 74 65 67 6f 72 79 28 22 49 64 65 6e 74 69 74 79  tegory("Identity
16c0: 22 29 5d 0a 20 20 20 20 5b 44 65 73 63 72 69 70  ")].    [Descrip
16d0: 74 69 6f 6e 28 22 54 68 65 20 6e 61 6d 65 20 6f  tion("The name o
16e0: 66 20 74 68 65 20 74 72 69 67 67 65 72 22 29 5d  f the trigger")]
16f0: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69  .    public stri
1700: 6e 67 20 4e 61 6d 65 0a 20 20 20 20 7b 0a 20 20  ng Name.    {.  
1710: 20 20 20 20 67 65 74 0a 20 20 20 20 20 20 7b 0a      get.      {.
1720: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
1730: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
1740: 28 5f 6e 61 6d 65 29 29 0a 20 20 20 20 20 20 20  (_name)).       
1750: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20   {.          if 
1760: 28 5f 63 61 6c 63 6e 61 6d 65 20 3d 3d 20 74 72  (_calcname == tr
1770: 75 65 29 20 72 65 74 75 72 6e 20 47 65 74 48 61  ue) return GetHa
1780: 73 68 43 6f 64 65 28 29 2e 54 6f 53 74 72 69 6e  shCode().ToStrin
1790: 67 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20  g();..          
17a0: 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 53 74  string name = St
17b0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
17c0: 5f 7b 31 7d 22 2c 20 4e 61 6d 65 50 72 65 66 69  _{1}", NamePrefi
17d0: 78 2c 20 4e 65 77 4e 61 6d 65 29 3b 0a 20 20 20  x, NewName);.   
17e0: 20 20 20 20 20 20 20 69 6e 74 20 63 6f 75 6e 74         int count
17f0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
1800: 73 74 72 69 6e 67 20 70 72 6f 70 6f 73 65 64 20  string proposed 
1810: 3d 20 6e 61 6d 65 3b 0a 0a 20 20 20 20 20 20 20  = name;..       
1820: 20 20 20 5f 63 61 6c 63 6e 61 6d 65 20 3d 20 74     _calcname = t
1830: 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 66  rue;.          f
1840: 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e  or (int n = 0; n
1850: 20 3c 20 28 28 49 4c 69 73 74 29 5f 74 61 62 6c   < ((IList)_tabl
1860: 65 2e 54 72 69 67 67 65 72 73 29 2e 43 6f 75 6e  e.Triggers).Coun
1870: 74 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20 20 20  t; n++).        
1880: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
1890: 54 72 69 67 67 65 72 20 69 64 78 20 3d 20 28 28  Trigger idx = ((
18a0: 49 4c 69 73 74 29 5f 74 61 62 6c 65 2e 54 72 69  IList)_table.Tri
18b0: 67 67 65 72 73 29 5b 6e 5d 20 61 73 20 54 72 69  ggers)[n] as Tri
18c0: 67 67 65 72 3b 0a 20 20 20 20 20 20 20 20 20 20  gger;.          
18d0: 20 20 70 72 6f 70 6f 73 65 64 20 3d 20 73 74 72    proposed = str
18e0: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 7b  ing.Format("{0}{
18f0: 31 7d 22 2c 20 6e 61 6d 65 2c 20 28 63 6f 75 6e  1}", name, (coun
1900: 74 20 3e 20 30 29 20 3f 20 63 6f 75 6e 74 2e 54  t > 0) ? count.T
1910: 6f 53 74 72 69 6e 67 28 29 20 3a 20 22 22 29 3b  oString() : "");
1920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1930: 28 69 64 78 2e 4e 61 6d 65 20 3d 3d 20 70 72 6f  (idx.Name == pro
1940: 70 6f 73 65 64 29 0a 20 20 20 20 20 20 20 20 20  posed).         
1950: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
1960: 20 20 20 63 6f 75 6e 74 2b 2b 3b 0a 20 20 20 20     count++;.    
1970: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 2d 31            n = -1
1980: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
1990: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
19a0: 20 20 20 20 20 20 5f 63 61 6c 63 6e 61 6d 65 20        _calcname 
19b0: 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20  = false;.       
19c0: 20 20 20 72 65 74 75 72 6e 20 70 72 6f 70 6f 73     return propos
19d0: 65 64 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ed;.        }.  
19e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6e 61        return _na
19f0: 6d 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  me;.      }.    
1a00: 20 20 73 65 74 0a 20 20 20 20 20 20 7b 0a 20 20    set.      {.  
1a10: 20 20 20 20 20 20 69 66 20 28 5f 6e 61 6d 65 20        if (_name 
1a20: 21 3d 20 76 61 6c 75 65 29 0a 20 20 20 20 20 20  != value).      
1a30: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 5f 6e    {.          _n
1a40: 61 6d 65 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20  ame = value;.   
1a50: 20 20 20 20 20 20 20 4d 61 6b 65 44 69 72 74 79         MakeDirty
1a60: 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ();.        }.  
1a70: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
1a80: 20 5b 45 64 69 74 6f 72 28 74 79 70 65 6f 66 28   [Editor(typeof(
1a90: 43 6f 6c 75 6d 6e 73 4d 75 6c 74 69 53 65 6c 65  ColumnsMultiSele
1aa0: 63 74 45 64 69 74 6f 72 29 2c 20 74 79 70 65 6f  ctEditor), typeo
1ab0: 66 28 55 49 54 79 70 65 45 64 69 74 6f 72 29 29  f(UITypeEditor))
1ac0: 5d 0a 20 20 20 20 5b 43 61 74 65 67 6f 72 79 28  ].    [Category(
1ad0: 22 45 76 65 6e 74 22 29 5d 0a 20 20 20 20 5b 44  "Event")].    [D
1ae0: 69 73 70 6c 61 79 4e 61 6d 65 28 22 55 70 64 61  isplayName("Upda
1af0: 74 65 20 43 6f 6c 75 6d 6e 73 22 29 5d 0a 20 20  te Columns")].  
1b00: 20 20 5b 44 65 73 63 72 69 70 74 69 6f 6e 28 22    [Description("
1b10: 4c 69 6d 69 74 20 74 68 65 20 74 72 69 67 67 65  Limit the trigge
1b20: 72 20 74 6f 20 6f 6e 6c 79 20 6f 63 63 75 72 20  r to only occur 
1b30: 77 68 65 6e 20 75 70 64 61 74 69 6e 67 20 74 68  when updating th
1b40: 65 73 65 20 63 6f 6c 75 6d 6e 73 22 29 5d 0a 20  ese columns")]. 
1b50: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
1b60: 20 43 6f 6c 75 6d 6e 73 0a 20 20 20 20 7b 0a 20   Columns.    {. 
1b70: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1b80: 6e 20 5f 63 6f 6c 75 6d 6e 73 3b 20 7d 0a 20 20  n _columns; }.  
1b90: 20 20 20 20 73 65 74 0a 20 20 20 20 20 20 7b 0a      set.      {.
1ba0: 20 20 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6c          if (_col
1bb0: 75 6d 6e 73 20 21 3d 20 76 61 6c 75 65 29 0a 20  umns != value). 
1bc0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
1bd0: 20 20 20 5f 63 6f 6c 75 6d 6e 73 20 3d 20 76 61     _columns = va
1be0: 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 4d  lue;.          M
1bf0: 61 6b 65 44 69 72 74 79 28 29 3b 0a 20 20 20 20  akeDirty();.    
1c00: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
1c10: 20 20 7d 0a 0a 20 20 20 20 5b 43 61 74 65 67 6f    }..    [Catego
1c20: 72 79 28 22 41 63 74 69 6f 6e 22 29 5d 0a 20 20  ry("Action")].  
1c30: 20 20 5b 44 65 73 63 72 69 70 74 69 6f 6e 28 22    [Description("
1c40: 54 68 65 20 53 51 4c 20 74 6f 20 65 78 65 63 75  The SQL to execu
1c50: 74 65 20 66 6f 72 20 74 68 69 73 20 74 72 69 67  te for this trig
1c60: 67 65 72 22 29 5d 0a 20 20 20 20 70 75 62 6c 69  ger")].    publi
1c70: 63 20 73 74 72 69 6e 67 20 53 51 4c 0a 20 20 20  c string SQL.   
1c80: 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72   {.      get { r
1c90: 65 74 75 72 6e 20 5f 61 63 74 69 6f 6e 3b 20 7d  eturn _action; }
1ca0: 0a 20 20 20 20 20 20 73 65 74 0a 20 20 20 20 20  .      set.     
1cb0: 20 7b 0a 20 20 20 20 20 20 20 20 2f 2f 75 73 69   {.        //usi
1cc0: 6e 67 20 28 44 62 54 72 61 6e 73 61 63 74 69 6f  ng (DbTransactio
1cd0: 6e 20 74 72 61 6e 73 20 3d 20 47 65 74 43 6f 6e  n trans = GetCon
1ce0: 6e 65 63 74 69 6f 6e 28 29 2e 42 65 67 69 6e 54  nection().BeginT
1cf0: 72 61 6e 73 61 63 74 69 6f 6e 28 29 29 0a 20 20  ransaction()).  
1d00: 20 20 20 20 20 20 2f 2f 75 73 69 6e 67 20 28 44        //using (D
1d10: 62 43 6f 6d 6d 61 6e 64 20 63 6d 64 20 3d 20 47  bCommand cmd = G
1d20: 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 29 2e 43  etConnection().C
1d30: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0a  reateCommand()).
1d40: 20 20 20 20 20 20 20 20 2f 2f 7b 0a 20 20 20 20          //{.    
1d50: 20 20 20 20 2f 2f 20 20 53 74 72 69 6e 67 42 75      //  StringBu
1d60: 69 6c 64 65 72 20 62 75 69 6c 64 65 72 20 3d 20  ilder builder = 
1d70: 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65  new StringBuilde
1d80: 72 28 29 3b 0a 20 20 20 20 20 20 20 20 2f 2f 20  r();.        // 
1d90: 20 57 72 69 74 65 53 71 6c 28 62 75 69 6c 64 65   WriteSql(builde
1da0: 72 2c 20 74 72 75 65 29 3b 0a 20 20 20 20 20 20  r, true);.      
1db0: 20 20 2f 2f 20 20 63 6d 64 2e 43 6f 6d 6d 61 6e    //  cmd.Comman
1dc0: 64 54 65 78 74 20 3d 20 62 75 69 6c 64 65 72 2e  dText = builder.
1dd0: 54 6f 53 74 72 69 6e 67 28 29 3b 0a 0a 20 20 20  ToString();..   
1de0: 20 20 20 20 20 2f 2f 20 20 63 6d 64 2e 45 78 65       //  cmd.Exe
1df0: 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0a  cuteNonQuery();.
1e00: 20 20 20 20 20 20 20 20 2f 2f 20 20 74 72 61 6e          //  tran
1e10: 73 2e 52 6f 6c 6c 62 61 63 6b 28 29 3b 0a 20 20  s.Rollback();.  
1e20: 20 20 20 20 20 20 2f 2f 7d 0a 20 20 20 20 20 20        //}.      
1e30: 20 20 69 66 20 28 5f 61 63 74 69 6f 6e 20 21 3d    if (_action !=
1e40: 20 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20   value).        
1e50: 7b 0a 20 20 20 20 20 20 20 20 20 20 5f 61 63 74  {.          _act
1e60: 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20  ion = value;.   
1e70: 20 20 20 20 20 20 20 4d 61 6b 65 44 69 72 74 79         MakeDirty
1e80: 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ();.        }.  
1e90: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
1ea0: 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73   [Browsable(fals
1eb0: 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 73  e)].    public s
1ec0: 74 72 69 6e 67 20 4f 72 69 67 69 6e 61 6c 53 71  tring OriginalSq
1ed0: 6c 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65  l.    {.      ge
1ee0: 74 20 7b 20 72 65 74 75 72 6e 20 5f 6f 72 69 67  t { return _orig
1ef0: 73 71 6c 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20  sql; }.    }..  
1f00: 20 20 69 6e 74 65 72 6e 61 6c 20 54 72 69 67 67    internal Trigg
1f10: 65 72 28 56 69 65 77 54 61 62 6c 65 42 61 73 65  er(ViewTableBase
1f20: 20 70 61 72 65 6e 74 2c 20 44 61 74 61 52 6f 77   parent, DataRow
1f30: 20 72 6f 77 29 0a 20 20 20 20 7b 0a 20 20 20 20   row).    {.    
1f40: 20 20 5f 74 61 62 6c 65 20 3d 20 70 61 72 65 6e    _table = paren
1f50: 74 3b 0a 20 20 20 20 20 20 69 66 20 28 72 6f 77  t;.      if (row
1f60: 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   != null).      
1f70: 7b 0a 20 20 20 20 20 20 20 20 5f 6e 61 6d 65 20  {.        _name 
1f80: 3d 20 72 6f 77 5b 22 54 52 49 47 47 45 52 5f 4e  = row["TRIGGER_N
1f90: 41 4d 45 22 5d 2e 54 6f 53 74 72 69 6e 67 28 29  AME"].ToString()
1fa0: 3b 0a 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ;..        strin
1fb0: 67 20 73 71 6c 20 3d 20 72 6f 77 5b 22 54 52 49  g sql = row["TRI
1fc0: 47 47 45 52 5f 44 45 46 49 4e 49 54 49 4f 4e 22  GGER_DEFINITION"
1fd0: 5d 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20  ].ToString();.  
1fe0: 20 20 20 20 20 20 5f 6f 72 69 67 73 71 6c 20 3d        _origsql =
1ff0: 20 73 71 6c 3b 0a 20 20 20 20 20 20 20 20 53 69   sql;.        Si
2000: 6d 70 6c 65 54 6f 6b 65 6e 69 7a 65 72 2e 53 74  mpleTokenizer.St
2010: 72 69 6e 67 50 61 72 74 73 5b 5d 20 61 72 72 20  ringParts[] arr 
2020: 3d 20 53 69 6d 70 6c 65 54 6f 6b 65 6e 69 7a 65  = SimpleTokenize
2030: 72 2e 42 72 65 61 6b 53 74 72 69 6e 67 28 73 71  r.BreakString(sq
2040: 6c 29 3b 0a 0a 20 20 20 20 20 20 20 20 69 6e 74  l);..        int
2050: 20 78 20 3d 20 33 3b 0a 20 20 20 20 20 20 20 20   x = 3;.        
2060: 73 77 69 74 63 68 20 28 61 72 72 5b 78 5d 2e 6b  switch (arr[x].k
2070: 65 79 77 6f 72 64 29 0a 20 20 20 20 20 20 20 20  eyword).        
2080: 7b 0a 20 20 20 20 20 20 20 20 20 20 63 61 73 65  {.          case
2090: 20 22 42 45 46 4f 52 45 22 3a 0a 20 20 20 20 20   "BEFORE":.     
20a0: 20 20 20 20 20 20 20 5f 74 72 69 67 67 65 72 4f         _triggerO
20b0: 63 63 75 72 73 20 3d 20 30 3b 0a 20 20 20 20 20  ccurs = 0;.     
20c0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
20d0: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 41 46          case "AF
20e0: 54 45 52 22 3a 0a 20 20 20 20 20 20 20 20 20 20  TER":.          
20f0: 20 20 5f 74 72 69 67 67 65 72 4f 63 63 75 72 73    _triggerOccurs
2100: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20   = 1;.          
2110: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
2120: 20 20 20 63 61 73 65 20 22 49 4e 53 54 45 41 44     case "INSTEAD
2130: 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  ":.            _
2140: 74 72 69 67 67 65 72 4f 63 63 75 72 73 20 3d 20  triggerOccurs = 
2150: 32 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 78  2;.            x
2160: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ++;.            
2170: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
2180: 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20   default:.      
2190: 20 20 20 20 20 20 78 2d 2d 3b 0a 20 20 20 20 20        x--;.     
21a0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
21b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
21c0: 78 2b 2b 3b 0a 0a 20 20 20 20 20 20 20 20 73 77  x++;..        sw
21d0: 69 74 63 68 20 28 61 72 72 5b 78 5d 2e 6b 65 79  itch (arr[x].key
21e0: 77 6f 72 64 29 0a 20 20 20 20 20 20 20 20 7b 0a  word).        {.
21f0: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22            case "
2200: 55 50 44 41 54 45 22 3a 0a 20 20 20 20 20 20 20  UPDATE":.       
2210: 20 20 20 20 20 5f 74 79 70 65 20 3d 20 54 72 69       _type = Tri
2220: 67 67 65 72 54 79 70 65 2e 55 70 64 61 74 65 3b  ggerType.Update;
2230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2240: 28 61 72 72 5b 78 20 2b 20 31 5d 2e 6b 65 79 77  (arr[x + 1].keyw
2250: 6f 72 64 20 3d 3d 20 22 4f 46 22 29 0a 20 20 20  ord == "OF").   
2260: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
2270: 20 20 20 20 20 20 20 20 20 78 2b 2b 3b 0a 20 20           x++;.  
2280: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
2290: 6e 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65  ngBuilder builde
22a0: 72 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  r = new StringBu
22b0: 69 6c 64 65 72 28 29 3b 0a 20 20 20 20 20 20 20  ilder();.       
22c0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 65         string se
22d0: 70 61 72 61 74 6f 72 20 3d 20 22 22 3b 0a 20 20  parator = "";.  
22e0: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
22f0: 65 20 28 61 72 72 5b 78 20 2b 20 31 5d 2e 6b 65  e (arr[x + 1].ke
2300: 79 77 6f 72 64 20 21 3d 20 22 4f 4e 22 29 0a 20  yword != "ON"). 
2310: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20               {. 
2320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
2330: 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f 72  uilder.AppendFor
2340: 6d 61 74 28 22 7b 30 7d 5b 7b 31 7d 5d 22 2c 20  mat("{0}[{1}]", 
2350: 73 65 70 61 72 61 74 6f 72 2c 20 61 72 72 5b 78  separator, arr[x
2360: 20 2b 20 31 5d 2e 76 61 6c 75 65 29 3b 0a 20 20   + 1].value);.  
2370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
2380: 70 61 72 61 74 6f 72 20 3d 20 22 2c 20 22 3b 0a  parator = ", ";.
2390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a0: 78 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20  x++;.           
23b0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
23c0: 20 20 20 5f 63 6f 6c 75 6d 6e 73 20 3d 20 62 75     _columns = bu
23d0: 69 6c 64 65 72 2e 54 6f 53 74 72 69 6e 67 28 29  ilder.ToString()
23e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
23f0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
2400: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 63 61 73  k;.          cas
2410: 65 20 22 49 4e 53 45 52 54 22 3a 0a 20 20 20 20  e "INSERT":.    
2420: 20 20 20 20 20 20 20 20 5f 74 79 70 65 20 3d 20          _type = 
2430: 54 72 69 67 67 65 72 54 79 70 65 2e 49 6e 73 65  TriggerType.Inse
2440: 72 74 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  rt;.            
2450: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
2460: 20 63 61 73 65 20 22 44 45 4c 45 54 45 22 3a 0a   case "DELETE":.
2470: 20 20 20 20 20 20 20 20 20 20 20 20 5f 74 79 70              _typ
2480: 65 20 3d 20 54 72 69 67 67 65 72 54 79 70 65 2e  e = TriggerType.
2490: 44 65 6c 65 74 65 3b 0a 20 20 20 20 20 20 20 20  Delete;.        
24a0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
24b0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 78 2b 2b     }.        x++
24c0: 3b 0a 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  ;..        while
24d0: 20 28 61 72 72 5b 78 5d 2e 6b 65 79 77 6f 72 64   (arr[x].keyword
24e0: 20 21 3d 20 22 42 45 47 49 4e 22 29 0a 20 20 20   != "BEGIN").   
24f0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
2500: 20 69 66 20 28 61 72 72 5b 78 5d 2e 6b 65 79 77   if (arr[x].keyw
2510: 6f 72 64 20 3d 3d 20 22 46 4f 52 22 20 26 26 20  ord == "FOR" && 
2520: 61 72 72 5b 78 20 2b 20 31 5d 2e 6b 65 79 77 6f  arr[x + 1].keywo
2530: 72 64 20 3d 3d 20 22 45 41 43 48 22 20 26 26 20  rd == "EACH" && 
2540: 61 72 72 5b 78 20 2b 20 31 5d 2e 6b 65 79 77 6f  arr[x + 1].keywo
2550: 72 64 20 3d 3d 20 22 52 4f 57 22 29 0a 20 20 20  rd == "ROW").   
2560: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
2570: 20 20 20 20 20 2f 2f 5f 65 61 63 68 52 6f 77 20       //_eachRow 
2580: 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20  = true;.        
2590: 20 20 20 20 78 20 2b 3d 20 33 3b 0a 20 20 20 20      x += 3;.    
25a0: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
25b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20  ;.          }.. 
25c0: 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72 72           if (arr
25d0: 5b 78 5d 2e 6b 65 79 77 6f 72 64 20 3d 3d 20 22  [x].keyword == "
25e0: 57 48 45 4e 22 29 0a 20 20 20 20 20 20 20 20 20  WHEN").         
25f0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 78   {.            x
2600: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ++;.            
2610: 69 6e 74 20 64 65 70 74 68 20 3d 20 30 3b 0a 20  int depth = 0;. 
2620: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
2630: 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65 72  gBuilder builder
2640: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
2650: 6c 64 65 72 28 29 3b 0a 20 20 20 20 20 20 20 20  lder();.        
2660: 20 20 20 20 77 68 69 6c 65 20 28 61 72 72 5b 78      while (arr[x
2670: 5d 2e 6b 65 79 77 6f 72 64 20 21 3d 20 22 42 45  ].keyword != "BE
2680: 47 49 4e 22 29 0a 20 20 20 20 20 20 20 20 20 20  GIN").          
2690: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
26a0: 20 20 69 66 20 28 62 75 69 6c 64 65 72 2e 4c 65    if (builder.Le
26b0: 6e 67 74 68 20 3e 20 30 29 20 62 75 69 6c 64 65  ngth > 0) builde
26c0: 72 2e 41 70 70 65 6e 64 28 22 20 22 29 3b 0a 20  r.Append(" ");. 
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
26e0: 6c 65 20 28 64 65 70 74 68 20 3c 20 61 72 72 5b  le (depth < arr[
26f0: 78 5d 2e 64 65 70 74 68 29 0a 20 20 20 20 20 20  x].depth).      
2700: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
2710: 20 20 20 20 20 20 20 20 20 20 64 65 70 74 68 2b            depth+
2720: 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +;.             
2730: 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
2740: 64 28 22 28 22 29 3b 0a 20 20 20 20 20 20 20 20  d("(");.        
2750: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2760: 20 20 20 20 20 20 77 68 69 6c 65 20 28 64 65 70        while (dep
2770: 74 68 20 3e 20 61 72 72 5b 78 5d 2e 64 65 70 74  th > arr[x].dept
2780: 68 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h).             
2790: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
27a0: 20 20 20 64 65 70 74 68 2d 2d 3b 0a 20 20 20 20     depth--;.    
27b0: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c              buil
27c0: 64 65 72 2e 41 70 70 65 6e 64 28 22 29 22 29 3b  der.Append(")");
27d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
27e0: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27f0: 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
2800: 6c 4f 72 45 6d 70 74 79 28 61 72 72 5b 78 5d 2e  lOrEmpty(arr[x].
2810: 71 75 6f 74 65 29 20 3d 3d 20 66 61 6c 73 65 29  quote) == false)
2820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2830: 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28   builder.Append(
2840: 61 72 72 5b 78 5d 2e 71 75 6f 74 65 5b 30 5d 29  arr[x].quote[0])
2850: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
2860: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 61  builder.Append(a
2870: 72 72 5b 78 5d 2e 76 61 6c 75 65 29 3b 0a 20 20  rr[x].value);.  
2880: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2890: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
28a0: 6d 70 74 79 28 61 72 72 5b 78 5d 2e 71 75 6f 74  mpty(arr[x].quot
28b0: 65 29 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20  e) == false).   
28c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69               bui
28d0: 6c 64 65 72 2e 41 70 70 65 6e 64 28 61 72 72 5b  lder.Append(arr[
28e0: 78 5d 2e 71 75 6f 74 65 5b 31 5d 29 3b 0a 20 20  x].quote[1]);.  
28f0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2900: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 64          while (d
2910: 65 70 74 68 20 3e 20 30 29 0a 20 20 20 20 20 20  epth > 0).      
2920: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
2930: 20 20 20 20 20 20 64 65 70 74 68 2d 2d 3b 0a 20        depth--;. 
2940: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69               bui
2950: 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 29 22 29  lder.Append(")")
2960: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
2970: 20 20 20 20 20 20 20 20 20 20 20 20 5f 77 68 65              _whe
2980: 6e 20 3d 20 62 75 69 6c 64 65 72 2e 54 6f 53 74  n = builder.ToSt
2990: 72 69 6e 67 28 29 3b 0a 20 20 20 20 20 20 20 20  ring();.        
29a0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
29b0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
29c0: 20 78 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a   x++;.        }.
29d0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 73 74 61  .        int sta
29e0: 72 74 70 6f 73 20 3d 20 61 72 72 5b 78 5d 2e 70  rtpos = arr[x].p
29f0: 6f 73 69 74 69 6f 6e 20 2b 20 61 72 72 5b 78 5d  osition + arr[x]
2a00: 2e 76 61 6c 75 65 2e 4c 65 6e 67 74 68 3b 0a 0a  .value.Length;..
2a10: 20 20 20 20 20 20 20 20 78 20 3d 20 61 72 72 2e          x = arr.
2a20: 4c 65 6e 67 74 68 20 2d 20 31 3b 0a 20 20 20 20  Length - 1;.    
2a30: 20 20 20 20 77 68 69 6c 65 20 28 61 72 72 5b 78      while (arr[x
2a40: 5d 2e 6b 65 79 77 6f 72 64 20 21 3d 20 22 45 4e  ].keyword != "EN
2a50: 44 22 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  D").        {.  
2a60: 20 20 20 20 20 20 20 20 78 2d 2d 3b 0a 20 20 20          x--;.   
2a70: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
2a80: 6e 74 20 65 6e 64 70 6f 73 20 3d 20 61 72 72 5b  nt endpos = arr[
2a90: 78 5d 2e 70 6f 73 69 74 69 6f 6e 3b 0a 0a 20 20  x].position;..  
2aa0: 20 20 20 20 20 20 5f 61 63 74 69 6f 6e 20 3d 20        _action = 
2ab0: 73 71 6c 2e 53 75 62 73 74 72 69 6e 67 28 73 74  sql.Substring(st
2ac0: 61 72 74 70 6f 73 2c 20 65 6e 64 70 6f 73 20 2d  artpos, endpos -
2ad0: 20 73 74 61 72 74 70 6f 73 29 3b 0a 20 20 20 20   startpos);.    
2ae0: 20 20 20 20 5f 61 63 74 69 6f 6e 20 3d 20 5f 61      _action = _a
2af0: 63 74 69 6f 6e 2e 54 72 69 6d 53 74 61 72 74 28  ction.TrimStart(
2b00: 27 5c 72 27 29 2e 54 72 69 6d 53 74 61 72 74 28  '\r').TrimStart(
2b10: 27 5c 6e 27 29 2e 54 72 69 6d 45 6e 64 28 27 5c  '\n').TrimEnd('\
2b20: 6e 27 29 2e 54 72 69 6d 45 6e 64 28 27 5c 72 27  n').TrimEnd('\r'
2b30: 29 2e 54 72 69 6d 28 29 3b 0a 20 20 20 20 20 20  ).Trim();.      
2b40: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 72 65  }.    }..    #re
2b50: 67 69 6f 6e 20 49 48 61 76 65 43 6f 6e 6e 65 63  gion IHaveConnec
2b60: 74 69 6f 6e 20 4d 65 6d 62 65 72 73 0a 0a 20 20  tion Members..  
2b70: 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c    [Browsable(fal
2b80: 73 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20  se)].    public 
2b90: 56 69 65 77 54 61 62 6c 65 42 61 73 65 20 44 65  ViewTableBase De
2ba0: 73 69 67 6e 54 61 62 6c 65 0a 20 20 20 20 7b 0a  signTable.    {.
2bb0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
2bc0: 72 6e 20 5f 74 61 62 6c 65 3b 20 7d 0a 20 20 20  rn _table; }.   
2bd0: 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 44   }..    public D
2be0: 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 47 65 74 43  bConnection GetC
2bf0: 6f 6e 6e 65 63 74 69 6f 6e 28 29 0a 20 20 20 20  onnection().    
2c00: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28  {.      return (
2c10: 28 49 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f 6e  (IHaveConnection
2c20: 29 5f 74 61 62 6c 65 29 2e 47 65 74 43 6f 6e 6e  )_table).GetConn
2c30: 65 63 74 69 6f 6e 28 29 3b 0a 20 20 20 20 7d 0a  ection();.    }.
2c40: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0a  .    #endregion.
2c50: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 43 6c  .    #region ICl
2c60: 6f 6e 65 61 62 6c 65 20 4d 65 6d 62 65 72 73 0a  oneable Members.
2c70: 0a 20 20 20 20 6f 62 6a 65 63 74 20 49 43 6c 6f  .    object IClo
2c80: 6e 65 61 62 6c 65 2e 43 6c 6f 6e 65 28 29 0a 20  neable.Clone(). 
2c90: 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72     {.      retur
2ca0: 6e 20 6e 65 77 20 54 72 69 67 67 65 72 28 74 68  n new Trigger(th
2cb0: 69 73 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  is);.    }..    
2cc0: 23 65 6e 64 72 65 67 69 6f 6e 0a 20 20 7d 0a 0a  #endregion.  }..
2cd0: 20 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73    internal class
2ce0: 20 54 72 69 67 67 65 72 45 64 69 74 6f 72 20 3a   TriggerEditor :
2cf0: 20 43 6f 6c 6c 65 63 74 69 6f 6e 45 64 69 74 6f   CollectionEdito
2d00: 72 0a 20 20 7b 0a 20 20 20 20 56 69 65 77 54 61  r.  {.    ViewTa
2d10: 62 6c 65 42 61 73 65 20 5f 74 61 62 6c 65 3b 0a  bleBase _table;.
2d20: 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20 5f 69 74      object[] _it
2d30: 65 6d 73 3b 0a 20 20 20 20 6f 62 6a 65 63 74 5b  ems;.    object[
2d40: 5d 20 5f 6f 72 69 67 3b 0a 20 20 20 20 43 6f 6c  ] _orig;.    Col
2d50: 6c 65 63 74 69 6f 6e 45 64 69 74 6f 72 2e 43 6f  lectionEditor.Co
2d60: 6c 6c 65 63 74 69 6f 6e 46 6f 72 6d 20 5f 66 6f  llectionForm _fo
2d70: 72 6d 3b 0a 20 20 20 20 69 6e 74 20 5f 63 6f 75  rm;.    int _cou
2d80: 6e 74 3b 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61  nt;..    interna
2d90: 6c 20 54 72 69 67 67 65 72 45 64 69 74 6f 72 28  l TriggerEditor(
2da0: 56 69 65 77 54 61 62 6c 65 42 61 73 65 20 70 61  ViewTableBase pa
2db0: 72 65 6e 74 29 0a 20 20 20 20 20 20 3a 20 62 61  rent).      : ba
2dc0: 73 65 28 28 70 61 72 65 6e 74 20 69 73 20 56 69  se((parent is Vi
2dd0: 65 77 29 20 3f 20 74 79 70 65 6f 66 28 4c 69 73  ew) ? typeof(Lis
2de0: 74 3c 56 69 65 77 54 72 69 67 67 65 72 3e 29 20  t<ViewTrigger>) 
2df0: 3a 20 20 74 79 70 65 6f 66 28 4c 69 73 74 3c 54  :  typeof(List<T
2e00: 72 69 67 67 65 72 3e 29 29 0a 20 20 20 20 7b 0a  rigger>)).    {.
2e10: 20 20 20 20 20 20 5f 74 61 62 6c 65 20 3d 20 70        _table = p
2e20: 61 72 65 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20  arent;.    }..  
2e30: 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72    protected over
2e40: 72 69 64 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 45  ride CollectionE
2e50: 64 69 74 6f 72 2e 43 6f 6c 6c 65 63 74 69 6f 6e  ditor.Collection
2e60: 46 6f 72 6d 20 43 72 65 61 74 65 43 6f 6c 6c 65  Form CreateColle
2e70: 63 74 69 6f 6e 46 6f 72 6d 28 29 0a 20 20 20 20  ctionForm().    
2e80: 7b 0a 20 20 20 20 20 20 5f 66 6f 72 6d 20 3d 20  {.      _form = 
2e90: 62 61 73 65 2e 43 72 65 61 74 65 43 6f 6c 6c 65  base.CreateColle
2ea0: 63 74 69 6f 6e 46 6f 72 6d 28 29 3b 0a 20 20 20  ctionForm();.   
2eb0: 20 20 20 5f 66 6f 72 6d 2e 54 65 78 74 20 3d 20     _form.Text = 
2ec0: 22 54 72 69 67 67 65 72 20 45 64 69 74 6f 72 22  "Trigger Editor"
2ed0: 3b 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ;.      foreach 
2ee0: 28 43 6f 6e 74 72 6f 6c 20 63 20 69 6e 20 5f 66  (Control c in _f
2ef0: 6f 72 6d 2e 43 6f 6e 74 72 6f 6c 73 5b 30 5d 2e  orm.Controls[0].
2f00: 43 6f 6e 74 72 6f 6c 73 29 0a 20 20 20 20 20 20  Controls).      
2f10: 7b 0a 20 20 20 20 20 20 20 20 50 72 6f 70 65 72  {.        Proper
2f20: 74 79 47 72 69 64 20 67 72 69 64 20 3d 20 63 20  tyGrid grid = c 
2f30: 61 73 20 50 72 6f 70 65 72 74 79 47 72 69 64 3b  as PropertyGrid;
2f40: 0a 20 20 20 20 20 20 20 20 69 66 20 28 67 72 69  .        if (gri
2f50: 64 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20  d != null).     
2f60: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 67     {.          g
2f70: 72 69 64 2e 48 65 6c 70 56 69 73 69 62 6c 65 20  rid.HelpVisible 
2f80: 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20  = true;.        
2f90: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
2fa0: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
2fb0: 20 5f 66 6f 72 6d 2e 57 69 64 74 68 20 3d 20 28   _form.Width = (
2fc0: 69 6e 74 29 28 5f 66 6f 72 6d 2e 57 69 64 74 68  int)(_form.Width
2fd0: 20 2a 20 31 2e 32 35 29 3b 0a 20 20 20 20 20 20   * 1.25);.      
2fe0: 5f 66 6f 72 6d 2e 48 65 69 67 68 74 20 3d 20 28  _form.Height = (
2ff0: 69 6e 74 29 28 5f 66 6f 72 6d 2e 48 65 69 67 68  int)(_form.Heigh
3000: 74 20 2a 20 31 2e 32 35 29 3b 0a 20 20 20 20 20  t * 1.25);.     
3010: 20 72 65 74 75 72 6e 20 5f 66 6f 72 6d 3b 0a 20   return _form;. 
3020: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 74 65 63     }..    protec
3030: 74 65 64 20 6f 76 65 72 72 69 64 65 20 6f 62 6a  ted override obj
3040: 65 63 74 20 43 72 65 61 74 65 49 6e 73 74 61 6e  ect CreateInstan
3050: 63 65 28 54 79 70 65 20 69 74 65 6d 54 79 70 65  ce(Type itemType
3060: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66  ).    {.      if
3070: 20 28 69 74 65 6d 54 79 70 65 20 3d 3d 20 74 79   (itemType == ty
3080: 70 65 6f 66 28 54 72 69 67 67 65 72 29 29 0a 20  peof(Trigger)). 
3090: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72       {.        r
30a0: 65 74 75 72 6e 20 6e 65 77 20 54 72 69 67 67 65  eturn new Trigge
30b0: 72 28 5f 74 61 62 6c 65 2c 20 6e 75 6c 6c 29 3b  r(_table, null);
30c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 65  .      }.      e
30d0: 6c 73 65 20 69 66 20 28 69 74 65 6d 54 79 70 65  lse if (itemType
30e0: 20 3d 3d 20 74 79 70 65 6f 66 28 56 69 65 77 54   == typeof(ViewT
30f0: 72 69 67 67 65 72 29 29 0a 20 20 20 20 20 20 7b  rigger)).      {
3100: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
3110: 6e 65 77 20 56 69 65 77 54 72 69 67 67 65 72 28  new ViewTrigger(
3120: 5f 74 61 62 6c 65 2c 20 6e 75 6c 6c 29 3b 0a 20  _table, null);. 
3130: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 74 68 72       }.      thr
3140: 6f 77 20 6e 65 77 20 4e 6f 74 53 75 70 70 6f 72  ow new NotSuppor
3150: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0a  tedException();.
3160: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 74 65      }..    prote
3170: 63 74 65 64 20 6f 76 65 72 72 69 64 65 20 6f 62  cted override ob
3180: 6a 65 63 74 5b 5d 20 47 65 74 49 74 65 6d 73 28  ject[] GetItems(
3190: 6f 62 6a 65 63 74 20 65 64 69 74 56 61 6c 75 65  object editValue
31a0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66  ).    {.      if
31b0: 20 28 5f 69 74 65 6d 73 20 3d 3d 20 6e 75 6c 6c   (_items == null
31c0: 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  ).      {.      
31d0: 20 20 49 4c 69 73 74 20 76 61 6c 75 65 20 3d 20    IList value = 
31e0: 65 64 69 74 56 61 6c 75 65 20 61 73 20 49 4c 69  editValue as ILi
31f0: 73 74 3b 0a 20 20 20 20 20 20 20 20 5f 69 74 65  st;.        _ite
3200: 6d 73 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74 5b  ms = new object[
3210: 76 61 6c 75 65 2e 43 6f 75 6e 74 5d 3b 0a 20 20  value.Count];.  
3220: 20 20 20 20 20 20 5f 6f 72 69 67 20 3d 20 6e 65        _orig = ne
3230: 77 20 6f 62 6a 65 63 74 5b 76 61 6c 75 65 2e 43  w object[value.C
3240: 6f 75 6e 74 5d 3b 0a 20 20 20 20 20 20 20 20 66  ount];.        f
3250: 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e  or (int n = 0; n
3260: 20 3c 20 5f 69 74 65 6d 73 2e 4c 65 6e 67 74 68   < _items.Length
3270: 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20 20 20 7b  ; n++).        {
3280: 0a 20 20 20 20 20 20 20 20 20 20 5f 69 74 65 6d  .          _item
3290: 73 5b 6e 5d 20 3d 20 28 28 49 43 6c 6f 6e 65 61  s[n] = ((IClonea
32a0: 62 6c 65 29 76 61 6c 75 65 5b 6e 5d 29 2e 43 6c  ble)value[n]).Cl
32b0: 6f 6e 65 28 29 3b 0a 20 20 20 20 20 20 20 20 20  one();.         
32c0: 20 5f 6f 72 69 67 5b 6e 5d 20 3d 20 76 61 6c 75   _orig[n] = valu
32d0: 65 5b 6e 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  e[n];.        }.
32e0: 20 20 20 20 20 20 20 20 5f 63 6f 75 6e 74 20 3d          _count =
32f0: 20 5f 69 74 65 6d 73 2e 4c 65 6e 67 74 68 3b 0a   _items.Length;.
3300: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
3310: 74 75 72 6e 20 5f 69 74 65 6d 73 3b 0a 20 20 20  turn _items;.   
3320: 20 7d 0a 0a 20 20 20 20 70 72 6f 74 65 63 74 65   }..    protecte
3330: 64 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63  d override objec
3340: 74 20 53 65 74 49 74 65 6d 73 28 6f 62 6a 65 63  t SetItems(objec
3350: 74 20 65 64 69 74 56 61 6c 75 65 2c 20 6f 62 6a  t editValue, obj
3360: 65 63 74 5b 5d 20 76 61 6c 75 65 29 0a 20 20 20  ect[] value).   
3370: 20 7b 0a 20 20 20 20 20 20 62 6f 6f 6c 20 64 69   {.      bool di
3380: 72 74 79 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20  rty = false;.   
3390: 20 20 20 69 66 20 28 5f 66 6f 72 6d 2e 44 69 61     if (_form.Dia
33a0: 6c 6f 67 52 65 73 75 6c 74 20 3d 3d 20 44 69 61  logResult == Dia
33b0: 6c 6f 67 52 65 73 75 6c 74 2e 43 61 6e 63 65 6c  logResult.Cancel
33c0: 29 0a 20 20 20 20 20 20 20 20 76 61 6c 75 65 20  ).        value 
33d0: 3d 20 5f 6f 72 69 67 3b 0a 0a 20 20 20 20 20 20  = _orig;..      
33e0: 69 66 20 28 65 64 69 74 56 61 6c 75 65 20 21 3d  if (editValue !=
33f0: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 7b 0a 20   null).      {. 
3400: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74         int lengt
3410: 68 20 3d 20 74 68 69 73 2e 47 65 74 49 74 65 6d  h = this.GetItem
3420: 73 28 65 64 69 74 56 61 6c 75 65 29 2e 4c 65 6e  s(editValue).Len
3430: 67 74 68 3b 0a 20 20 20 20 20 20 20 20 69 6e 74  gth;.        int
3440: 20 6e 75 6d 32 20 3d 20 76 61 6c 75 65 2e 4c 65   num2 = value.Le
3450: 6e 67 74 68 3b 0a 20 20 20 20 20 20 20 20 69 66  ngth;.        if
3460: 20 28 21 28 65 64 69 74 56 61 6c 75 65 20 69 73   (!(editValue is
3470: 20 49 4c 69 73 74 29 29 0a 20 20 20 20 20 20 20   IList)).       
3480: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74   {.          ret
3490: 75 72 6e 20 65 64 69 74 56 61 6c 75 65 3b 0a 20  urn editValue;. 
34a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
34b0: 20 49 4c 69 73 74 20 6c 69 73 74 20 3d 20 28 49   IList list = (I
34c0: 4c 69 73 74 29 65 64 69 74 56 61 6c 75 65 3b 0a  List)editValue;.
34d0: 20 20 20 20 20 20 20 20 6c 69 73 74 2e 43 6c 65          list.Cle
34e0: 61 72 28 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  ar();.        fo
34f0: 72 20 28 69 6e 74 20 69 20 3d 20 30 3b 20 69 20  r (int i = 0; i 
3500: 3c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68 3b 20  < value.Length; 
3510: 69 2b 2b 29 0a 20 20 20 20 20 20 20 20 7b 0a 20  i++).        {. 
3520: 20 20 20 20 20 20 20 20 20 54 72 69 67 67 65 72           Trigger
3530: 20 74 72 69 67 20 3d 20 76 61 6c 75 65 5b 69 5d   trig = value[i]
3540: 20 61 73 20 54 72 69 67 67 65 72 3b 0a 0a 20 20   as Trigger;..  
3550: 20 20 20 20 20 20 20 20 69 66 20 28 74 72 69 67          if (trig
3560: 20 21 3d 20 6e 75 6c 6c 20 26 26 20 53 74 72 69   != null && Stri
3570: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
3580: 28 74 72 69 67 2e 53 51 4c 29 20 3d 3d 20 66 61  (trig.SQL) == fa
3590: 6c 73 65 29 0a 20 20 20 20 20 20 20 20 20 20 7b  lse).          {
35a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
35b0: 28 74 72 69 67 2e 49 73 44 69 72 74 79 29 20 64  (trig.IsDirty) d
35c0: 69 72 74 79 20 3d 20 74 72 75 65 3b 0a 20 20 20  irty = true;.   
35d0: 20 20 20 20 20 20 20 20 20 74 72 69 67 2e 4e 61           trig.Na
35e0: 6d 65 20 3d 20 74 72 69 67 2e 4e 61 6d 65 3b 0a  me = trig.Name;.
35f0: 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74              list
3600: 2e 41 64 64 28 74 72 69 67 29 3b 0a 20 20 20 20  .Add(trig);.    
3610: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
3620: 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  }..        if ((
3630: 64 69 72 74 79 20 3d 3d 20 74 72 75 65 20 7c 7c  dirty == true ||
3640: 20 6c 69 73 74 2e 43 6f 75 6e 74 20 21 3d 20 5f   list.Count != _
3650: 63 6f 75 6e 74 29 20 26 26 20 5f 66 6f 72 6d 2e  count) && _form.
3660: 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 3d 3d 20  DialogResult == 
3670: 44 69 61 6c 6f 67 52 65 73 75 6c 74 2e 4f 4b 29  DialogResult.OK)
3680: 0a 20 20 20 20 20 20 20 20 20 20 5f 74 61 62 6c  .          _tabl
3690: 65 2e 4d 61 6b 65 44 69 72 74 79 28 29 3b 0a 20  e.MakeDirty();. 
36a0: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 65       }..      re
36b0: 74 75 72 6e 20 65 64 69 74 56 61 6c 75 65 3b 0a  turn editValue;.
36c0: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a                  }.  }.}.