System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact cf205324f9dfc927b5d3c9084b3ab8cecd94b77e:


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 51 4c 69 74 65  namespace SQLite
0130: 2e 44 65 73 69 67 6e 65 72 2e 44 65 73 69 67 6e  .Designer.Design
0140: 0a 7b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  .{.  using Syste
0150: 6d 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  m;.  using Syste
0160: 6d 2e 44 61 74 61 2e 43 6f 6d 6d 6f 6e 3b 0a 20  m.Data.Common;. 
0170: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f   using System.Co
0180: 6d 70 6f 6e 65 6e 74 4d 6f 64 65 6c 2e 44 65 73  mponentModel.Des
0190: 69 67 6e 3b 0a 20 20 75 73 69 6e 67 20 53 79 73  ign;.  using Sys
01a0: 74 65 6d 2e 43 6f 6d 70 6f 6e 65 6e 74 4d 6f 64  tem.ComponentMod
01b0: 65 6c 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74  el;.  using Syst
01c0: 65 6d 2e 44 72 61 77 69 6e 67 2e 44 65 73 69 67  em.Drawing.Desig
01d0: 6e 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  n;.  using Syste
01e0: 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65  m.Collections.Ge
01f0: 6e 65 72 69 63 3b 0a 20 20 75 73 69 6e 67 20 53  neric;.  using S
0200: 79 73 74 65 6d 2e 44 61 74 61 3b 0a 20 20 75 73  ystem.Data;.  us
0210: 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74 3b  ing System.Text;
0220: 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  .  using System.
0230: 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e 3b 0a 20  Globalization;. 
0240: 20 75 73 69 6e 67 20 53 51 4c 69 74 65 2e 44 65   using SQLite.De
0250: 73 69 67 6e 65 72 2e 45 64 69 74 6f 72 73 3b 0a  signer.Editors;.
0260: 0a 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74  .  internal abst
0270: 72 61 63 74 20 63 6c 61 73 73 20 56 69 65 77 54  ract class ViewT
0280: 61 62 6c 65 42 61 73 65 3a 20 49 48 61 76 65 43  ableBase: IHaveC
0290: 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20 7b 0a 20 20  onnection.  {.  
02a0: 20 20 70 75 62 6c 69 63 20 61 62 73 74 72 61 63    public abstrac
02b0: 74 20 73 74 72 69 6e 67 20 4f 6c 64 4e 61 6d 65  t string OldName
02c0: 20 7b 20 67 65 74 3b 20 7d 0a 20 20 20 20 70 75   { get; }.    pu
02d0: 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 73 74  blic abstract st
02e0: 72 69 6e 67 20 4e 61 6d 65 20 7b 20 67 65 74 3b  ring Name { get;
02f0: 20 73 65 74 3b 20 7d 0a 20 20 20 20 70 75 62 6c   set; }.    publ
0300: 69 63 20 61 62 73 74 72 61 63 74 20 73 74 72 69  ic abstract stri
0310: 6e 67 20 43 61 74 61 6c 6f 67 20 7b 20 67 65 74  ng Catalog { get
0320: 3b 20 7d 0a 20 20 20 20 70 75 62 6c 69 63 20 61  ; }.    public a
0330: 62 73 74 72 61 63 74 20 6f 62 6a 65 63 74 20 54  bstract object T
0340: 72 69 67 67 65 72 73 20 7b 20 67 65 74 3b 20 7d  riggers { get; }
0350: 0a 20 20 20 20 70 75 62 6c 69 63 20 61 62 73 74  .    public abst
0360: 72 61 63 74 20 76 6f 69 64 20 4d 61 6b 65 44 69  ract void MakeDi
0370: 72 74 79 28 29 3b 0a 20 20 20 20 70 75 62 6c 69  rty();.    publi
0380: 63 20 61 62 73 74 72 61 63 74 20 44 62 43 6f 6e  c abstract DbCon
0390: 6e 65 63 74 69 6f 6e 20 47 65 74 43 6f 6e 6e 65  nection GetConne
03a0: 63 74 69 6f 6e 28 29 3b 0a 20 20 20 20 70 75 62  ction();.    pub
03b0: 6c 69 63 20 61 62 73 74 72 61 63 74 20 56 69 65  lic abstract Vie
03c0: 77 54 61 62 6c 65 42 61 73 65 20 44 65 73 69 67  wTableBase Desig
03d0: 6e 54 61 62 6c 65 20 7b 20 67 65 74 3b 20 7d 0a  nTable { get; }.
03e0: 20 20 7d 0a 0a 20 20 69 6e 74 65 72 6e 61 6c 20    }..  internal 
03f0: 63 6c 61 73 73 20 54 61 62 6c 65 20 3a 20 56 69  class Table : Vi
0400: 65 77 54 61 62 6c 65 42 61 73 65 2c 20 49 43 75  ewTableBase, ICu
0410: 73 74 6f 6d 54 79 70 65 44 65 73 63 72 69 70 74  stomTypeDescript
0420: 6f 72 0a 20 20 7b 0a 20 20 20 20 70 72 69 76 61  or.  {.    priva
0430: 74 65 20 73 74 72 69 6e 67 20 5f 6e 61 6d 65 3b  te string _name;
0440: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72  .    private str
0450: 69 6e 67 20 5f 6f 6c 64 6e 61 6d 65 3b 0a 20 20  ing _oldname;.  
0460: 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
0470: 20 5f 63 61 74 61 6c 6f 67 3b 0a 20 20 20 20 70   _catalog;.    p
0480: 72 69 76 61 74 65 20 4c 69 73 74 3c 43 6f 6c 75  rivate List<Colu
0490: 6d 6e 3e 20 5f 63 6f 6c 75 6d 6e 73 20 3d 20 6e  mn> _columns = n
04a0: 65 77 20 4c 69 73 74 3c 43 6f 6c 75 6d 6e 3e 28  ew List<Column>(
04b0: 29 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  );.    private b
04c0: 6f 6f 6c 20 5f 65 78 69 73 74 73 3b 0a 20 20 20  ool _exists;.   
04d0: 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
04e0: 5f 6f 72 69 67 53 71 6c 20 3d 20 53 74 72 69 6e  _origSql = Strin
04f0: 67 2e 45 6d 70 74 79 3b 0a 20 20 20 20 70 72 69  g.Empty;.    pri
0500: 76 61 74 65 20 4c 69 73 74 3c 49 6e 64 65 78 3e  vate List<Index>
0510: 20 5f 69 6e 64 65 78 65 73 20 3d 20 6e 65 77 20   _indexes = new 
0520: 4c 69 73 74 3c 49 6e 64 65 78 3e 28 29 3b 0a 20  List<Index>();. 
0530: 20 20 20 70 72 69 76 61 74 65 20 4c 69 73 74 3c     private List<
0540: 49 6e 64 65 78 3e 20 5f 6f 6c 64 69 6e 64 65 78  Index> _oldindex
0550: 65 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 49 6e  es = new List<In
0560: 64 65 78 3e 28 29 3b 0a 20 20 20 20 70 72 69 76  dex>();.    priv
0570: 61 74 65 20 4c 69 73 74 3c 46 6f 72 65 69 67 6e  ate List<Foreign
0580: 4b 65 79 3e 20 5f 66 6b 65 79 73 20 3d 20 6e 65  Key> _fkeys = ne
0590: 77 20 4c 69 73 74 3c 46 6f 72 65 69 67 6e 4b 65  w List<ForeignKe
05a0: 79 3e 28 29 3b 0a 20 20 20 20 70 72 69 76 61 74  y>();.    privat
05b0: 65 20 4c 69 73 74 3c 46 6f 72 65 69 67 6e 4b 65  e List<ForeignKe
05c0: 79 3e 20 5f 6f 6c 64 66 6b 65 79 73 20 3d 20 6e  y> _oldfkeys = n
05d0: 65 77 20 4c 69 73 74 3c 46 6f 72 65 69 67 6e 4b  ew List<ForeignK
05e0: 65 79 3e 28 29 3b 0a 20 20 20 20 70 72 69 76 61  ey>();.    priva
05f0: 74 65 20 4c 69 73 74 3c 73 74 72 69 6e 67 3e 20  te List<string> 
0600: 5f 63 68 65 63 6b 20 3d 20 6e 65 77 20 4c 69 73  _check = new Lis
0610: 74 3c 73 74 72 69 6e 67 3e 28 29 3b 0a 20 20 20  t<string>();.   
0620: 20 70 72 69 76 61 74 65 20 4c 69 73 74 3c 54 72   private List<Tr
0630: 69 67 67 65 72 3e 20 5f 74 72 69 67 67 65 72 73  igger> _triggers
0640: 20 3d 20 6e 65 77 20 4c 69 73 74 3c 54 72 69 67   = new List<Trig
0650: 67 65 72 3e 28 29 3b 0a 20 20 20 20 70 72 69 76  ger>();.    priv
0660: 61 74 65 20 4c 69 73 74 3c 54 72 69 67 67 65 72  ate List<Trigger
0670: 3e 20 5f 6f 6c 64 74 72 69 67 67 65 72 73 20 3d  > _oldtriggers =
0680: 20 6e 65 77 20 4c 69 73 74 3c 54 72 69 67 67 65   new List<Trigge
0690: 72 3e 28 29 3b 0a 20 20 20 20 70 72 69 76 61 74  r>();.    privat
06a0: 65 20 50 72 69 6d 61 72 79 4b 65 79 20 5f 6b 65  e PrimaryKey _ke
06b0: 79 3b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  y;.    internal 
06c0: 54 61 62 6c 65 44 65 73 69 67 6e 65 72 44 6f 63  TableDesignerDoc
06d0: 20 5f 6f 77 6e 65 72 3b 0a 20 20 20 20 69 6e 74   _owner;.    int
06e0: 65 72 6e 61 6c 20 44 62 43 6f 6e 6e 65 63 74 69  ernal DbConnecti
06f0: 6f 6e 20 5f 63 6f 6e 6e 65 63 74 69 6f 6e 3b 0a  on _connection;.
0700: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 54 61  .    internal Ta
0710: 62 6c 65 28 73 74 72 69 6e 67 20 74 61 62 6c 65  ble(string table
0720: 4e 61 6d 65 2c 20 44 62 43 6f 6e 6e 65 63 74 69  Name, DbConnecti
0730: 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 54  on connection, T
0740: 61 62 6c 65 44 65 73 69 67 6e 65 72 44 6f 63 20  ableDesignerDoc 
0750: 6f 77 6e 65 72 29 0a 20 20 20 20 7b 0a 20 20 20  owner).    {.   
0760: 20 20 20 5f 6f 77 6e 65 72 20 3d 20 6f 77 6e 65     _owner = owne
0770: 72 3b 0a 20 20 20 20 20 20 5f 6f 6c 64 6e 61 6d  r;.      _oldnam
0780: 65 20 3d 20 74 61 62 6c 65 4e 61 6d 65 3b 0a 20  e = tableName;. 
0790: 20 20 20 20 20 5f 63 6f 6e 6e 65 63 74 69 6f 6e       _connection
07a0: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 3b 0a 20   = connection;. 
07b0: 20 20 20 20 20 5f 6e 61 6d 65 20 3d 20 74 61 62       _name = tab
07c0: 6c 65 4e 61 6d 65 3b 0a 20 20 20 20 20 20 5f 6f  leName;.      _o
07d0: 77 6e 65 72 2e 4e 61 6d 65 20 3d 20 5f 6e 61 6d  wner.Name = _nam
07e0: 65 3b 0a 20 20 20 20 20 20 5f 63 61 74 61 6c 6f  e;.      _catalo
07f0: 67 20 3d 20 5f 63 6f 6e 6e 65 63 74 69 6f 6e 2e  g = _connection.
0800: 44 61 74 61 62 61 73 65 3b 20 2f 2f 20 6d 61 69  Database; // mai
0810: 6e 0a 0a 20 20 20 20 20 20 52 65 6c 6f 61 64 44  n..      ReloadD
0820: 65 66 69 6e 69 74 69 6f 6e 28 29 3b 0a 0a 20 20  efinition();..  
0830: 20 20 20 20 69 66 20 28 5f 6b 65 79 20 3d 3d 20      if (_key == 
0840: 6e 75 6c 6c 29 20 5f 6b 65 79 20 3d 20 6e 65 77  null) _key = new
0850: 20 50 72 69 6d 61 72 79 4b 65 79 28 5f 63 6f 6e   PrimaryKey(_con
0860: 6e 65 63 74 69 6f 6e 2c 20 74 68 69 73 2c 20 6e  nection, this, n
0870: 75 6c 6c 29 3b 0a 0a 20 20 20 20 20 20 69 66 20  ull);..      if 
0880: 28 5f 65 78 69 73 74 73 29 0a 20 20 20 20 20 20  (_exists).      
0890: 7b 0a 20 20 20 20 20 20 20 20 75 73 69 6e 67 20  {.        using 
08a0: 28 44 61 74 61 54 61 62 6c 65 20 74 62 6c 20 3d  (DataTable tbl =
08b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74 53   connection.GetS
08c0: 63 68 65 6d 61 28 22 46 6f 72 65 69 67 6e 4b 65  chema("ForeignKe
08d0: 79 73 22 2c 20 6e 65 77 20 73 74 72 69 6e 67 5b  ys", new string[
08e0: 5d 20 7b 20 43 61 74 61 6c 6f 67 2c 20 6e 75 6c  ] { Catalog, nul
08f0: 6c 2c 20 4e 61 6d 65 20 7d 29 29 0a 20 20 20 20  l, Name })).    
0900: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
0910: 66 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f 77  foreach (DataRow
0920: 20 72 6f 77 20 69 6e 20 74 62 6c 2e 52 6f 77 73   row in tbl.Rows
0930: 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20  ).          {.  
0940: 20 20 20 20 20 20 20 20 20 20 5f 66 6b 65 79 73            _fkeys
0950: 2e 41 64 64 28 6e 65 77 20 46 6f 72 65 69 67 6e  .Add(new Foreign
0960: 4b 65 79 28 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20  Key(connection, 
0970: 74 68 69 73 2c 20 72 6f 77 29 29 3b 0a 20 20 20  this, row));.   
0980: 20 20 20 20 20 20 20 20 20 5f 6f 6c 64 66 6b 65           _oldfke
0990: 79 73 2e 41 64 64 28 6e 65 77 20 46 6f 72 65 69  ys.Add(new Forei
09a0: 67 6e 4b 65 79 28 63 6f 6e 6e 65 63 74 69 6f 6e  gnKey(connection
09b0: 2c 20 74 68 69 73 2c 20 72 6f 77 29 29 3b 0a 20  , this, row));. 
09c0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
09d0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20     }.      }..  
09e0: 20 20 20 20 75 73 69 6e 67 20 28 44 61 74 61 54      using (DataT
09f0: 61 62 6c 65 20 74 62 6c 20 3d 20 63 6f 6e 6e 65  able tbl = conne
0a00: 63 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28  ction.GetSchema(
0a10: 22 43 6f 6c 75 6d 6e 73 22 2c 20 6e 65 77 20 73  "Columns", new s
0a20: 74 72 69 6e 67 5b 5d 20 7b 20 43 61 74 61 6c 6f  tring[] { Catalo
0a30: 67 2c 20 6e 75 6c 6c 2c 20 4e 61 6d 65 20 7d 29  g, null, Name })
0a40: 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  ).      {.      
0a50: 20 20 66 6f 72 65 61 63 68 20 28 44 61 74 61 52    foreach (DataR
0a60: 6f 77 20 72 6f 77 20 69 6e 20 74 62 6c 2e 52 6f  ow row in tbl.Ro
0a70: 77 73 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  ws).        {.  
0a80: 20 20 20 20 20 20 20 20 5f 63 6f 6c 75 6d 6e 73          _columns
0a90: 2e 41 64 64 28 6e 65 77 20 43 6f 6c 75 6d 6e 28  .Add(new Column(
0aa0: 72 6f 77 2c 20 74 68 69 73 29 29 3b 0a 20 20 20  row, this));.   
0ab0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
0ac0: 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63     }..    public
0ad0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 4d   override void M
0ae0: 61 6b 65 44 69 72 74 79 28 29 0a 20 20 20 20 7b  akeDirty().    {
0af0: 0a 20 20 20 20 20 20 5f 6f 77 6e 65 72 2e 4d 61  .      _owner.Ma
0b00: 6b 65 44 69 72 74 79 28 29 3b 0a 20 20 20 20 7d  keDirty();.    }
0b10: 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
0b20: 69 64 20 52 65 6c 6f 61 64 44 65 66 69 6e 69 74  id ReloadDefinit
0b30: 69 6f 6e 28 29 0a 20 20 20 20 7b 0a 20 20 20 20  ion().    {.    
0b40: 20 20 75 73 69 6e 67 20 28 44 61 74 61 54 61 62    using (DataTab
0b50: 6c 65 20 74 62 6c 20 3d 20 5f 63 6f 6e 6e 65 63  le tbl = _connec
0b60: 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28 22  tion.GetSchema("
0b70: 54 61 62 6c 65 73 22 2c 20 6e 65 77 20 73 74 72  Tables", new str
0b80: 69 6e 67 5b 5d 20 7b 20 43 61 74 61 6c 6f 67 2c  ing[] { Catalog,
0b90: 20 6e 75 6c 6c 2c 20 4e 61 6d 65 20 7d 29 29 0a   null, Name })).
0ba0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
0bb0: 69 66 20 28 74 62 6c 2e 52 6f 77 73 2e 43 6f 75  if (tbl.Rows.Cou
0bc0: 6e 74 20 3e 20 30 29 0a 20 20 20 20 20 20 20 20  nt > 0).        
0bd0: 7b 0a 20 20 20 20 20 20 20 20 20 20 5f 65 78 69  {.          _exi
0be0: 73 74 73 20 3d 20 74 72 75 65 3b 0a 20 20 20 20  sts = true;.    
0bf0: 20 20 20 20 20 20 5f 6f 72 69 67 53 71 6c 20 3d        _origSql =
0c00: 20 74 62 6c 2e 52 6f 77 73 5b 30 5d 5b 22 54 41   tbl.Rows[0]["TA
0c10: 42 4c 45 5f 44 45 46 49 4e 49 54 49 4f 4e 22 5d  BLE_DEFINITION"]
0c20: 2e 54 6f 53 74 72 69 6e 67 28 29 2e 54 72 69 6d  .ToString().Trim
0c30: 28 29 2e 54 72 69 6d 45 6e 64 28 27 3b 27 29 3b  ().TrimEnd(';');
0c40: 0a 20 20 20 20 20 20 20 20 20 20 5f 6f 6c 64 6e  .          _oldn
0c50: 61 6d 65 20 3d 20 4e 61 6d 65 3b 0a 20 20 20 20  ame = Name;.    
0c60: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 65 6c      }.        el
0c70: 73 65 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  se.        {.   
0c80: 20 20 20 20 20 20 20 5f 65 78 69 73 74 73 20 3d         _exists =
0c90: 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20   false;.        
0ca0: 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20    return;.      
0cb0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
0cc0: 20 20 0a 20 20 20 20 20 20 5f 69 6e 64 65 78 65    .      _indexe
0cd0: 73 2e 43 6c 65 61 72 28 29 3b 0a 20 20 20 20 20  s.Clear();.     
0ce0: 20 5f 6f 6c 64 69 6e 64 65 78 65 73 2e 43 6c 65   _oldindexes.Cle
0cf0: 61 72 28 29 3b 0a 0a 20 20 20 20 20 20 75 73 69  ar();..      usi
0d00: 6e 67 20 28 44 61 74 61 54 61 62 6c 65 20 74 62  ng (DataTable tb
0d10: 6c 20 3d 20 5f 63 6f 6e 6e 65 63 74 69 6f 6e 2e  l = _connection.
0d20: 47 65 74 53 63 68 65 6d 61 28 22 49 6e 64 65 78  GetSchema("Index
0d30: 65 73 22 2c 20 6e 65 77 20 73 74 72 69 6e 67 5b  es", new string[
0d40: 5d 20 7b 20 43 61 74 61 6c 6f 67 2c 20 6e 75 6c  ] { Catalog, nul
0d50: 6c 2c 20 4e 61 6d 65 20 7d 29 29 0a 20 20 20 20  l, Name })).    
0d60: 20 20 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 65    {.        fore
0d70: 61 63 68 20 28 44 61 74 61 52 6f 77 20 72 6f 77  ach (DataRow row
0d80: 20 69 6e 20 74 62 6c 2e 52 6f 77 73 29 0a 20 20   in tbl.Rows).  
0d90: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
0da0: 20 20 69 66 20 28 28 62 6f 6f 6c 29 72 6f 77 5b    if ((bool)row[
0db0: 22 50 52 49 4d 41 52 59 5f 4b 45 59 22 5d 20 3d  "PRIMARY_KEY"] =
0dc0: 3d 20 66 61 6c 73 65 29 0a 20 20 20 20 20 20 20  = false).       
0dd0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
0de0: 20 69 66 20 28 72 6f 77 5b 22 49 4e 44 45 58 5f   if (row["INDEX_
0df0: 4e 41 4d 45 22 5d 2e 54 6f 53 74 72 69 6e 67 28  NAME"].ToString(
0e00: 29 2e 53 74 61 72 74 73 57 69 74 68 28 22 73 71  ).StartsWith("sq
0e10: 6c 69 74 65 5f 22 2c 20 53 74 72 69 6e 67 43 6f  lite_", StringCo
0e20: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
0e30: 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 66  IgnoreCase) == f
0e40: 61 6c 73 65 29 0a 20 20 20 20 20 20 20 20 20 20  alse).          
0e50: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
0e60: 20 20 5f 69 6e 64 65 78 65 73 2e 41 64 64 28 6e    _indexes.Add(n
0e70: 65 77 20 49 6e 64 65 78 28 5f 63 6f 6e 6e 65 63  ew Index(_connec
0e80: 74 69 6f 6e 2c 20 74 68 69 73 2c 20 72 6f 77 29  tion, this, row)
0e90: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
0ea0: 20 5f 6f 6c 64 69 6e 64 65 78 65 73 2e 41 64 64   _oldindexes.Add
0eb0: 28 6e 65 77 20 49 6e 64 65 78 28 5f 63 6f 6e 6e  (new Index(_conn
0ec0: 65 63 74 69 6f 6e 2c 20 74 68 69 73 2c 20 72 6f  ection, this, ro
0ed0: 77 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  w));.           
0ee0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20   }.          }. 
0ef0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
0f00: 20 28 5f 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0a   (_key == null).
0f10: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
0f20: 20 20 20 20 20 20 20 20 5f 6b 65 79 20 3d 20 6e          _key = n
0f30: 65 77 20 50 72 69 6d 61 72 79 4b 65 79 28 5f 63  ew PrimaryKey(_c
0f40: 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 69 73 2c  onnection, this,
0f50: 20 72 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20   row);.         
0f60: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
0f70: 20 20 20 7d 0a 0a 20 20 20 20 20 20 5f 63 68 65     }..      _che
0f80: 63 6b 2e 43 6c 65 61 72 28 29 3b 0a 20 20 20 20  ck.Clear();.    
0f90: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
0fa0: 62 75 69 6c 64 65 72 20 3d 20 6e 65 77 20 53 74  builder = new St
0fb0: 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0a 20  ringBuilder();. 
0fc0: 20 20 20 20 20 53 69 6d 70 6c 65 54 6f 6b 65 6e       SimpleToken
0fd0: 69 7a 65 72 2e 53 74 72 69 6e 67 50 61 72 74 73  izer.StringParts
0fe0: 5b 5d 20 61 72 72 20 3d 20 53 69 6d 70 6c 65 54  [] arr = SimpleT
0ff0: 6f 6b 65 6e 69 7a 65 72 2e 42 72 65 61 6b 53 74  okenizer.BreakSt
1000: 72 69 6e 67 28 5f 6f 72 69 67 53 71 6c 29 3b 0a  ring(_origSql);.
1010: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e        for (int n
1020: 20 3d 20 30 3b 20 6e 20 3c 20 61 72 72 2e 4c 65   = 0; n < arr.Le
1030: 6e 67 74 68 20 2d 20 33 3b 20 6e 2b 2b 29 0a 20  ngth - 3; n++). 
1040: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69       {.        i
1050: 66 20 28 61 72 72 5b 6e 5d 2e 6b 65 79 77 6f 72  f (arr[n].keywor
1060: 64 20 3d 3d 20 22 43 4f 4e 53 54 52 41 49 4e 54  d == "CONSTRAINT
1070: 22 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  ").        {.   
1080: 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 4c         builder.L
1090: 65 6e 67 74 68 20 3d 20 30 3b 0a 20 20 20 20 20  ength = 0;.     
10a0: 20 20 20 20 20 69 6e 74 20 78 3b 0a 20 20 20 20       int x;.    
10b0: 20 20 20 20 20 20 66 6f 72 20 28 78 20 3d 20 31        for (x = 1
10c0: 3b 20 78 20 3c 20 33 3b 20 78 2b 2b 29 0a 20 20  ; x < 3; x++).  
10d0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
10e0: 20 20 20 20 20 20 69 66 20 28 61 72 72 5b 6e 20        if (arr[n 
10f0: 2b 20 78 5d 2e 6b 65 79 77 6f 72 64 20 3d 3d 20  + x].keyword == 
1100: 22 43 48 45 43 4b 22 29 0a 20 20 20 20 20 20 20  "CHECK").       
1110: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1120: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1130: 20 20 20 20 69 66 20 28 78 20 3d 3d 20 33 29 0a      if (x == 3).
1140: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
1150: 20 20 20 20 20 20 20 20 6e 20 2b 3d 20 32 3b 0a          n += 2;.
1160: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1170: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  inue;.          
1180: 7d 0a 20 20 20 20 20 20 20 20 20 20 78 20 2b 3d  }.          x +=
1190: 20 6e 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20   n + 1;.        
11a0: 20 20 69 6e 74 20 64 65 70 74 68 20 3d 20 61 72    int depth = ar
11b0: 72 5b 6e 5d 2e 64 65 70 74 68 3b 0a 20 20 20 20  r[n].depth;.    
11c0: 20 20 20 20 20 20 69 6e 74 20 62 61 73 65 64 65        int basede
11d0: 70 74 68 20 3d 20 61 72 72 5b 78 5d 2e 64 65 70  pth = arr[x].dep
11e0: 74 68 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f  th;.          fo
11f0: 72 20 28 3b 20 78 20 3c 20 61 72 72 2e 4c 65 6e  r (; x < arr.Len
1200: 67 74 68 3b 20 78 2b 2b 29 0a 20 20 20 20 20 20  gth; x++).      
1210: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
1220: 20 20 69 66 20 28 61 72 72 5b 78 5d 2e 64 65 70    if (arr[x].dep
1230: 74 68 20 3c 20 62 61 73 65 64 65 70 74 68 29 0a  th < basedepth).
1240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
1250: 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
1260: 20 20 69 66 20 28 62 75 69 6c 64 65 72 2e 4c 65    if (builder.Le
1270: 6e 67 74 68 20 3e 20 30 29 0a 20 20 20 20 20 20  ngth > 0).      
1280: 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e          builder.
1290: 41 70 70 65 6e 64 28 22 20 22 29 3b 0a 0a 20 20  Append(" ");..  
12a0: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
12b0: 28 64 65 70 74 68 20 3c 20 61 72 72 5b 78 5d 2e  (depth < arr[x].
12c0: 64 65 70 74 68 29 0a 20 20 20 20 20 20 20 20 20  depth).         
12d0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
12e0: 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
12f0: 64 28 22 28 22 29 3b 0a 20 20 20 20 20 20 20 20  d("(");.        
1300: 20 20 20 20 20 20 64 65 70 74 68 2b 2b 3b 0a 20        depth++;. 
1310: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
1320: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
1330: 64 65 70 74 68 20 3e 20 61 72 72 5b 78 5d 2e 64  depth > arr[x].d
1340: 65 70 74 68 29 0a 20 20 20 20 20 20 20 20 20 20  epth).          
1350: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
1360: 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
1370: 28 22 29 22 29 3b 0a 20 20 20 20 20 20 20 20 20  (")");.         
1380: 20 20 20 20 20 64 65 70 74 68 2d 2d 3b 0a 20 20       depth--;.  
1390: 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20            }..   
13a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
13b0: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
13c0: 79 28 61 72 72 5b 78 5d 2e 71 75 6f 74 65 29 20  y(arr[x].quote) 
13d0: 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20 20 20 20  == false).      
13e0: 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e          builder.
13f0: 41 70 70 65 6e 64 28 61 72 72 5b 78 5d 2e 71 75  Append(arr[x].qu
1400: 6f 74 65 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20  ote[0]);.       
1410: 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70       builder.App
1420: 65 6e 64 28 61 72 72 5b 78 5d 2e 76 61 6c 75 65  end(arr[x].value
1430: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  );.            i
1440: 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
1450: 4f 72 45 6d 70 74 79 28 61 72 72 5b 78 5d 2e 71  OrEmpty(arr[x].q
1460: 75 6f 74 65 29 20 3d 3d 20 66 61 6c 73 65 29 0a  uote) == false).
1470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75                bu
1480: 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 61 72 72  ilder.Append(arr
1490: 5b 78 5d 2e 71 75 6f 74 65 5b 31 5d 29 3b 0a 0a  [x].quote[1]);..
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
14b0: 61 72 72 5b 78 5d 2e 73 65 70 20 3d 3d 20 74 72  arr[x].sep == tr
14c0: 75 65 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  ue) break;.     
14d0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
14e0: 20 77 68 69 6c 65 20 28 64 65 70 74 68 20 3e 20   while (depth > 
14f0: 61 72 72 5b 6e 5d 2e 64 65 70 74 68 29 0a 20 20  arr[n].depth).  
1500: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
1510: 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70        builder.Ap
1520: 70 65 6e 64 28 22 29 22 29 3b 0a 20 20 20 20 20  pend(")");.     
1530: 20 20 20 20 20 20 20 64 65 70 74 68 2d 2d 3b 0a         depth--;.
1540: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1550: 20 20 20 20 20 20 6e 20 3d 20 78 3b 0a 20 20 20        n = x;.   
1560: 20 20 20 20 20 20 20 5f 63 68 65 63 6b 2e 41 64         _check.Ad
1570: 64 28 62 75 69 6c 64 65 72 2e 54 6f 53 74 72 69  d(builder.ToStri
1580: 6e 67 28 29 29 3b 0a 20 20 20 20 20 20 20 20 7d  ng());.        }
1590: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
15a0: 62 75 69 6c 64 65 72 2e 4c 65 6e 67 74 68 20 3d  builder.Length =
15b0: 20 30 3b 0a 20 20 20 20 20 20 62 75 69 6c 64 65   0;.      builde
15c0: 72 2e 41 70 70 65 6e 64 4c 69 6e 65 28 22 2d 2d  r.AppendLine("--
15d0: 20 4f 72 69 67 69 6e 61 6c 20 74 61 62 6c 65 20   Original table 
15e0: 73 63 68 65 6d 61 22 29 3b 0a 20 20 20 20 20 20  schema");.      
15f0: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 5f  builder.Append(_
1600: 6f 72 69 67 53 71 6c 29 3b 0a 0a 20 20 20 20 20  origSql);..     
1610: 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 4c   builder.AppendL
1620: 69 6e 65 28 22 3b 22 29 3b 0a 20 20 20 20 20 20  ine(";");.      
1630: 66 6f 72 65 61 63 68 20 28 49 6e 64 65 78 20 69  foreach (Index i
1640: 64 78 20 69 6e 20 5f 6f 6c 64 69 6e 64 65 78 65  dx in _oldindexe
1650: 73 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  s).      {.     
1660: 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
1670: 64 46 6f 72 6d 61 74 28 22 7b 30 7d 3b 5c 72 5c  dFormat("{0};\r\
1680: 6e 22 2c 20 69 64 78 2e 4f 72 69 67 69 6e 61 6c  n", idx.Original
1690: 53 71 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  Sql);.      }.. 
16a0: 20 20 20 20 20 5f 74 72 69 67 67 65 72 73 2e 43       _triggers.C
16b0: 6c 65 61 72 28 29 3b 0a 20 20 20 20 20 20 5f 6f  lear();.      _o
16c0: 6c 64 74 72 69 67 67 65 72 73 2e 43 6c 65 61 72  ldtriggers.Clear
16d0: 28 29 3b 0a 0a 20 20 20 20 20 20 75 73 69 6e 67  ();..      using
16e0: 20 28 44 61 74 61 54 61 62 6c 65 20 74 62 6c 20   (DataTable tbl 
16f0: 3d 20 5f 63 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65  = _connection.Ge
1700: 74 53 63 68 65 6d 61 28 22 54 72 69 67 67 65 72  tSchema("Trigger
1710: 73 22 2c 20 6e 65 77 20 73 74 72 69 6e 67 5b 5d  s", new string[]
1720: 20 7b 20 43 61 74 61 6c 6f 67 2c 20 6e 75 6c 6c   { Catalog, null
1730: 2c 20 4e 61 6d 65 20 7d 29 29 0a 20 20 20 20 20  , Name })).     
1740: 20 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61   {.        forea
1750: 63 68 20 28 44 61 74 61 52 6f 77 20 72 6f 77 20  ch (DataRow row 
1760: 69 6e 20 74 62 6c 2e 52 6f 77 73 29 0a 20 20 20  in tbl.Rows).   
1770: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
1780: 20 54 72 69 67 67 65 72 20 74 20 3d 20 6e 65 77   Trigger t = new
1790: 20 54 72 69 67 67 65 72 28 74 68 69 73 2c 20 72   Trigger(this, r
17a0: 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 5f  ow);.          _
17b0: 74 72 69 67 67 65 72 73 2e 41 64 64 28 74 29 3b  triggers.Add(t);
17c0: 0a 20 20 20 20 20 20 20 20 20 20 5f 6f 6c 64 74  .          _oldt
17d0: 72 69 67 67 65 72 73 2e 41 64 64 28 28 28 49 43  riggers.Add(((IC
17e0: 6c 6f 6e 65 61 62 6c 65 29 74 29 2e 43 6c 6f 6e  loneable)t).Clon
17f0: 65 28 29 20 61 73 20 54 72 69 67 67 65 72 29 3b  e() as Trigger);
1800: 0a 0a 20 20 20 20 20 20 20 20 20 20 62 75 69 6c  ..          buil
1810: 64 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d 61 74  der.AppendFormat
1820: 28 22 7b 30 7d 3b 5c 72 5c 6e 22 2c 20 74 2e 4f  ("{0};\r\n", t.O
1830: 72 69 67 69 6e 61 6c 53 71 6c 29 3b 0a 20 20 20  riginalSql);.   
1840: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
1850: 20 20 20 20 20 20 5f 6f 72 69 67 53 71 6c 20 3d        _origSql =
1860: 20 62 75 69 6c 64 65 72 2e 54 6f 53 74 72 69 6e   builder.ToStrin
1870: 67 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  g();.    }..    
1880: 69 6e 74 65 72 6e 61 6c 20 76 6f 69 64 20 43 6f  internal void Co
1890: 6d 6d 69 74 74 65 64 28 29 0a 20 20 20 20 7b 0a  mmitted().    {.
18a0: 20 20 20 20 20 20 5f 65 78 69 73 74 73 20 3d 20        _exists = 
18b0: 74 72 75 65 3b 0a 20 20 20 20 20 20 52 65 6c 6f  true;.      Relo
18c0: 61 64 44 65 66 69 6e 69 74 69 6f 6e 28 29 3b 0a  adDefinition();.
18d0: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28  .      foreach (
18e0: 43 6f 6c 75 6d 6e 20 63 20 69 6e 20 43 6f 6c 75  Column c in Colu
18f0: 6d 6e 73 29 0a 20 20 20 20 20 20 20 20 63 2e 43  mns).        c.C
1900: 6f 6d 6d 69 74 74 65 64 28 29 3b 0a 0a 20 20 20  ommitted();..   
1910: 20 20 20 66 6f 72 65 61 63 68 20 28 46 6f 72 65     foreach (Fore
1920: 69 67 6e 4b 65 79 20 6b 65 79 20 69 6e 20 46 6f  ignKey key in Fo
1930: 72 65 69 67 6e 4b 65 79 73 29 0a 20 20 20 20 20  reignKeys).     
1940: 20 20 20 6b 65 79 2e 43 6c 65 61 72 44 69 72 74     key.ClearDirt
1950: 79 28 29 3b 0a 0a 20 20 20 20 20 20 66 6f 72 65  y();..      fore
1960: 61 63 68 20 28 49 6e 64 65 78 20 69 64 78 20 69  ach (Index idx i
1970: 6e 20 49 6e 64 65 78 65 73 29 0a 20 20 20 20 20  n Indexes).     
1980: 20 20 20 69 64 78 2e 43 6c 65 61 72 44 69 72 74     idx.ClearDirt
1990: 79 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28  y();..      if (
19a0: 50 72 69 6d 61 72 79 4b 65 79 20 21 3d 20 6e 75  PrimaryKey != nu
19b0: 6c 6c 29 0a 20 20 20 20 20 20 20 20 50 72 69 6d  ll).        Prim
19c0: 61 72 79 4b 65 79 2e 43 6c 65 61 72 44 69 72 74  aryKey.ClearDirt
19d0: 79 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  y();.    }..    
19e0: 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65  [Browsable(false
19f0: 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 4c 69  )].    public Li
1a00: 73 74 3c 49 6e 64 65 78 3e 20 49 6e 64 65 78 65  st<Index> Indexe
1a10: 73 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65  s.    {.      ge
1a20: 74 20 7b 20 72 65 74 75 72 6e 20 5f 69 6e 64 65  t { return _inde
1a30: 78 65 73 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20  xes; }.    }..  
1a40: 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c    [Browsable(fal
1a50: 73 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20  se)].    public 
1a60: 50 72 69 6d 61 72 79 4b 65 79 20 50 72 69 6d 61  PrimaryKey Prima
1a70: 72 79 4b 65 79 0a 20 20 20 20 7b 0a 20 20 20 20  ryKey.    {.    
1a80: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
1a90: 6b 65 79 3b 20 7d 0a 20 20 20 20 20 20 73 65 74  key; }.      set
1aa0: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
1ab0: 20 5f 6b 65 79 20 3d 20 76 61 6c 75 65 3b 0a 20   _key = value;. 
1ac0: 20 20 20 20 20 20 20 5f 6f 77 6e 65 72 2e 49 6e         _owner.In
1ad0: 76 61 6c 69 64 61 74 65 28 29 3b 0a 20 20 20 20  validate();.    
1ae0: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b    }.    }..    [
1af0: 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65 29  Browsable(false)
1b00: 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 4c 69 73  ].    public Lis
1b10: 74 3c 46 6f 72 65 69 67 6e 4b 65 79 3e 20 46 6f  t<ForeignKey> Fo
1b20: 72 65 69 67 6e 4b 65 79 73 0a 20 20 20 20 7b 0a  reignKeys.    {.
1b30: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1b40: 72 6e 20 5f 66 6b 65 79 73 3b 20 7d 0a 20 20 20  rn _fkeys; }.   
1b50: 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61 62   }..    [Browsab
1b60: 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20 70  le(false)].    p
1b70: 75 62 6c 69 63 20 4c 69 73 74 3c 73 74 72 69 6e  ublic List<strin
1b80: 67 3e 20 43 68 65 63 6b 0a 20 20 20 20 7b 0a 20  g> Check.    {. 
1b90: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1ba0: 6e 20 5f 63 68 65 63 6b 3b 20 7d 0a 20 20 20 20  n _check; }.    
1bb0: 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c  }..    [Browsabl
1bc0: 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20 70 75  e(false)].    pu
1bd0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62  blic override ob
1be0: 6a 65 63 74 20 54 72 69 67 67 65 72 73 0a 20 20  ject Triggers.  
1bf0: 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20    {.      get { 
1c00: 72 65 74 75 72 6e 20 5f 74 72 69 67 67 65 72 73  return _triggers
1c10: 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b  ; }.    }..    [
1c20: 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65 29  Browsable(false)
1c30: 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72  ].    public str
1c40: 69 6e 67 20 4f 72 69 67 69 6e 61 6c 53 71 6c 0a  ing OriginalSql.
1c50: 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20      {.      get 
1c60: 7b 20 72 65 74 75 72 6e 20 5f 6f 72 69 67 53 71  { return _origSq
1c70: 6c 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  l; }.    }..    
1c80: 5b 43 61 74 65 67 6f 72 79 28 22 53 74 6f 72 61  [Category("Stora
1c90: 67 65 22 29 5d 0a 20 20 20 20 5b 52 65 66 72 65  ge")].    [Refre
1ca0: 73 68 50 72 6f 70 65 72 74 69 65 73 28 52 65 66  shProperties(Ref
1cb0: 72 65 73 68 50 72 6f 70 65 72 74 69 65 73 2e 41  reshProperties.A
1cc0: 6c 6c 29 5d 0a 20 20 20 20 5b 50 61 72 65 6e 74  ll)].    [Parent
1cd0: 68 65 73 69 7a 65 50 72 6f 70 65 72 74 79 4e 61  hesizePropertyNa
1ce0: 6d 65 28 74 72 75 65 29 5d 0a 20 20 20 20 5b 4e  me(true)].    [N
1cf0: 6f 74 69 66 79 50 61 72 65 6e 74 50 72 6f 70 65  otifyParentPrope
1d00: 72 74 79 28 74 72 75 65 29 5d 0a 20 20 20 20 70  rty(true)].    p
1d10: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73  ublic override s
1d20: 74 72 69 6e 67 20 4e 61 6d 65 0a 20 20 20 20 7b  tring Name.    {
1d30: 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74  .      get { ret
1d40: 75 72 6e 20 5f 6e 61 6d 65 3b 20 7d 0a 20 20 20  urn _name; }.   
1d50: 20 20 20 73 65 74 0a 20 20 20 20 20 20 7b 0a 20     set.      {. 
1d60: 20 20 20 20 20 20 20 69 66 20 28 5f 6e 61 6d 65         if (_name
1d70: 20 21 3d 20 76 61 6c 75 65 29 0a 20 20 20 20 20   != value).     
1d80: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 5f     {.          _
1d90: 6e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 0a 20 20  name = value;.  
1da0: 20 20 20 20 20 20 20 20 5f 6f 77 6e 65 72 2e 4e          _owner.N
1db0: 61 6d 65 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20  ame = value;.   
1dc0: 20 20 20 20 20 20 20 5f 6f 77 6e 65 72 2e 4d 61         _owner.Ma
1dd0: 6b 65 44 69 72 74 79 28 29 3b 0a 20 20 20 20 20  keDirty();.     
1de0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
1df0: 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61 62   }..    [Browsab
1e00: 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20 70  le(false)].    p
1e10: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73  ublic override s
1e20: 74 72 69 6e 67 20 4f 6c 64 4e 61 6d 65 0a 20 20  tring OldName.  
1e30: 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20    {.      get { 
1e40: 72 65 74 75 72 6e 20 5f 6f 6c 64 6e 61 6d 65 3b  return _oldname;
1e50: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75   }.    }..    pu
1e60: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74  blic override st
1e70: 72 69 6e 67 20 54 6f 53 74 72 69 6e 67 28 29 0a  ring ToString().
1e80: 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75      {.      retu
1e90: 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
1ea0: 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76  (CultureInfo.Inv
1eb0: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 22  ariantCulture, "
1ec0: 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d 22 2c 20 43 61  [{0}].[{1}]", Ca
1ed0: 74 61 6c 6f 67 2c 20 4e 61 6d 65 29 3b 0a 20 20  talog, Name);.  
1ee0: 20 20 7d 0a 0a 20 20 20 20 5b 43 61 74 65 67 6f    }..    [Catego
1ef0: 72 79 28 22 53 74 6f 72 61 67 65 22 29 5d 0a 20  ry("Storage")]. 
1f00: 20 20 20 5b 45 64 69 74 6f 72 28 74 79 70 65 6f     [Editor(typeo
1f10: 66 28 43 61 74 61 6c 6f 67 54 79 70 65 45 64 69  f(CatalogTypeEdi
1f20: 74 6f 72 29 2c 20 74 79 70 65 6f 66 28 55 49 54  tor), typeof(UIT
1f30: 79 70 65 45 64 69 74 6f 72 29 29 5d 0a 20 20 20  ypeEditor))].   
1f40: 20 5b 44 65 66 61 75 6c 74 56 61 6c 75 65 28 22   [DefaultValue("
1f50: 6d 61 69 6e 22 29 5d 0a 20 20 20 20 5b 52 65 66  main")].    [Ref
1f60: 72 65 73 68 50 72 6f 70 65 72 74 69 65 73 28 52  reshProperties(R
1f70: 65 66 72 65 73 68 50 72 6f 70 65 72 74 69 65 73  efreshProperties
1f80: 2e 41 6c 6c 29 5d 0a 20 20 20 20 70 75 62 6c 69  .All)].    publi
1f90: 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  c override strin
1fa0: 67 20 43 61 74 61 6c 6f 67 0a 20 20 20 20 7b 0a  g Catalog.    {.
1fb0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1fc0: 72 6e 20 5f 63 61 74 61 6c 6f 67 3b 20 7d 0a 20  rn _catalog; }. 
1fd0: 20 20 20 7d 0a 0a 20 20 20 20 5b 43 61 74 65 67     }..    [Categ
1fe0: 6f 72 79 28 22 53 74 6f 72 61 67 65 22 29 5d 0a  ory("Storage")].
1ff0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
2000: 67 20 44 61 74 61 62 61 73 65 0a 20 20 20 20 7b  g Database.    {
2010: 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74  .      get { ret
2020: 75 72 6e 20 5f 63 6f 6e 6e 65 63 74 69 6f 6e 2e  urn _connection.
2030: 44 61 74 61 53 6f 75 72 63 65 3b 20 7d 0a 20 20  DataSource; }.  
2040: 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61    }..    [Browsa
2050: 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20  ble(false)].    
2060: 70 75 62 6c 69 63 20 4c 69 73 74 3c 43 6f 6c 75  public List<Colu
2070: 6d 6e 3e 20 43 6f 6c 75 6d 6e 73 0a 20 20 20 20  mn> Columns.    
2080: 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65  {.      get { re
2090: 74 75 72 6e 20 5f 63 6f 6c 75 6d 6e 73 3b 20 7d  turn _columns; }
20a0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c  .    }..    publ
20b0: 69 63 20 73 74 72 69 6e 67 20 47 65 74 53 71 6c  ic string GetSql
20c0: 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 53  ().    {.      S
20d0: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 62 75 69  tringBuilder bui
20e0: 6c 64 65 72 20 3d 20 6e 65 77 20 53 74 72 69 6e  lder = new Strin
20f0: 67 42 75 69 6c 64 65 72 28 29 3b 0a 20 20 20 20  gBuilder();.    
2100: 20 20 73 74 72 69 6e 67 20 61 6c 74 4e 61 6d 65    string altName
2110: 20 3d 20 6e 75 6c 6c 3b 0a 0a 20 20 20 20 20 20   = null;..      
2120: 69 66 20 28 5f 65 78 69 73 74 73 29 0a 20 20 20  if (_exists).   
2130: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 47 75 69     {.        Gui
2140: 64 20 67 20 3d 20 47 75 69 64 2e 4e 65 77 47 75  d g = Guid.NewGu
2150: 69 64 28 29 3b 0a 20 20 20 20 20 20 20 20 61 6c  id();.        al
2160: 74 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46  tName = String.F
2170: 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
2180: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
2190: 72 65 2c 20 22 7b 30 7d 5f 7b 31 7d 22 2c 20 4e  re, "{0}_{1}", N
21a0: 61 6d 65 2c 20 67 2e 54 6f 53 74 72 69 6e 67 28  ame, g.ToString(
21b0: 22 4e 22 29 29 3b 0a 0a 20 20 20 20 20 20 20 20  "N"));..        
21c0: 69 66 20 28 5f 6f 6c 64 69 6e 64 65 78 65 73 2e  if (_oldindexes.
21d0: 43 6f 75 6e 74 20 3e 20 30 29 0a 20 20 20 20 20  Count > 0).     
21e0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 62     {.          b
21f0: 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 2d  uilder.Append("-
2200: 2d 20 44 72 6f 70 20 70 72 65 76 69 6f 75 73 20  - Drop previous 
2210: 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 65 20 74  indexes on the t
2220: 61 62 6c 65 5c 72 5c 6e 22 29 3b 0a 20 20 20 20  able\r\n");.    
2230: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 49        foreach (I
2240: 6e 64 65 78 20 69 64 78 20 69 6e 20 5f 6f 6c 64  ndex idx in _old
2250: 69 6e 64 65 78 65 73 29 0a 20 20 20 20 20 20 20  indexes).       
2260: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
2270: 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46   builder.AppendF
2280: 6f 72 6d 61 74 28 22 44 52 4f 50 20 49 4e 44 45  ormat("DROP INDE
2290: 58 20 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d 3b 5c 72  X [{0}].[{1}];\r
22a0: 5c 6e 22 2c 20 5f 63 61 74 61 6c 6f 67 2c 20 69  \n", _catalog, i
22b0: 64 78 2e 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  dx.Name);.      
22c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
22d0: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 4c 69  builder.AppendLi
22e0: 6e 65 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ne();.        }.
22f0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 6f 6c  .        if (_ol
2300: 64 74 72 69 67 67 65 72 73 2e 43 6f 75 6e 74 20  dtriggers.Count 
2310: 3e 20 30 29 0a 20 20 20 20 20 20 20 20 7b 0a 20  > 0).        {. 
2320: 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72           builder
2330: 2e 41 70 70 65 6e 64 28 22 2d 2d 20 44 72 6f 70  .Append("-- Drop
2340: 20 70 72 65 76 69 6f 75 73 20 74 72 69 67 67 65   previous trigge
2350: 72 73 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 5c  rs on the table\
2360: 72 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20  r\n");.         
2370: 20 66 6f 72 65 61 63 68 20 28 54 72 69 67 67 65   foreach (Trigge
2380: 72 20 74 72 69 67 20 69 6e 20 5f 6f 6c 64 74 72  r trig in _oldtr
2390: 69 67 67 65 72 73 29 0a 20 20 20 20 20 20 20 20  iggers).        
23a0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
23b0: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f  builder.AppendFo
23c0: 72 6d 61 74 28 22 44 52 4f 50 20 54 52 49 47 47  rmat("DROP TRIGG
23d0: 45 52 20 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d 3b 5c  ER [{0}].[{1}];\
23e0: 72 5c 6e 22 2c 20 5f 63 61 74 61 6c 6f 67 2c 20  r\n", _catalog, 
23f0: 74 72 69 67 2e 4e 61 6d 65 29 3b 0a 20 20 20 20  trig.Name);.    
2400: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2410: 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
2420: 4c 69 6e 65 28 29 3b 0a 20 20 20 20 20 20 20 20  Line();.        
2430: 7d 0a 0a 20 20 20 20 20 20 20 20 62 75 69 6c 64  }..        build
2440: 65 72 2e 41 70 70 65 6e 64 28 22 2d 2d 20 52 65  er.Append("-- Re
2450: 6e 61 6d 65 20 74 68 65 20 6f 6c 64 20 74 61 62  name the old tab
2460: 6c 65 5c 72 5c 6e 22 29 3b 0a 20 20 20 20 20 20  le\r\n");.      
2470: 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
2480: 46 6f 72 6d 61 74 28 22 41 4c 54 45 52 20 54 41  Format("ALTER TA
2490: 42 4c 45 20 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d 20  BLE [{0}].[{1}] 
24a0: 52 45 4e 41 4d 45 20 54 4f 20 5b 7b 32 7d 5d 3b  RENAME TO [{2}];
24b0: 5c 72 5c 6e 5c 72 5c 6e 22 2c 20 5f 63 61 74 61  \r\n\r\n", _cata
24c0: 6c 6f 67 2c 20 5f 6f 6c 64 6e 61 6d 65 2c 20 61  log, _oldname, a
24d0: 6c 74 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d  ltName);.      }
24e0: 0a 0a 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e  ..      builder.
24f0: 41 70 70 65 6e 64 28 22 2d 2d 20 43 72 65 61 74  Append("-- Creat
2500: 65 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 5c  e the new table\
2510: 72 5c 6e 22 29 3b 0a 20 20 20 20 20 20 62 75 69  r\n");.      bui
2520: 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d 61  lder.AppendForma
2530: 74 28 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  t("CREATE TABLE 
2540: 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d 20 28 5c 72 5c  [{0}].[{1}] (\r\
2550: 6e 22 2c 20 5f 63 61 74 61 6c 6f 67 2c 20 4e 61  n", _catalog, Na
2560: 6d 65 29 3b 0a 20 20 20 20 20 20 73 74 72 69 6e  me);.      strin
2570: 67 20 73 65 70 61 72 61 74 6f 72 20 3d 20 22 20  g separator = " 
2580: 20 20 20 22 3b 0a 0a 20 20 20 20 20 20 66 6f 72     ";..      for
2590: 65 61 63 68 20 28 43 6f 6c 75 6d 6e 20 63 20 69  each (Column c i
25a0: 6e 20 43 6f 6c 75 6d 6e 73 29 0a 20 20 20 20 20  n Columns).     
25b0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 53   {.        if (S
25c0: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
25d0: 70 74 79 28 63 2e 43 6f 6c 75 6d 6e 4e 61 6d 65  pty(c.ColumnName
25e0: 29 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20 20  ) == false).    
25f0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
2600: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 73  builder.Append(s
2610: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
2620: 20 20 20 20 20 63 2e 57 72 69 74 65 53 71 6c 28       c.WriteSql(
2630: 62 75 69 6c 64 65 72 29 3b 0a 20 20 20 20 20 20  builder);.      
2640: 20 20 20 20 73 65 70 61 72 61 74 6f 72 20 3d 20      separator = 
2650: 22 2c 5c 72 5c 6e 20 20 20 20 22 3b 0a 20 20 20  ",\r\n    ";.   
2660: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
2670: 20 20 20 20 20 20 69 66 20 28 5f 6b 65 79 2e 43        if (_key.C
2680: 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 20 3e 20 31  olumns.Count > 1
2690: 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  ).      {.      
26a0: 20 20 73 74 72 69 6e 67 20 69 6e 6e 65 72 73 65    string innerse
26b0: 70 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 20 20  p = "";.        
26c0: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f  builder.AppendFo
26d0: 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f  rmat(CultureInfo
26e0: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
26f0: 65 2c 20 22 7b 30 7d 43 4f 4e 53 54 52 41 49 4e  e, "{0}CONSTRAIN
2700: 54 20 5b 50 4b 5f 7b 31 7d 5d 20 50 52 49 4d 41  T [PK_{1}] PRIMA
2710: 52 59 20 4b 45 59 20 28 22 2c 20 73 65 70 61 72  RY KEY (", separ
2720: 61 74 6f 72 2c 20 4e 61 6d 65 29 3b 0a 20 20 20  ator, Name);.   
2730: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 49 6e       foreach (In
2740: 64 65 78 43 6f 6c 75 6d 6e 20 63 20 69 6e 20 5f  dexColumn c in _
2750: 6b 65 79 2e 43 6f 6c 75 6d 6e 73 29 0a 20 20 20  key.Columns).   
2760: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
2770: 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46   builder.AppendF
2780: 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
2790: 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
27a0: 72 65 2c 20 22 7b 30 7d 5b 7b 31 7d 5d 22 2c 20  re, "{0}[{1}]", 
27b0: 69 6e 6e 65 72 73 65 70 2c 20 63 2e 43 6f 6c 75  innersep, c.Colu
27c0: 6d 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  mn);.          i
27d0: 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
27e0: 4f 72 45 6d 70 74 79 28 63 2e 43 6f 6c 6c 61 74  OrEmpty(c.Collat
27f0: 65 29 20 3d 3d 20 66 61 6c 73 65 20 26 26 20 53  e) == false && S
2800: 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 63 2e  tring.Compare(c.
2810: 43 6f 6c 6c 61 74 65 2c 20 22 42 49 4e 41 52 59  Collate, "BINARY
2820: 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  ", StringCompari
2830: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
2840: 65 43 61 73 65 29 20 21 3d 20 30 29 0a 20 20 20  eCase) != 0).   
2850: 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72           builder
2860: 2e 41 70 70 65 6e 64 46 6f 72 6d 61 74 28 43 75  .AppendFormat(Cu
2870: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
2880: 61 6e 74 43 75 6c 74 75 72 65 2c 20 22 20 43 4f  antCulture, " CO
2890: 4c 4c 41 54 45 20 7b 30 7d 22 2c 20 63 2e 43 6f  LLATE {0}", c.Co
28a0: 6c 6c 61 74 65 2e 54 6f 55 70 70 65 72 49 6e 76  llate.ToUpperInv
28b0: 61 72 69 61 6e 74 28 29 29 3b 0a 0a 20 20 20 20  ariant());..    
28c0: 20 20 20 20 20 20 69 66 20 28 63 2e 53 6f 72 74        if (c.Sort
28d0: 4d 6f 64 65 20 21 3d 20 43 6f 6c 75 6d 6e 53 6f  Mode != ColumnSo
28e0: 72 74 4d 6f 64 65 2e 41 73 63 65 6e 64 69 6e 67  rtMode.Ascending
28f0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75  ).            bu
2900: 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 20 44  ilder.Append(" D
2910: 45 53 43 22 29 3b 0a 0a 20 20 20 20 20 20 20 20  ESC");..        
2920: 20 20 69 6e 6e 65 72 73 65 70 20 3d 20 22 2c 20    innersep = ", 
2930: 22 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  ";.        }.   
2940: 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70       builder.App
2950: 65 6e 64 28 22 29 22 29 3b 0a 0a 20 20 20 20 20  end(")");..     
2960: 20 20 20 69 66 20 28 5f 6b 65 79 2e 43 6f 6e 66     if (_key.Conf
2970: 6c 69 63 74 20 21 3d 20 43 6f 6e 66 6c 69 63 74  lict != Conflict
2980: 45 6e 75 6d 2e 41 62 6f 72 74 29 0a 20 20 20 20  Enum.Abort).    
2990: 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70        builder.Ap
29a0: 70 65 6e 64 46 6f 72 6d 61 74 28 43 75 6c 74 75  pendFormat(Cultu
29b0: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
29c0: 43 75 6c 74 75 72 65 2c 20 22 20 4f 4e 20 43 4f  Culture, " ON CO
29d0: 4e 46 4c 49 43 54 20 7b 30 7d 22 2c 20 5f 6b 65  NFLICT {0}", _ke
29e0: 79 2e 43 6f 6e 66 6c 69 63 74 2e 54 6f 53 74 72  y.Conflict.ToStr
29f0: 69 6e 67 28 29 2e 54 6f 55 70 70 65 72 49 6e 76  ing().ToUpperInv
2a00: 61 72 69 61 6e 74 28 29 29 3b 0a 20 20 20 20 20  ariant());.     
2a10: 20 7d 0a 0a 20 20 20 20 20 20 66 6f 72 20 28 69   }..      for (i
2a20: 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 43 68  nt n = 0; n < Ch
2a30: 65 63 6b 2e 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0a  eck.Count; n++).
2a40: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
2a50: 73 74 72 69 6e 67 20 63 68 65 63 6b 20 3d 20 43  string check = C
2a60: 68 65 63 6b 5b 6e 5d 3b 0a 0a 20 20 20 20 20 20  heck[n];..      
2a70: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
2a80: 75 6c 6c 4f 72 45 6d 70 74 79 28 63 68 65 63 6b  ullOrEmpty(check
2a90: 29 20 3d 3d 20 74 72 75 65 29 20 63 6f 6e 74 69  ) == true) conti
2aa0: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 53 69 6d  nue;.        Sim
2ab0: 70 6c 65 54 6f 6b 65 6e 69 7a 65 72 2e 53 74 72  pleTokenizer.Str
2ac0: 69 6e 67 50 61 72 74 73 5b 5d 20 61 72 72 20 3d  ingParts[] arr =
2ad0: 20 53 69 6d 70 6c 65 54 6f 6b 65 6e 69 7a 65 72   SimpleTokenizer
2ae0: 2e 42 72 65 61 6b 53 74 72 69 6e 67 28 63 68 65  .BreakString(che
2af0: 63 6b 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  ck);.        for
2b00: 20 28 69 6e 74 20 78 20 3d 20 30 3b 20 78 20 3c   (int x = 0; x <
2b10: 20 61 72 72 2e 4c 65 6e 67 74 68 3b 20 78 2b 2b   arr.Length; x++
2b20: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
2b30: 20 20 20 20 20 20 69 66 20 28 61 72 72 5b 78 5d        if (arr[x]
2b40: 2e 64 65 70 74 68 20 3d 3d 20 30 29 0a 20 20 20  .depth == 0).   
2b50: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
2b60: 20 20 20 20 20 63 68 65 63 6b 20 3d 20 53 74 72       check = Str
2b70: 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75  ing.Format(Cultu
2b80: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
2b90: 43 75 6c 74 75 72 65 2c 20 22 28 7b 30 7d 29 22  Culture, "({0})"
2ba0: 2c 20 63 68 65 63 6b 29 3b 0a 20 20 20 20 20 20  , check);.      
2bb0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2bc0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2bd0: 20 7d 0a 20 20 20 20 20 20 20 20 62 75 69 6c 64   }.        build
2be0: 65 72 2e 41 70 70 65 6e 64 28 73 65 70 61 72 61  er.Append(separa
2bf0: 74 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 62 75  tor);.        bu
2c00: 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d  ilder.AppendForm
2c10: 61 74 28 22 43 4f 4e 53 54 52 41 49 4e 54 20 5b  at("CONSTRAINT [
2c20: 43 4b 5f 7b 30 7d 5f 7b 31 7d 5d 20 43 48 45 43  CK_{0}_{1}] CHEC
2c30: 4b 20 7b 32 7d 22 2c 20 4e 61 6d 65 2c 20 6e 20  K {2}", Name, n 
2c40: 2b 20 31 2c 20 63 68 65 63 6b 29 3b 0a 20 20 20  + 1, check);.   
2c50: 20 20 20 7d 0a 0a 20 20 20 20 20 20 4c 69 73 74     }..      List
2c60: 3c 46 6f 72 65 69 67 6e 4b 65 79 3e 20 6b 65 79  <ForeignKey> key
2c70: 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 46 6f 72  s = new List<For
2c80: 65 69 67 6e 4b 65 79 3e 28 29 3b 0a 0a 20 20 20  eignKey>();..   
2c90: 20 20 20 66 6f 72 20 28 69 6e 74 20 78 20 3d 20     for (int x = 
2ca0: 30 3b 20 78 20 3c 20 46 6f 72 65 69 67 6e 4b 65  0; x < ForeignKe
2cb0: 79 73 2e 43 6f 75 6e 74 3b 20 78 2b 2b 29 0a 20  ys.Count; x++). 
2cc0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 46       {.        F
2cd0: 6f 72 65 69 67 6e 4b 65 79 20 6b 65 79 20 3d 20  oreignKey key = 
2ce0: 46 6f 72 65 69 67 6e 4b 65 79 73 5b 78 5d 3b 0a  ForeignKeys[x];.
2cf0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72  .        if (Str
2d00: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
2d10: 79 28 6b 65 79 2e 46 72 6f 6d 2e 43 6f 6c 75 6d  y(key.From.Colum
2d20: 6e 29 20 3d 3d 20 74 72 75 65 20 7c 7c 20 53 74  n) == true || St
2d30: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
2d40: 74 79 28 6b 65 79 2e 46 72 6f 6d 2e 43 61 74 61  ty(key.From.Cata
2d50: 6c 6f 67 29 20 3d 3d 20 74 72 75 65 20 7c 7c 0a  log) == true ||.
2d60: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
2d70: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6b  .IsNullOrEmpty(k
2d80: 65 79 2e 54 6f 2e 54 61 62 6c 65 29 20 3d 3d 20  ey.To.Table) == 
2d90: 74 72 75 65 20 7c 7c 20 53 74 72 69 6e 67 2e 49  true || String.I
2da0: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6b 65 79  sNullOrEmpty(key
2db0: 2e 54 6f 2e 43 6f 6c 75 6d 6e 29 20 3d 3d 20 74  .To.Column) == t
2dc0: 72 75 65 29 0a 20 20 20 20 20 20 20 20 20 20 63  rue).          c
2dd0: 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20 20  ontinue;..      
2de0: 20 20 69 66 20 28 6b 65 79 73 2e 43 6f 75 6e 74    if (keys.Count
2df0: 20 3e 20 30 29 0a 20 20 20 20 20 20 20 20 7b 0a   > 0).        {.
2e00: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
2e10: 79 73 5b 30 5d 2e 4e 61 6d 65 20 3d 3d 20 6b 65  ys[0].Name == ke
2e20: 79 2e 4e 61 6d 65 20 26 26 20 6b 65 79 73 5b 30  y.Name && keys[0
2e30: 5d 2e 54 6f 2e 43 61 74 61 6c 6f 67 20 3d 3d 20  ].To.Catalog == 
2e40: 6b 65 79 2e 54 6f 2e 43 61 74 61 6c 6f 67 20 26  key.To.Catalog &
2e50: 26 20 6b 65 79 73 5b 30 5d 2e 54 6f 2e 54 61 62  & keys[0].To.Tab
2e60: 6c 65 20 3d 3d 20 6b 65 79 2e 54 6f 2e 54 61 62  le == key.To.Tab
2e70: 6c 65 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a  le).          {.
2e80: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 73              keys
2e90: 2e 41 64 64 28 6b 65 79 29 3b 0a 20 20 20 20 20  .Add(key);.     
2ea0: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
2eb0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
2ec0: 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41         builder.A
2ed0: 70 70 65 6e 64 28 73 65 70 61 72 61 74 6f 72 29  ppend(separator)
2ee0: 3b 0a 20 20 20 20 20 20 20 20 20 20 57 72 69 74  ;.          Writ
2ef0: 65 46 4b 65 79 73 28 6b 65 79 73 2c 20 62 75 69  eFKeys(keys, bui
2f00: 6c 64 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20  lder);.         
2f10: 20 6b 65 79 73 2e 43 6c 65 61 72 28 29 3b 0a 20   keys.Clear();. 
2f20: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2f30: 20 6b 65 79 73 2e 41 64 64 28 6b 65 79 29 3b 0a   keys.Add(key);.
2f40: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69        }..      i
2f50: 66 20 28 6b 65 79 73 2e 43 6f 75 6e 74 20 3e 20  f (keys.Count > 
2f60: 30 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  0).      {.     
2f70: 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
2f80: 64 28 73 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  d(separator);.  
2f90: 20 20 20 20 20 20 57 72 69 74 65 46 4b 65 79 73        WriteFKeys
2fa0: 28 6b 65 79 73 2c 20 62 75 69 6c 64 65 72 29 3b  (keys, builder);
2fb0: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
2fc0: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22  builder.Append("
2fd0: 5c 72 5c 6e 29 3b 5c 72 5c 6e 22 29 3b 0a 0a 20  \r\n);\r\n");.. 
2fe0: 20 20 20 20 20 2f 2f 20 52 65 62 75 69 6c 64 69       // Rebuildi
2ff0: 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74  ng an existing t
3000: 61 62 6c 65 0a 20 20 20 20 20 20 69 66 20 28 61  able.      if (a
3010: 6c 74 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0a  ltName != null).
3020: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
3030: 73 65 70 61 72 61 74 6f 72 20 3d 20 22 22 3b 0a  separator = "";.
3040: 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e          builder.
3050: 41 70 70 65 6e 64 28 22 5c 72 5c 6e 2d 2d 20 43  Append("\r\n-- C
3060: 6f 70 79 20 74 68 65 20 63 6f 6e 74 65 6e 74 73  opy the contents
3070: 20 6f 66 20 74 68 65 20 6f 6c 64 20 74 61 62 6c   of the old tabl
3080: 65 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 20 74  e into the new t
3090: 61 62 6c 65 5c 72 5c 6e 22 29 3b 0a 20 20 20 20  able\r\n");.    
30a0: 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65      builder.Appe
30b0: 6e 64 46 6f 72 6d 61 74 28 22 49 4e 53 45 52 54  ndFormat("INSERT
30c0: 20 49 4e 54 4f 20 5b 7b 30 7d 5d 2e 5b 7b 31 7d   INTO [{0}].[{1}
30d0: 5d 20 28 22 2c 20 5f 63 61 74 61 6c 6f 67 2c 20  ] (", _catalog, 
30e0: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 66  Name);.        f
30f0: 6f 72 65 61 63 68 20 28 43 6f 6c 75 6d 6e 20 63  oreach (Column c
3100: 20 69 6e 20 43 6f 6c 75 6d 6e 73 29 0a 20 20 20   in Columns).   
3110: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
3120: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
3130: 6c 6c 4f 72 45 6d 70 74 79 28 63 2e 4f 72 69 67  llOrEmpty(c.Orig
3140: 69 6e 61 6c 4e 61 6d 65 29 20 3d 3d 20 66 61 6c  inalName) == fal
3150: 73 65 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a  se).          {.
3160: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c              buil
3170: 64 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d 61 74  der.AppendFormat
3180: 28 22 7b 31 7d 5b 7b 30 7d 5d 22 2c 20 63 2e 43  ("{1}[{0}]", c.C
3190: 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 73 65 70 61 72  olumnName, separ
31a0: 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 20  ator);.         
31b0: 20 20 20 73 65 70 61 72 61 74 6f 72 20 3d 20 22     separator = "
31c0: 2c 20 22 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  , ";.          }
31d0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
31e0: 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
31f0: 64 28 22 29 5c 72 5c 6e 20 20 53 45 4c 45 43 54  d(")\r\n  SELECT
3200: 20 22 29 3b 0a 20 20 20 20 20 20 20 20 73 65 70   ");.        sep
3210: 61 72 61 74 6f 72 20 3d 20 22 22 3b 0a 20 20 20  arator = "";.   
3220: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 43 6f       foreach (Co
3230: 6c 75 6d 6e 20 63 20 69 6e 20 43 6f 6c 75 6d 6e  lumn c in Column
3240: 73 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  s).        {.   
3250: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
3260: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
3270: 63 2e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 29 20  c.OriginalName) 
3280: 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20 20 20 20  == false).      
3290: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
32a0: 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
32b0: 46 6f 72 6d 61 74 28 22 7b 31 7d 5b 7b 30 7d 5d  Format("{1}[{0}]
32c0: 22 2c 20 63 2e 4f 72 69 67 69 6e 61 6c 4e 61 6d  ", c.OriginalNam
32d0: 65 2c 20 73 65 70 61 72 61 74 6f 72 29 3b 0a 20  e, separator);. 
32e0: 20 20 20 20 20 20 20 20 20 20 20 73 65 70 61 72             separ
32f0: 61 74 6f 72 20 3d 20 22 2c 20 22 3b 0a 20 20 20  ator = ", ";.   
3300: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3310: 20 7d 0a 20 20 20 20 20 20 20 20 62 75 69 6c 64   }.        build
3320: 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d 61 74 28  er.AppendFormat(
3330: 22 5c 72 5c 6e 20 20 46 52 4f 4d 20 5b 7b 30 7d  "\r\n  FROM [{0}
3340: 5d 2e 5b 7b 31 7d 5d 3b 5c 72 5c 6e 5c 72 5c 6e  ].[{1}];\r\n\r\n
3350: 22 2c 20 5f 63 61 74 61 6c 6f 67 2c 20 61 6c 74  ", _catalog, alt
3360: 4e 61 6d 65 29 3b 0a 0a 20 20 20 20 20 20 20 20  Name);..        
3370: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22  builder.Append("
3380: 2d 2d 20 44 72 6f 70 20 74 68 65 20 6f 6c 64 20  -- Drop the old 
3390: 74 61 62 6c 65 5c 72 5c 6e 22 29 3b 0a 20 20 20  table\r\n");.   
33a0: 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70       builder.App
33b0: 65 6e 64 46 6f 72 6d 61 74 28 22 44 52 4f 50 20  endFormat("DROP 
33c0: 54 41 42 4c 45 20 5b 7b 30 7d 5d 2e 5b 7b 31 7d  TABLE [{0}].[{1}
33d0: 5d 3b 5c 72 5c 6e 22 2c 20 5f 63 61 74 61 6c 6f  ];\r\n", _catalo
33e0: 67 2c 20 61 6c 74 4e 61 6d 65 29 3b 0a 20 20 20  g, altName);.   
33f0: 20 20 20 7d 0a 0a 20 20 20 20 20 20 73 65 70 61     }..      sepa
3400: 72 61 74 6f 72 20 3d 20 22 5c 72 5c 6e 22 3b 0a  rator = "\r\n";.
3410: 20 20 20 20 20 20 69 66 20 28 5f 69 6e 64 65 78        if (_index
3420: 65 73 2e 43 6f 75 6e 74 20 3e 20 30 29 0a 20 20  es.Count > 0).  
3430: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 62 75      {.        bu
3440: 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 5c 72  ilder.Append("\r
3450: 5c 6e 2d 2d 20 43 72 65 61 74 65 20 74 68 65 20  \n-- Create the 
3460: 6e 65 77 20 69 6e 64 65 78 65 73 22 29 3b 0a 20  new indexes");. 
3470: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
3480: 49 6e 64 65 78 20 69 64 78 20 69 6e 20 5f 69 6e  Index idx in _in
3490: 64 65 78 65 73 29 0a 20 20 20 20 20 20 20 20 7b  dexes).        {
34a0: 0a 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64  .          build
34b0: 65 72 2e 41 70 70 65 6e 64 28 73 65 70 61 72 61  er.Append(separa
34c0: 74 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20  tor);.          
34d0: 69 64 78 2e 57 72 69 74 65 53 71 6c 28 62 75 69  idx.WriteSql(bui
34e0: 6c 64 65 72 29 3b 0a 20 20 20 20 20 20 20 20 7d  lder);.        }
34f0: 0a 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72  .        builder
3500: 2e 41 70 70 65 6e 64 4c 69 6e 65 28 29 3b 0a 20  .AppendLine();. 
3510: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66       }..      if
3520: 20 28 5f 74 72 69 67 67 65 72 73 2e 43 6f 75 6e   (_triggers.Coun
3530: 74 20 3e 20 30 29 0a 20 20 20 20 20 20 7b 0a 20  t > 0).      {. 
3540: 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41         builder.A
3550: 70 70 65 6e 64 28 22 5c 72 5c 6e 2d 2d 20 43 72  ppend("\r\n-- Cr
3560: 65 61 74 65 20 74 68 65 20 6e 65 77 20 74 72 69  eate the new tri
3570: 67 67 65 72 73 22 29 3b 0a 20 20 20 20 20 20 20  ggers");.       
3580: 20 66 6f 72 65 61 63 68 20 28 54 72 69 67 67 65   foreach (Trigge
3590: 72 20 74 72 69 67 20 69 6e 20 5f 74 72 69 67 67  r trig in _trigg
35a0: 65 72 73 29 0a 20 20 20 20 20 20 20 20 7b 0a 20  ers).        {. 
35b0: 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72           builder
35c0: 2e 41 70 70 65 6e 64 28 73 65 70 61 72 61 74 6f  .Append(separato
35d0: 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 74 72  r);.          tr
35e0: 69 67 2e 57 72 69 74 65 53 71 6c 28 62 75 69 6c  ig.WriteSql(buil
35f0: 64 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20  der);.          
3600: 73 65 70 61 72 61 74 6f 72 20 3d 20 22 5c 72 5c  separator = "\r\
3610: 6e 22 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  n";.        }.  
3620: 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70        builder.Ap
3630: 70 65 6e 64 4c 69 6e 65 28 29 3b 0a 20 20 20 20  pendLine();.    
3640: 20 20 7d 0a 0a 20 20 20 20 20 20 72 65 74 75 72    }..      retur
3650: 6e 20 62 75 69 6c 64 65 72 2e 54 6f 53 74 72 69  n builder.ToStri
3660: 6e 67 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  ng();.    }..   
3670: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 57 72   private void Wr
3680: 69 74 65 46 4b 65 79 73 28 4c 69 73 74 3c 46 6f  iteFKeys(List<Fo
3690: 72 65 69 67 6e 4b 65 79 3e 20 6b 65 79 73 2c 20  reignKey> keys, 
36a0: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 62 75  StringBuilder bu
36b0: 69 6c 64 65 72 29 0a 20 20 20 20 7b 0a 20 20 20  ilder).    {.   
36c0: 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
36d0: 64 46 6f 72 6d 61 74 28 22 43 4f 4e 53 54 52 41  dFormat("CONSTRA
36e0: 49 4e 54 20 5b 7b 30 7d 5d 20 46 4f 52 45 49 47  INT [{0}] FOREIG
36f0: 4e 20 4b 45 59 20 28 22 2c 20 6b 65 79 73 5b 30  N KEY (", keys[0
3700: 5d 2e 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 73  ].Name);.      s
3710: 74 72 69 6e 67 20 73 65 70 61 72 61 74 6f 72 20  tring separator 
3720: 3d 20 22 22 3b 0a 0a 20 20 20 20 20 20 66 6f 72  = "";..      for
3730: 65 61 63 68 20 28 46 6f 72 65 69 67 6e 4b 65 79  each (ForeignKey
3740: 20 6b 65 79 20 69 6e 20 6b 65 79 73 29 0a 20 20   key in keys).  
3750: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 62 75      {.        bu
3760: 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d  ilder.AppendForm
3770: 61 74 28 22 7b 30 7d 5b 7b 31 7d 5d 22 2c 20 73  at("{0}[{1}]", s
3780: 65 70 61 72 61 74 6f 72 2c 20 6b 65 79 2e 46 72  eparator, key.Fr
3790: 6f 6d 2e 43 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20  om.Column);.    
37a0: 20 20 20 20 73 65 70 61 72 61 74 6f 72 20 3d 20      separator = 
37b0: 22 2c 20 22 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  ", ";.      }.. 
37c0: 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70       builder.App
37d0: 65 6e 64 46 6f 72 6d 61 74 28 22 29 20 52 45 46  endFormat(") REF
37e0: 45 52 45 4e 43 45 53 20 5b 7b 30 7d 5d 20 28 22  ERENCES [{0}] ("
37f0: 2c 20 6b 65 79 73 5b 30 5d 2e 54 6f 2e 54 61 62  , keys[0].To.Tab
3800: 6c 65 29 3b 0a 0a 20 20 20 20 20 20 73 65 70 61  le);..      sepa
3810: 72 61 74 6f 72 20 3d 20 22 22 3b 0a 20 20 20 20  rator = "";.    
3820: 20 20 66 6f 72 65 61 63 68 20 28 46 6f 72 65 69    foreach (Forei
3830: 67 6e 4b 65 79 20 6b 65 79 20 69 6e 20 6b 65 79  gnKey key in key
3840: 73 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  s).      {.     
3850: 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
3860: 64 46 6f 72 6d 61 74 28 22 7b 30 7d 5b 7b 31 7d  dFormat("{0}[{1}
3870: 5d 22 2c 20 73 65 70 61 72 61 74 6f 72 2c 20 6b  ]", separator, k
3880: 65 79 2e 54 6f 2e 43 6f 6c 75 6d 6e 29 3b 0a 20  ey.To.Column);. 
3890: 20 20 20 20 20 20 20 73 65 70 61 72 61 74 6f 72         separator
38a0: 20 3d 20 22 2c 20 22 3b 0a 20 20 20 20 20 20 7d   = ", ";.      }
38b0: 0a 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41  .      builder.A
38c0: 70 70 65 6e 64 28 22 29 22 29 3b 0d 0a 0d 0a 20  ppend(")");.... 
38d0: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
38e0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6b  .IsNullOrEmpty(k
38f0: 65 79 73 5b 30 5d 2e 4d 61 74 63 68 29 29 0d 0a  eys[0].Match))..
3900: 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65            builde
3910: 72 2e 41 70 70 65 6e 64 46 6f 72 6d 61 74 28 22  r.AppendFormat("
3920: 20 4d 41 54 43 48 20 7b 30 7d 22 2c 20 6b 65 79   MATCH {0}", key
3930: 73 5b 30 5d 2e 4d 61 74 63 68 29 3b 0d 0a 0d 0a  s[0].Match);....
3940: 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
3950: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
3960: 6b 65 79 73 5b 30 5d 2e 4f 6e 55 70 64 61 74 65  keys[0].OnUpdate
3970: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 62 75  ))..          bu
3980: 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d  ilder.AppendForm
3990: 61 74 28 22 20 4f 4e 20 55 50 44 41 54 45 20 7b  at(" ON UPDATE {
39a0: 30 7d 22 2c 20 6b 65 79 73 5b 30 5d 2e 4f 6e 55  0}", keys[0].OnU
39b0: 70 64 61 74 65 29 3b 0a 0a 20 20 20 20 20 20 69  pdate);..      i
39c0: 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
39d0: 6c 4f 72 45 6d 70 74 79 28 6b 65 79 73 5b 30 5d  lOrEmpty(keys[0]
39e0: 2e 4f 6e 44 65 6c 65 74 65 29 29 0d 0a 20 20 20  .OnDelete))..   
39f0: 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41         builder.A
3a00: 70 70 65 6e 64 46 6f 72 6d 61 74 28 22 20 4f 4e  ppendFormat(" ON
3a10: 20 44 45 4c 45 54 45 20 7b 30 7d 22 2c 20 6b 65   DELETE {0}", ke
3a20: 79 73 5b 30 5d 2e 4f 6e 44 65 6c 65 74 65 29 3b  ys[0].OnDelete);
3a30: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f  .    }..    [Bro
3a40: 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20  wsable(false)]. 
3a50: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
3a60: 64 65 20 56 69 65 77 54 61 62 6c 65 42 61 73 65  de ViewTableBase
3a70: 20 44 65 73 69 67 6e 54 61 62 6c 65 0a 20 20 20   DesignTable.   
3a80: 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72   {.      get { r
3a90: 65 74 75 72 6e 20 74 68 69 73 3b 20 7d 0a 20 20  eturn this; }.  
3aa0: 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20    }..    public 
3ab0: 6f 76 65 72 72 69 64 65 20 44 62 43 6f 6e 6e 65  override DbConne
3ac0: 63 74 69 6f 6e 20 47 65 74 43 6f 6e 6e 65 63 74  ction GetConnect
3ad0: 69 6f 6e 28 29 0a 20 20 20 20 7b 0a 20 20 20 20  ion().    {.    
3ae0: 20 20 72 65 74 75 72 6e 20 5f 63 6f 6e 6e 65 63    return _connec
3af0: 74 69 6f 6e 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  tion;.    }..   
3b00: 20 23 72 65 67 69 6f 6e 20 49 43 75 73 74 6f 6d   #region ICustom
3b10: 54 79 70 65 44 65 73 63 72 69 70 74 6f 72 20 4d  TypeDescriptor M
3b20: 65 6d 62 65 72 73 0a 0a 20 20 20 20 41 74 74 72  embers..    Attr
3b30: 69 62 75 74 65 43 6f 6c 6c 65 63 74 69 6f 6e 20  ibuteCollection 
3b40: 49 43 75 73 74 6f 6d 54 79 70 65 44 65 73 63 72  ICustomTypeDescr
3b50: 69 70 74 6f 72 2e 47 65 74 41 74 74 72 69 62 75  iptor.GetAttribu
3b60: 74 65 73 28 29 0a 20 20 20 20 7b 0a 20 20 20 20  tes().    {.    
3b70: 20 20 72 65 74 75 72 6e 20 54 79 70 65 44 65 73    return TypeDes
3b80: 63 72 69 70 74 6f 72 2e 47 65 74 41 74 74 72 69  criptor.GetAttri
3b90: 62 75 74 65 73 28 47 65 74 54 79 70 65 28 29 29  butes(GetType())
3ba0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 74 72  ;.    }..    str
3bb0: 69 6e 67 20 49 43 75 73 74 6f 6d 54 79 70 65 44  ing ICustomTypeD
3bc0: 65 73 63 72 69 70 74 6f 72 2e 47 65 74 43 6c 61  escriptor.GetCla
3bd0: 73 73 4e 61 6d 65 28 29 0a 20 20 20 20 7b 0a 20  ssName().    {. 
3be0: 20 20 20 20 20 72 65 74 75 72 6e 20 22 54 61 62       return "Tab
3bf0: 6c 65 20 44 65 73 69 67 6e 22 3b 0a 20 20 20 20  le Design";.    
3c00: 7d 0a 0a 20 20 20 20 73 74 72 69 6e 67 20 49 43  }..    string IC
3c10: 75 73 74 6f 6d 54 79 70 65 44 65 73 63 72 69 70  ustomTypeDescrip
3c20: 74 6f 72 2e 47 65 74 43 6f 6d 70 6f 6e 65 6e 74  tor.GetComponent
3c30: 4e 61 6d 65 28 29 0a 20 20 20 20 7b 0a 20 20 20  Name().    {.   
3c40: 20 20 20 72 65 74 75 72 6e 20 54 6f 53 74 72 69     return ToStri
3c50: 6e 67 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  ng();.    }..   
3c60: 20 54 79 70 65 43 6f 6e 76 65 72 74 65 72 20 49   TypeConverter I
3c70: 43 75 73 74 6f 6d 54 79 70 65 44 65 73 63 72 69  CustomTypeDescri
3c80: 70 74 6f 72 2e 47 65 74 43 6f 6e 76 65 72 74 65  ptor.GetConverte
3c90: 72 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  r().    {.      
3ca0: 72 65 74 75 72 6e 20 54 79 70 65 44 65 73 63 72  return TypeDescr
3cb0: 69 70 74 6f 72 2e 47 65 74 43 6f 6e 76 65 72 74  iptor.GetConvert
3cc0: 65 72 28 47 65 74 54 79 70 65 28 29 29 3b 0a 20  er(GetType());. 
3cd0: 20 20 20 7d 0a 0a 20 20 20 20 45 76 65 6e 74 44     }..    EventD
3ce0: 65 73 63 72 69 70 74 6f 72 20 49 43 75 73 74 6f  escriptor ICusto
3cf0: 6d 54 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e  mTypeDescriptor.
3d00: 47 65 74 44 65 66 61 75 6c 74 45 76 65 6e 74 28  GetDefaultEvent(
3d10: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
3d20: 74 75 72 6e 20 54 79 70 65 44 65 73 63 72 69 70  turn TypeDescrip
3d30: 74 6f 72 2e 47 65 74 44 65 66 61 75 6c 74 45 76  tor.GetDefaultEv
3d40: 65 6e 74 28 47 65 74 54 79 70 65 28 29 29 3b 0a  ent(GetType());.
3d50: 20 20 20 20 7d 0a 0a 20 20 20 20 50 72 6f 70 65      }..    Prope
3d60: 72 74 79 44 65 73 63 72 69 70 74 6f 72 20 49 43  rtyDescriptor IC
3d70: 75 73 74 6f 6d 54 79 70 65 44 65 73 63 72 69 70  ustomTypeDescrip
3d80: 74 6f 72 2e 47 65 74 44 65 66 61 75 6c 74 50 72  tor.GetDefaultPr
3d90: 6f 70 65 72 74 79 28 29 0a 20 20 20 20 7b 0a 20  operty().    {. 
3da0: 20 20 20 20 20 72 65 74 75 72 6e 20 54 79 70 65       return Type
3db0: 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74 44 65  Descriptor.GetDe
3dc0: 66 61 75 6c 74 50 72 6f 70 65 72 74 79 28 47 65  faultProperty(Ge
3dd0: 74 54 79 70 65 28 29 29 3b 0a 20 20 20 20 7d 0a  tType());.    }.
3de0: 0a 20 20 20 20 6f 62 6a 65 63 74 20 49 43 75 73  .    object ICus
3df0: 74 6f 6d 54 79 70 65 44 65 73 63 72 69 70 74 6f  tomTypeDescripto
3e00: 72 2e 47 65 74 45 64 69 74 6f 72 28 54 79 70 65  r.GetEditor(Type
3e10: 20 65 64 69 74 6f 72 42 61 73 65 54 79 70 65 29   editorBaseType)
3e20: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74  .    {.      ret
3e30: 75 72 6e 20 54 79 70 65 44 65 73 63 72 69 70 74  urn TypeDescript
3e40: 6f 72 2e 47 65 74 45 64 69 74 6f 72 28 47 65 74  or.GetEditor(Get
3e50: 54 79 70 65 28 29 2c 20 65 64 69 74 6f 72 42 61  Type(), editorBa
3e60: 73 65 54 79 70 65 29 3b 0a 20 20 20 20 7d 0a 0a  seType);.    }..
3e70: 20 20 20 20 45 76 65 6e 74 44 65 73 63 72 69 70      EventDescrip
3e80: 74 6f 72 43 6f 6c 6c 65 63 74 69 6f 6e 20 49 43  torCollection IC
3e90: 75 73 74 6f 6d 54 79 70 65 44 65 73 63 72 69 70  ustomTypeDescrip
3ea0: 74 6f 72 2e 47 65 74 45 76 65 6e 74 73 28 41 74  tor.GetEvents(At
3eb0: 74 72 69 62 75 74 65 5b 5d 20 61 74 74 72 69 62  tribute[] attrib
3ec0: 75 74 65 73 29 0a 20 20 20 20 7b 0a 20 20 20 20  utes).    {.    
3ed0: 20 20 72 65 74 75 72 6e 20 54 79 70 65 44 65 73    return TypeDes
3ee0: 63 72 69 70 74 6f 72 2e 47 65 74 45 76 65 6e 74  criptor.GetEvent
3ef0: 73 28 47 65 74 54 79 70 65 28 29 2c 20 61 74 74  s(GetType(), att
3f00: 72 69 62 75 74 65 73 29 3b 0a 20 20 20 20 7d 0a  ributes);.    }.
3f10: 0a 20 20 20 20 45 76 65 6e 74 44 65 73 63 72 69  .    EventDescri
3f20: 70 74 6f 72 43 6f 6c 6c 65 63 74 69 6f 6e 20 49  ptorCollection I
3f30: 43 75 73 74 6f 6d 54 79 70 65 44 65 73 63 72 69  CustomTypeDescri
3f40: 70 74 6f 72 2e 47 65 74 45 76 65 6e 74 73 28 29  ptor.GetEvents()
3f50: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74  .    {.      ret
3f60: 75 72 6e 20 54 79 70 65 44 65 73 63 72 69 70 74  urn TypeDescript
3f70: 6f 72 2e 47 65 74 45 76 65 6e 74 73 28 47 65 74  or.GetEvents(Get
3f80: 54 79 70 65 28 29 29 3b 0a 20 20 20 20 7d 0a 0a  Type());.    }..
3f90: 20 20 20 20 50 72 6f 70 65 72 74 79 44 65 73 63      PropertyDesc
3fa0: 72 69 70 74 6f 72 43 6f 6c 6c 65 63 74 69 6f 6e  riptorCollection
3fb0: 20 49 43 75 73 74 6f 6d 54 79 70 65 44 65 73 63   ICustomTypeDesc
3fc0: 72 69 70 74 6f 72 2e 47 65 74 50 72 6f 70 65 72  riptor.GetProper
3fd0: 74 69 65 73 28 41 74 74 72 69 62 75 74 65 5b 5d  ties(Attribute[]
3fe0: 20 61 74 74 72 69 62 75 74 65 73 29 0a 20 20 20   attributes).   
3ff0: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
4000: 54 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47  TypeDescriptor.G
4010: 65 74 50 72 6f 70 65 72 74 69 65 73 28 47 65 74  etProperties(Get
4020: 54 79 70 65 28 29 2c 20 61 74 74 72 69 62 75 74  Type(), attribut
4030: 65 73 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  es);.    }..    
4040: 50 72 6f 70 65 72 74 79 44 65 73 63 72 69 70 74  PropertyDescript
4050: 6f 72 43 6f 6c 6c 65 63 74 69 6f 6e 20 49 43 75  orCollection ICu
4060: 73 74 6f 6d 54 79 70 65 44 65 73 63 72 69 70 74  stomTypeDescript
4070: 6f 72 2e 47 65 74 50 72 6f 70 65 72 74 69 65 73  or.GetProperties
4080: 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72  ().    {.      r
4090: 65 74 75 72 6e 20 54 79 70 65 44 65 73 63 72 69  eturn TypeDescri
40a0: 70 74 6f 72 2e 47 65 74 50 72 6f 70 65 72 74 69  ptor.GetProperti
40b0: 65 73 28 47 65 74 54 79 70 65 28 29 29 3b 0a 20  es(GetType());. 
40c0: 20 20 20 7d 0a 0a 20 20 20 20 6f 62 6a 65 63 74     }..    object
40d0: 20 49 43 75 73 74 6f 6d 54 79 70 65 44 65 73 63   ICustomTypeDesc
40e0: 72 69 70 74 6f 72 2e 47 65 74 50 72 6f 70 65 72  riptor.GetProper
40f0: 74 79 4f 77 6e 65 72 28 50 72 6f 70 65 72 74 79  tyOwner(Property
4100: 44 65 73 63 72 69 70 74 6f 72 20 70 64 29 0a 20  Descriptor pd). 
4110: 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72     {.      retur
4120: 6e 20 74 68 69 73 3b 0a 20 20 20 20 7d 0a 0a 20  n this;.    }.. 
4130: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0a 20 20     #endregion.  
4140: 7d 0a 0a 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e  }..  internal in
4150: 74 65 72 66 61 63 65 20 49 48 61 76 65 43 6f 6e  terface IHaveCon
4160: 6e 65 63 74 69 6f 6e 0a 20 20 7b 0a 20 20 20 20  nection.  {.    
4170: 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 47 65 74  DbConnection Get
4180: 43 6f 6e 6e 65 63 74 69 6f 6e 28 29 3b 0a 20 20  Connection();.  
4190: 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c    [Browsable(fal
41a0: 73 65 29 5d 0a 20 20 20 20 56 69 65 77 54 61 62  se)].    ViewTab
41b0: 6c 65 42 61 73 65 20 44 65 73 69 67 6e 54 61 62  leBase DesignTab
41c0: 6c 65 20 7b 20 67 65 74 3b 20 7d 0a 20 20 7d 0a  le { get; }.  }.
41d0: 0a 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e 74 65  .  internal inte
41e0: 72 66 61 63 65 20 49 48 61 76 65 43 6f 6e 6e 65  rface IHaveConne
41f0: 63 74 69 6f 6e 53 63 6f 70 65 20 3a 20 49 48 61  ctionScope : IHa
4200: 76 65 43 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20 7b  veConnection.  {
4210: 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28  .    [Browsable(
4220: 66 61 6c 73 65 29 5d 0a 20 20 20 20 73 74 72 69  false)].    stri
4230: 6e 67 20 43 61 74 61 6c 6f 67 53 63 6f 70 65 20  ng CatalogScope 
4240: 7b 20 67 65 74 3b 20 7d 0a 20 20 20 20 5b 42 72  { get; }.    [Br
4250: 6f 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a  owsable(false)].
4260: 20 20 20 20 73 74 72 69 6e 67 20 54 61 62 6c 65      string Table
4270: 53 63 6f 70 65 20 7b 20 67 65 74 3b 20 7d 0a 20  Scope { get; }. 
4280: 20 7d 0a 0a 20 20 69 6e 74 65 72 6e 61 6c 20 63   }..  internal c
4290: 6c 61 73 73 20 43 6f 6c 6c 61 74 69 6f 6e 54 79  lass CollationTy
42a0: 70 65 45 64 69 74 6f 72 20 3a 20 4f 62 6a 65 63  peEditor : Objec
42b0: 74 53 65 6c 65 63 74 6f 72 45 64 69 74 6f 72 0a  tSelectorEditor.
42c0: 20 20 7b 0a 20 20 20 20 70 75 62 6c 69 63 20 6f    {.    public o
42d0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 44  verride bool IsD
42e0: 72 6f 70 44 6f 77 6e 52 65 73 69 7a 61 62 6c 65  ropDownResizable
42f0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74  .    {.      get
4300: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
4310: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20   return true;.  
4320: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
4330: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
4340: 20 55 49 54 79 70 65 45 64 69 74 6f 72 45 64 69   UITypeEditorEdi
4350: 74 53 74 79 6c 65 20 47 65 74 45 64 69 74 53 74  tStyle GetEditSt
4360: 79 6c 65 28 49 54 79 70 65 44 65 73 63 72 69 70  yle(ITypeDescrip
4370: 74 6f 72 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65  torContext conte
4380: 78 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  xt).    {.      
4390: 72 65 74 75 72 6e 20 55 49 54 79 70 65 45 64 69  return UITypeEdi
43a0: 74 6f 72 45 64 69 74 53 74 79 6c 65 2e 44 72 6f  torEditStyle.Dro
43b0: 70 44 6f 77 6e 3b 0a 20 20 20 20 7d 0a 0a 20 20  pDown;.    }..  
43c0: 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72    protected over
43d0: 72 69 64 65 20 76 6f 69 64 20 46 69 6c 6c 54 72  ride void FillTr
43e0: 65 65 57 69 74 68 44 61 74 61 28 53 65 6c 65 63  eeWithData(Selec
43f0: 74 6f 72 20 73 65 6c 65 63 74 6f 72 2c 20 49 54  tor selector, IT
4400: 79 70 65 44 65 73 63 72 69 70 74 6f 72 43 6f 6e  ypeDescriptorCon
4410: 74 65 78 74 20 63 6f 6e 74 65 78 74 2c 20 49 53  text context, IS
4420: 65 72 76 69 63 65 50 72 6f 76 69 64 65 72 20 70  erviceProvider p
4430: 72 6f 76 69 64 65 72 29 0a 20 20 20 20 7b 0a 20  rovider).    {. 
4440: 20 20 20 20 20 62 61 73 65 2e 46 69 6c 6c 54 72       base.FillTr
4450: 65 65 57 69 74 68 44 61 74 61 28 73 65 6c 65 63  eeWithData(selec
4460: 74 6f 72 2c 20 63 6f 6e 74 65 78 74 2c 20 70 72  tor, context, pr
4470: 6f 76 69 64 65 72 29 3b 0a 20 20 20 20 20 20 73  ovider);.      s
4480: 65 6c 65 63 74 6f 72 2e 41 64 64 4e 6f 64 65 28  elector.AddNode(
4490: 22 42 49 4e 41 52 59 22 2c 20 22 42 49 4e 41 52  "BINARY", "BINAR
44a0: 59 22 2c 20 6e 75 6c 6c 29 3b 0a 20 20 20 20 20  Y", null);.     
44b0: 20 73 65 6c 65 63 74 6f 72 2e 41 64 64 4e 6f 64   selector.AddNod
44c0: 65 28 22 4e 4f 43 41 53 45 22 2c 20 22 4e 4f 43  e("NOCASE", "NOC
44d0: 41 53 45 22 2c 20 6e 75 6c 6c 29 3b 0a 20 20 20  ASE", null);.   
44e0: 20 7d 0a 20 20 7d 0a 0a 20 20 69 6e 74 65 72 6e   }.  }..  intern
44f0: 61 6c 20 63 6c 61 73 73 20 43 61 74 61 6c 6f 67  al class Catalog
4500: 54 79 70 65 45 64 69 74 6f 72 20 3a 20 4f 62 6a  TypeEditor : Obj
4510: 65 63 74 53 65 6c 65 63 74 6f 72 45 64 69 74 6f  ectSelectorEdito
4520: 72 0a 20 20 7b 0a 20 20 20 20 70 75 62 6c 69 63  r.  {.    public
4530: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49   override bool I
4540: 73 44 72 6f 70 44 6f 77 6e 52 65 73 69 7a 61 62  sDropDownResizab
4550: 6c 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67  le.    {.      g
4560: 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  et.      {.     
4570: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a     return true;.
4580: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
4590: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
45a0: 64 65 20 55 49 54 79 70 65 45 64 69 74 6f 72 45  de UITypeEditorE
45b0: 64 69 74 53 74 79 6c 65 20 47 65 74 45 64 69 74  ditStyle GetEdit
45c0: 53 74 79 6c 65 28 49 54 79 70 65 44 65 73 63 72  Style(ITypeDescr
45d0: 69 70 74 6f 72 43 6f 6e 74 65 78 74 20 63 6f 6e  iptorContext con
45e0: 74 65 78 74 29 0a 20 20 20 20 7b 0a 20 20 20 20  text).    {.    
45f0: 20 20 72 65 74 75 72 6e 20 55 49 54 79 70 65 45    return UITypeE
4600: 64 69 74 6f 72 45 64 69 74 53 74 79 6c 65 2e 44  ditorEditStyle.D
4610: 72 6f 70 44 6f 77 6e 3b 0a 20 20 20 20 7d 0a 0a  ropDown;.    }..
4620: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76      protected ov
4630: 65 72 72 69 64 65 20 76 6f 69 64 20 46 69 6c 6c  erride void Fill
4640: 54 72 65 65 57 69 74 68 44 61 74 61 28 53 65 6c  TreeWithData(Sel
4650: 65 63 74 6f 72 20 73 65 6c 65 63 74 6f 72 2c 20  ector selector, 
4660: 49 54 79 70 65 44 65 73 63 72 69 70 74 6f 72 43  ITypeDescriptorC
4670: 6f 6e 74 65 78 74 20 63 6f 6e 74 65 78 74 2c 20  ontext context, 
4680: 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65 72  IServiceProvider
4690: 20 70 72 6f 76 69 64 65 72 29 0a 20 20 20 20 7b   provider).    {
46a0: 0a 20 20 20 20 20 20 62 61 73 65 2e 46 69 6c 6c  .      base.Fill
46b0: 54 72 65 65 57 69 74 68 44 61 74 61 28 73 65 6c  TreeWithData(sel
46c0: 65 63 74 6f 72 2c 20 63 6f 6e 74 65 78 74 2c 20  ector, context, 
46d0: 70 72 6f 76 69 64 65 72 29 3b 0a 20 20 20 20 20  provider);.     
46e0: 20 49 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f 6e   IHaveConnection
46f0: 20 73 6f 75 72 63 65 20 3d 20 63 6f 6e 74 65 78   source = contex
4700: 74 2e 49 6e 73 74 61 6e 63 65 20 61 73 20 49 48  t.Instance as IH
4710: 61 76 65 43 6f 6e 6e 65 63 74 69 6f 6e 3b 0a 0a  aveConnection;..
4720: 20 20 20 20 20 20 69 66 20 28 73 6f 75 72 63 65        if (source
4730: 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e   == null) return
4740: 3b 0a 0a 20 20 20 20 20 20 75 73 69 6e 67 20 28  ;..      using (
4750: 44 61 74 61 54 61 62 6c 65 20 74 61 62 6c 65 20  DataTable table 
4760: 3d 20 73 6f 75 72 63 65 2e 47 65 74 43 6f 6e 6e  = source.GetConn
4770: 65 63 74 69 6f 6e 28 29 2e 47 65 74 53 63 68 65  ection().GetSche
4780: 6d 61 28 22 43 61 74 61 6c 6f 67 73 22 29 29 0a  ma("Catalogs")).
4790: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
47a0: 66 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f 77  foreach (DataRow
47b0: 20 72 6f 77 20 69 6e 20 74 61 62 6c 65 2e 52 6f   row in table.Ro
47c0: 77 73 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  ws).        {.  
47d0: 20 20 20 20 20 20 20 20 73 65 6c 65 63 74 6f 72          selector
47e0: 2e 41 64 64 4e 6f 64 65 28 72 6f 77 5b 30 5d 2e  .AddNode(row[0].
47f0: 54 6f 53 74 72 69 6e 67 28 29 2c 20 72 6f 77 5b  ToString(), row[
4800: 30 5d 2c 20 6e 75 6c 6c 29 3b 0a 20 20 20 20 20  0], null);.     
4810: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
4820: 20 7d 0a 20 20 7d 0a 7d 0a                        }.  }.}.