System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 887fe4d2c4ed3ebaff57d4d8593ff7c97af910fc:


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 51 4c 69 74 65 2e  .  using SQLite.
0230: 44 65 73 69 67 6e 65 72 2e 45 64 69 74 6f 72 73  Designer.Editors
0240: 3b 0a 0a 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  ;..  internal ab
0250: 73 74 72 61 63 74 20 63 6c 61 73 73 20 56 69 65  stract class Vie
0260: 77 54 61 62 6c 65 42 61 73 65 3a 20 49 48 61 76  wTableBase: IHav
0270: 65 43 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20 7b 0a  eConnection.  {.
0280: 20 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72      public abstr
0290: 61 63 74 20 73 74 72 69 6e 67 20 4f 6c 64 4e 61  act string OldNa
02a0: 6d 65 20 7b 20 67 65 74 3b 20 7d 0a 20 20 20 20  me { get; }.    
02b0: 70 75 62 6c 69 63 20 61 62 73 74 72 61 63 74 20  public abstract 
02c0: 73 74 72 69 6e 67 20 4e 61 6d 65 20 7b 20 67 65  string Name { ge
02d0: 74 3b 20 73 65 74 3b 20 7d 0a 20 20 20 20 70 75  t; set; }.    pu
02e0: 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 73 74  blic abstract st
02f0: 72 69 6e 67 20 43 61 74 61 6c 6f 67 20 7b 20 67  ring Catalog { g
0300: 65 74 3b 20 7d 0a 20 20 20 20 70 75 62 6c 69 63  et; }.    public
0310: 20 61 62 73 74 72 61 63 74 20 6f 62 6a 65 63 74   abstract object
0320: 20 54 72 69 67 67 65 72 73 20 7b 20 67 65 74 3b   Triggers { get;
0330: 20 7d 0a 20 20 20 20 70 75 62 6c 69 63 20 61 62   }.    public ab
0340: 73 74 72 61 63 74 20 76 6f 69 64 20 4d 61 6b 65  stract void Make
0350: 44 69 72 74 79 28 29 3b 0a 20 20 20 20 70 75 62  Dirty();.    pub
0360: 6c 69 63 20 61 62 73 74 72 61 63 74 20 44 62 43  lic abstract DbC
0370: 6f 6e 6e 65 63 74 69 6f 6e 20 47 65 74 43 6f 6e  onnection GetCon
0380: 6e 65 63 74 69 6f 6e 28 29 3b 0a 20 20 20 20 70  nection();.    p
0390: 75 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 56  ublic abstract V
03a0: 69 65 77 54 61 62 6c 65 42 61 73 65 20 44 65 73  iewTableBase Des
03b0: 69 67 6e 54 61 62 6c 65 20 7b 20 67 65 74 3b 20  ignTable { get; 
03c0: 7d 0a 20 20 7d 0a 0a 20 20 69 6e 74 65 72 6e 61  }.  }..  interna
03d0: 6c 20 63 6c 61 73 73 20 54 61 62 6c 65 20 3a 20  l class Table : 
03e0: 56 69 65 77 54 61 62 6c 65 42 61 73 65 2c 20 49  ViewTableBase, I
03f0: 43 75 73 74 6f 6d 54 79 70 65 44 65 73 63 72 69  CustomTypeDescri
0400: 70 74 6f 72 0a 20 20 7b 0a 20 20 20 20 70 72 69  ptor.  {.    pri
0410: 76 61 74 65 20 73 74 72 69 6e 67 20 5f 6e 61 6d  vate string _nam
0420: 65 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  e;.    private s
0430: 74 72 69 6e 67 20 5f 6f 6c 64 6e 61 6d 65 3b 0a  tring _oldname;.
0440: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
0450: 6e 67 20 5f 63 61 74 61 6c 6f 67 3b 0a 20 20 20  ng _catalog;.   
0460: 20 70 72 69 76 61 74 65 20 4c 69 73 74 3c 43 6f   private List<Co
0470: 6c 75 6d 6e 3e 20 5f 63 6f 6c 75 6d 6e 73 20 3d  lumn> _columns =
0480: 20 6e 65 77 20 4c 69 73 74 3c 43 6f 6c 75 6d 6e   new List<Column
0490: 3e 28 29 3b 0a 20 20 20 20 70 72 69 76 61 74 65  >();.    private
04a0: 20 62 6f 6f 6c 20 5f 65 78 69 73 74 73 20 3d 20   bool _exists = 
04b0: 66 61 6c 73 65 3b 0a 20 20 20 20 70 72 69 76 61  false;.    priva
04c0: 74 65 20 73 74 72 69 6e 67 20 5f 6f 72 69 67 53  te string _origS
04d0: 71 6c 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74  ql = String.Empt
04e0: 79 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20 4c  y;.    private L
04f0: 69 73 74 3c 49 6e 64 65 78 3e 20 5f 69 6e 64 65  ist<Index> _inde
0500: 78 65 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 49  xes = new List<I
0510: 6e 64 65 78 3e 28 29 3b 0a 20 20 20 20 70 72 69  ndex>();.    pri
0520: 76 61 74 65 20 4c 69 73 74 3c 49 6e 64 65 78 3e  vate List<Index>
0530: 20 5f 6f 6c 64 69 6e 64 65 78 65 73 20 3d 20 6e   _oldindexes = n
0540: 65 77 20 4c 69 73 74 3c 49 6e 64 65 78 3e 28 29  ew List<Index>()
0550: 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20 4c 69  ;.    private Li
0560: 73 74 3c 46 6f 72 65 69 67 6e 4b 65 79 3e 20 5f  st<ForeignKey> _
0570: 66 6b 65 79 73 20 3d 20 6e 65 77 20 4c 69 73 74  fkeys = new List
0580: 3c 46 6f 72 65 69 67 6e 4b 65 79 3e 28 29 3b 0a  <ForeignKey>();.
0590: 20 20 20 20 70 72 69 76 61 74 65 20 4c 69 73 74      private List
05a0: 3c 46 6f 72 65 69 67 6e 4b 65 79 3e 20 5f 6f 6c  <ForeignKey> _ol
05b0: 64 66 6b 65 79 73 20 3d 20 6e 65 77 20 4c 69 73  dfkeys = new Lis
05c0: 74 3c 46 6f 72 65 69 67 6e 4b 65 79 3e 28 29 3b  t<ForeignKey>();
05d0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 4c 69 73  .    private Lis
05e0: 74 3c 73 74 72 69 6e 67 3e 20 5f 63 68 65 63 6b  t<string> _check
05f0: 20 3d 20 6e 65 77 20 4c 69 73 74 3c 73 74 72 69   = new List<stri
0600: 6e 67 3e 28 29 3b 0a 20 20 20 20 70 72 69 76 61  ng>();.    priva
0610: 74 65 20 4c 69 73 74 3c 54 72 69 67 67 65 72 3e  te List<Trigger>
0620: 20 5f 74 72 69 67 67 65 72 73 20 3d 20 6e 65 77   _triggers = new
0630: 20 4c 69 73 74 3c 54 72 69 67 67 65 72 3e 28 29   List<Trigger>()
0640: 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20 4c 69  ;.    private Li
0650: 73 74 3c 54 72 69 67 67 65 72 3e 20 5f 6f 6c 64  st<Trigger> _old
0660: 74 72 69 67 67 65 72 73 20 3d 20 6e 65 77 20 4c  triggers = new L
0670: 69 73 74 3c 54 72 69 67 67 65 72 3e 28 29 3b 0a  ist<Trigger>();.
0680: 20 20 20 20 70 72 69 76 61 74 65 20 50 72 69 6d      private Prim
0690: 61 72 79 4b 65 79 20 5f 6b 65 79 3b 0a 20 20 20  aryKey _key;.   
06a0: 20 69 6e 74 65 72 6e 61 6c 20 54 61 62 6c 65 44   internal TableD
06b0: 65 73 69 67 6e 65 72 44 6f 63 20 5f 6f 77 6e 65  esignerDoc _owne
06c0: 72 3b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  r;.    internal 
06d0: 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 5f 63 6f  DbConnection _co
06e0: 6e 6e 65 63 74 69 6f 6e 3b 0a 0a 20 20 20 20 69  nnection;..    i
06f0: 6e 74 65 72 6e 61 6c 20 54 61 62 6c 65 28 73 74  nternal Table(st
0700: 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65 2c 20  ring tableName, 
0710: 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  DbConnection con
0720: 6e 65 63 74 69 6f 6e 2c 20 54 61 62 6c 65 44 65  nection, TableDe
0730: 73 69 67 6e 65 72 44 6f 63 20 6f 77 6e 65 72 29  signerDoc owner)
0740: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 5f 6f 77  .    {.      _ow
0750: 6e 65 72 20 3d 20 6f 77 6e 65 72 3b 0a 20 20 20  ner = owner;.   
0760: 20 20 20 5f 6f 6c 64 6e 61 6d 65 20 3d 20 74 61     _oldname = ta
0770: 62 6c 65 4e 61 6d 65 3b 0a 20 20 20 20 20 20 5f  bleName;.      _
0780: 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 63 6f 6e  connection = con
0790: 6e 65 63 74 69 6f 6e 3b 0a 20 20 20 20 20 20 5f  nection;.      _
07a0: 6e 61 6d 65 20 3d 20 74 61 62 6c 65 4e 61 6d 65  name = tableName
07b0: 3b 0a 20 20 20 20 20 20 5f 6f 77 6e 65 72 2e 4e  ;.      _owner.N
07c0: 61 6d 65 20 3d 20 5f 6e 61 6d 65 3b 0a 20 20 20  ame = _name;.   
07d0: 20 20 20 5f 63 61 74 61 6c 6f 67 20 3d 20 5f 63     _catalog = _c
07e0: 6f 6e 6e 65 63 74 69 6f 6e 2e 44 61 74 61 62 61  onnection.Databa
07f0: 73 65 3b 20 2f 2f 20 6d 61 69 6e 0a 0a 20 20 20  se; // main..   
0800: 20 20 20 52 65 6c 6f 61 64 44 65 66 69 6e 69 74     ReloadDefinit
0810: 69 6f 6e 28 29 3b 0a 0a 20 20 20 20 20 20 69 66  ion();..      if
0820: 20 28 5f 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 20   (_key == null) 
0830: 5f 6b 65 79 20 3d 20 6e 65 77 20 50 72 69 6d 61  _key = new Prima
0840: 72 79 4b 65 79 28 5f 63 6f 6e 6e 65 63 74 69 6f  ryKey(_connectio
0850: 6e 2c 20 74 68 69 73 2c 20 6e 75 6c 6c 29 3b 0a  n, this, null);.
0860: 0a 20 20 20 20 20 20 69 66 20 28 5f 65 78 69 73  .      if (_exis
0870: 74 73 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  ts).      {.    
0880: 20 20 20 20 75 73 69 6e 67 20 28 44 61 74 61 54      using (DataT
0890: 61 62 6c 65 20 74 62 6c 20 3d 20 63 6f 6e 6e 65  able tbl = conne
08a0: 63 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28  ction.GetSchema(
08b0: 22 46 6f 72 65 69 67 6e 4b 65 79 73 22 2c 20 6e  "ForeignKeys", n
08c0: 65 77 20 73 74 72 69 6e 67 5b 5d 20 7b 20 43 61  ew string[] { Ca
08d0: 74 61 6c 6f 67 2c 20 6e 75 6c 6c 2c 20 4e 61 6d  talog, null, Nam
08e0: 65 20 7d 29 29 0a 20 20 20 20 20 20 20 20 7b 0a  e })).        {.
08f0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
0900: 68 20 28 44 61 74 61 52 6f 77 20 72 6f 77 20 69  h (DataRow row i
0910: 6e 20 74 62 6c 2e 52 6f 77 73 29 0a 20 20 20 20  n tbl.Rows).    
0920: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
0930: 20 20 20 20 5f 66 6b 65 79 73 2e 41 64 64 28 6e      _fkeys.Add(n
0940: 65 77 20 46 6f 72 65 69 67 6e 4b 65 79 28 63 6f  ew ForeignKey(co
0950: 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 69 73 2c 20  nnection, this, 
0960: 72 6f 77 29 29 3b 0a 20 20 20 20 20 20 20 20 20  row));.         
0970: 20 20 20 5f 6f 6c 64 66 6b 65 79 73 2e 41 64 64     _oldfkeys.Add
0980: 28 6e 65 77 20 46 6f 72 65 69 67 6e 4b 65 79 28  (new ForeignKey(
0990: 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 69 73  connection, this
09a0: 2c 20 72 6f 77 29 29 3b 0a 20 20 20 20 20 20 20  , row));.       
09b0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
09c0: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 75 73       }..      us
09d0: 69 6e 67 20 28 44 61 74 61 54 61 62 6c 65 20 74  ing (DataTable t
09e0: 62 6c 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  bl = connection.
09f0: 47 65 74 53 63 68 65 6d 61 28 22 43 6f 6c 75 6d  GetSchema("Colum
0a00: 6e 73 22 2c 20 6e 65 77 20 73 74 72 69 6e 67 5b  ns", new string[
0a10: 5d 20 7b 20 43 61 74 61 6c 6f 67 2c 20 6e 75 6c  ] { Catalog, nul
0a20: 6c 2c 20 4e 61 6d 65 20 7d 29 29 0a 20 20 20 20  l, Name })).    
0a30: 20 20 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 65    {.        fore
0a40: 61 63 68 20 28 44 61 74 61 52 6f 77 20 72 6f 77  ach (DataRow row
0a50: 20 69 6e 20 74 62 6c 2e 52 6f 77 73 29 0a 20 20   in tbl.Rows).  
0a60: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
0a70: 20 20 5f 63 6f 6c 75 6d 6e 73 2e 41 64 64 28 6e    _columns.Add(n
0a80: 65 77 20 43 6f 6c 75 6d 6e 28 72 6f 77 2c 20 74  ew Column(row, t
0a90: 68 69 73 29 29 3b 0a 20 20 20 20 20 20 20 20 7d  his));.        }
0aa0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
0ab0: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
0ac0: 69 64 65 20 76 6f 69 64 20 4d 61 6b 65 44 69 72  ide void MakeDir
0ad0: 74 79 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  ty().    {.     
0ae0: 20 5f 6f 77 6e 65 72 2e 4d 61 6b 65 44 69 72 74   _owner.MakeDirt
0af0: 79 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  y();.    }..    
0b00: 70 72 69 76 61 74 65 20 76 6f 69 64 20 52 65 6c  private void Rel
0b10: 6f 61 64 44 65 66 69 6e 69 74 69 6f 6e 28 29 0a  oadDefinition().
0b20: 20 20 20 20 7b 0a 20 20 20 20 20 20 75 73 69 6e      {.      usin
0b30: 67 20 28 44 61 74 61 54 61 62 6c 65 20 74 62 6c  g (DataTable tbl
0b40: 20 3d 20 5f 63 6f 6e 6e 65 63 74 69 6f 6e 2e 47   = _connection.G
0b50: 65 74 53 63 68 65 6d 61 28 22 54 61 62 6c 65 73  etSchema("Tables
0b60: 22 2c 20 6e 65 77 20 73 74 72 69 6e 67 5b 5d 20  ", new string[] 
0b70: 7b 20 43 61 74 61 6c 6f 67 2c 20 6e 75 6c 6c 2c  { Catalog, null,
0b80: 20 4e 61 6d 65 20 7d 29 29 0a 20 20 20 20 20 20   Name })).      
0b90: 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 62  {.        if (tb
0ba0: 6c 2e 52 6f 77 73 2e 43 6f 75 6e 74 20 3e 20 30  l.Rows.Count > 0
0bb0: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
0bc0: 20 20 20 20 20 20 5f 65 78 69 73 74 73 20 3d 20        _exists = 
0bd0: 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  true;.          
0be0: 5f 6f 72 69 67 53 71 6c 20 3d 20 74 62 6c 2e 52  _origSql = tbl.R
0bf0: 6f 77 73 5b 30 5d 5b 22 54 41 42 4c 45 5f 44 45  ows[0]["TABLE_DE
0c00: 46 49 4e 49 54 49 4f 4e 22 5d 2e 54 6f 53 74 72  FINITION"].ToStr
0c10: 69 6e 67 28 29 2e 54 72 69 6d 28 29 2e 54 72 69  ing().Trim().Tri
0c20: 6d 45 6e 64 28 27 3b 27 29 3b 0a 20 20 20 20 20  mEnd(';');.     
0c30: 20 20 20 20 20 5f 6f 6c 64 6e 61 6d 65 20 3d 20       _oldname = 
0c40: 4e 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a  Name;.        }.
0c50: 20 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20          else.   
0c60: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
0c70: 20 5f 65 78 69 73 74 73 20 3d 20 66 61 6c 73 65   _exists = false
0c80: 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ;.          retu
0c90: 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
0ca0: 20 20 20 20 7d 0a 20 20 20 20 20 20 0a 20 20 20      }.      .   
0cb0: 20 20 20 5f 69 6e 64 65 78 65 73 2e 43 6c 65 61     _indexes.Clea
0cc0: 72 28 29 3b 0a 20 20 20 20 20 20 5f 6f 6c 64 69  r();.      _oldi
0cd0: 6e 64 65 78 65 73 2e 43 6c 65 61 72 28 29 3b 0a  ndexes.Clear();.
0ce0: 0a 20 20 20 20 20 20 75 73 69 6e 67 20 28 44 61  .      using (Da
0cf0: 74 61 54 61 62 6c 65 20 74 62 6c 20 3d 20 5f 63  taTable tbl = _c
0d00: 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74 53 63 68  onnection.GetSch
0d10: 65 6d 61 28 22 49 6e 64 65 78 65 73 22 2c 20 6e  ema("Indexes", n
0d20: 65 77 20 73 74 72 69 6e 67 5b 5d 20 7b 20 43 61  ew string[] { Ca
0d30: 74 61 6c 6f 67 2c 20 6e 75 6c 6c 2c 20 4e 61 6d  talog, null, Nam
0d40: 65 20 7d 29 29 0a 20 20 20 20 20 20 7b 0a 20 20  e })).      {.  
0d50: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 44        foreach (D
0d60: 61 74 61 52 6f 77 20 72 6f 77 20 69 6e 20 74 62  ataRow row in tb
0d70: 6c 2e 52 6f 77 73 29 0a 20 20 20 20 20 20 20 20  l.Rows).        
0d80: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  {.          if (
0d90: 28 62 6f 6f 6c 29 72 6f 77 5b 22 50 52 49 4d 41  (bool)row["PRIMA
0da0: 52 59 5f 4b 45 59 22 5d 20 3d 3d 20 66 61 6c 73  RY_KEY"] == fals
0db0: 65 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20  e).          {. 
0dc0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
0dd0: 6f 77 5b 22 49 4e 44 45 58 5f 4e 41 4d 45 22 5d  ow["INDEX_NAME"]
0de0: 2e 54 6f 53 74 72 69 6e 67 28 29 2e 53 74 61 72  .ToString().Star
0df0: 74 73 57 69 74 68 28 22 73 71 6c 69 74 65 5f 22  tsWith("sqlite_"
0e00: 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
0e10: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
0e20: 43 61 73 65 29 20 3d 3d 20 66 61 6c 73 65 29 0a  Case) == false).
0e30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
0e40: 20 20 20 20 20 20 20 20 20 20 20 20 5f 69 6e 64              _ind
0e50: 65 78 65 73 2e 41 64 64 28 6e 65 77 20 49 6e 64  exes.Add(new Ind
0e60: 65 78 28 5f 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20  ex(_connection, 
0e70: 74 68 69 73 2c 20 72 6f 77 29 29 3b 0a 20 20 20  this, row));.   
0e80: 20 20 20 20 20 20 20 20 20 20 20 5f 6f 6c 64 69             _oldi
0e90: 6e 64 65 78 65 73 2e 41 64 64 28 6e 65 77 20 49  ndexes.Add(new I
0ea0: 6e 64 65 78 28 5f 63 6f 6e 6e 65 63 74 69 6f 6e  ndex(_connection
0eb0: 2c 20 74 68 69 73 2c 20 72 6f 77 29 29 3b 0a 20  , this, row));. 
0ec0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
0ed0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
0ee0: 20 20 20 65 6c 73 65 20 69 66 20 28 5f 6b 65 79     else if (_key
0ef0: 20 3d 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20   == null).      
0f00: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
0f10: 20 20 5f 6b 65 79 20 3d 20 6e 65 77 20 50 72 69    _key = new Pri
0f20: 6d 61 72 79 4b 65 79 28 5f 63 6f 6e 6e 65 63 74  maryKey(_connect
0f30: 69 6f 6e 2c 20 74 68 69 73 2c 20 72 6f 77 29 3b  ion, this, row);
0f40: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
0f50: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
0f60: 20 20 20 20 20 20 5f 63 68 65 63 6b 2e 43 6c 65        _check.Cle
0f70: 61 72 28 29 3b 0a 20 20 20 20 20 20 53 74 72 69  ar();.      Stri
0f80: 6e 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65  ngBuilder builde
0f90: 72 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  r = new StringBu
0fa0: 69 6c 64 65 72 28 29 3b 0a 20 20 20 20 20 20 53  ilder();.      S
0fb0: 69 6d 70 6c 65 54 6f 6b 65 6e 69 7a 65 72 2e 53  impleTokenizer.S
0fc0: 74 72 69 6e 67 50 61 72 74 73 5b 5d 20 61 72 72  tringParts[] arr
0fd0: 20 3d 20 53 69 6d 70 6c 65 54 6f 6b 65 6e 69 7a   = SimpleTokeniz
0fe0: 65 72 2e 42 72 65 61 6b 53 74 72 69 6e 67 28 5f  er.BreakString(_
0ff0: 6f 72 69 67 53 71 6c 29 3b 0a 20 20 20 20 20 20  origSql);.      
1000: 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20  for (int n = 0; 
1010: 6e 20 3c 20 61 72 72 2e 4c 65 6e 67 74 68 20 2d  n < arr.Length -
1020: 20 33 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20 7b   3; n++).      {
1030: 0a 20 20 20 20 20 20 20 20 69 66 20 28 61 72 72  .        if (arr
1040: 5b 6e 5d 2e 6b 65 79 77 6f 72 64 20 3d 3d 20 22  [n].keyword == "
1050: 43 4f 4e 53 54 52 41 49 4e 54 22 29 0a 20 20 20  CONSTRAINT").   
1060: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
1070: 20 62 75 69 6c 64 65 72 2e 4c 65 6e 67 74 68 20   builder.Length 
1080: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 69  = 0;.          i
1090: 6e 74 20 78 3b 0a 20 20 20 20 20 20 20 20 20 20  nt x;.          
10a0: 66 6f 72 20 28 78 20 3d 20 31 3b 20 78 20 3c 20  for (x = 1; x < 
10b0: 33 3b 20 78 2b 2b 29 0a 20 20 20 20 20 20 20 20  3; x++).        
10c0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
10d0: 69 66 20 28 61 72 72 5b 6e 20 2b 20 78 5d 2e 6b  if (arr[n + x].k
10e0: 65 79 77 6f 72 64 20 3d 3d 20 22 43 48 45 43 4b  eyword == "CHECK
10f0: 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ").             
1100: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
1110: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66    }.          if
1120: 20 28 78 20 3d 3d 20 33 29 0a 20 20 20 20 20 20   (x == 3).      
1130: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
1140: 20 20 6e 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20    n += 2;.      
1150: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a        continue;.
1160: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1170: 20 20 20 20 20 20 78 20 2b 3d 20 6e 20 2b 20 31        x += n + 1
1180: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ;.          int 
1190: 64 65 70 74 68 20 3d 20 61 72 72 5b 6e 5d 2e 64  depth = arr[n].d
11a0: 65 70 74 68 3b 0a 20 20 20 20 20 20 20 20 20 20  epth;.          
11b0: 69 6e 74 20 62 61 73 65 64 65 70 74 68 20 3d 20  int basedepth = 
11c0: 61 72 72 5b 78 5d 2e 64 65 70 74 68 3b 0a 20 20  arr[x].depth;.  
11d0: 20 20 20 20 20 20 20 20 66 6f 72 20 28 3b 20 78          for (; x
11e0: 20 3c 20 61 72 72 2e 4c 65 6e 67 74 68 3b 20 78   < arr.Length; x
11f0: 2b 2b 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a  ++).          {.
1200: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1210: 61 72 72 5b 78 5d 2e 64 65 70 74 68 20 3c 20 62  arr[x].depth < b
1220: 61 73 65 64 65 70 74 68 29 0a 20 20 20 20 20 20  asedepth).      
1230: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a          break;..
1240: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1250: 62 75 69 6c 64 65 72 2e 4c 65 6e 67 74 68 20 3e  builder.Length >
1260: 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   0).            
1270: 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
1280: 28 22 20 22 29 3b 0a 0a 20 20 20 20 20 20 20 20  (" ");..        
1290: 20 20 20 20 77 68 69 6c 65 20 28 64 65 70 74 68      while (depth
12a0: 20 3c 20 61 72 72 5b 78 5d 2e 64 65 70 74 68 29   < arr[x].depth)
12b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20  .            {. 
12c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69               bui
12d0: 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 28 22 29  lder.Append("(")
12e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
12f0: 64 65 70 74 68 2b 2b 3b 0a 20 20 20 20 20 20 20  depth++;.       
1300: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1310: 20 20 20 77 68 69 6c 65 20 28 64 65 70 74 68 20     while (depth 
1320: 3e 20 61 72 72 5b 78 5d 2e 64 65 70 74 68 29 0a  > arr[x].depth).
1330: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
1340: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c              buil
1350: 64 65 72 2e 41 70 70 65 6e 64 28 22 29 22 29 3b  der.Append(")");
1360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64  .              d
1370: 65 70 74 68 2d 2d 3b 0a 20 20 20 20 20 20 20 20  epth--;.        
1380: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20      }..         
1390: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
13a0: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 61 72 72 5b  NullOrEmpty(arr[
13b0: 78 5d 2e 71 75 6f 74 65 29 20 3d 3d 20 66 61 6c  x].quote) == fal
13c0: 73 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  se).            
13d0: 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
13e0: 28 61 72 72 5b 78 5d 2e 71 75 6f 74 65 5b 30 5d  (arr[x].quote[0]
13f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  );.            b
1400: 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 61 72  uilder.Append(ar
1410: 72 5b 78 5d 2e 76 61 6c 75 65 29 3b 0a 20 20 20  r[x].value);.   
1420: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
1430: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
1440: 79 28 61 72 72 5b 78 5d 2e 71 75 6f 74 65 29 20  y(arr[x].quote) 
1450: 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20 20 20 20  == false).      
1460: 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e          builder.
1470: 41 70 70 65 6e 64 28 61 72 72 5b 78 5d 2e 71 75  Append(arr[x].qu
1480: 6f 74 65 5b 31 5d 29 3b 0a 0a 20 20 20 20 20 20  ote[1]);..      
1490: 20 20 20 20 20 20 69 66 20 28 61 72 72 5b 78 5d        if (arr[x]
14a0: 2e 73 65 70 20 3d 3d 20 74 72 75 65 29 20 62 72  .sep == true) br
14b0: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  eak;.          }
14c0: 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65  .          while
14d0: 20 28 64 65 70 74 68 20 3e 20 61 72 72 5b 6e 5d   (depth > arr[n]
14e0: 2e 64 65 70 74 68 29 0a 20 20 20 20 20 20 20 20  .depth).        
14f0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
1500: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22  builder.Append("
1510: 29 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  )");.           
1520: 20 64 65 70 74 68 2d 2d 3b 0a 20 20 20 20 20 20   depth--;.      
1530: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1540: 6e 20 3d 20 78 3b 0a 20 20 20 20 20 20 20 20 20  n = x;.         
1550: 20 5f 63 68 65 63 6b 2e 41 64 64 28 62 75 69 6c   _check.Add(buil
1560: 64 65 72 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  der.ToString());
1570: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1580: 20 7d 0a 0a 20 20 20 20 20 20 62 75 69 6c 64 65   }..      builde
1590: 72 2e 4c 65 6e 67 74 68 20 3d 20 30 3b 0a 20 20  r.Length = 0;.  
15a0: 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65      builder.Appe
15b0: 6e 64 4c 69 6e 65 28 22 2d 2d 20 4f 72 69 67 69  ndLine("-- Origi
15c0: 6e 61 6c 20 74 61 62 6c 65 20 73 63 68 65 6d 61  nal table schema
15d0: 22 29 3b 0a 20 20 20 20 20 20 62 75 69 6c 64 65  ");.      builde
15e0: 72 2e 41 70 70 65 6e 64 28 5f 6f 72 69 67 53 71  r.Append(_origSq
15f0: 6c 29 3b 0a 0a 20 20 20 20 20 20 62 75 69 6c 64  l);..      build
1600: 65 72 2e 41 70 70 65 6e 64 4c 69 6e 65 28 22 3b  er.AppendLine(";
1610: 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 65 61 63  ");.      foreac
1620: 68 20 28 49 6e 64 65 78 20 69 64 78 20 69 6e 20  h (Index idx in 
1630: 5f 6f 6c 64 69 6e 64 65 78 65 73 29 0a 20 20 20  _oldindexes).   
1640: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 62 75 69     {.        bui
1650: 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d 61  lder.AppendForma
1660: 74 28 22 7b 30 7d 3b 5c 72 5c 6e 22 2c 20 69 64  t("{0};\r\n", id
1670: 78 2e 4f 72 69 67 69 6e 61 6c 53 71 6c 29 3b 0a  x.OriginalSql);.
1680: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 5f        }..      _
1690: 74 72 69 67 67 65 72 73 2e 43 6c 65 61 72 28 29  triggers.Clear()
16a0: 3b 0a 20 20 20 20 20 20 5f 6f 6c 64 74 72 69 67  ;.      _oldtrig
16b0: 67 65 72 73 2e 43 6c 65 61 72 28 29 3b 0a 0a 20  gers.Clear();.. 
16c0: 20 20 20 20 20 75 73 69 6e 67 20 28 44 61 74 61       using (Data
16d0: 54 61 62 6c 65 20 74 62 6c 20 3d 20 5f 63 6f 6e  Table tbl = _con
16e0: 6e 65 63 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d  nection.GetSchem
16f0: 61 28 22 54 72 69 67 67 65 72 73 22 2c 20 6e 65  a("Triggers", ne
1700: 77 20 73 74 72 69 6e 67 5b 5d 20 7b 20 43 61 74  w string[] { Cat
1710: 61 6c 6f 67 2c 20 6e 75 6c 6c 2c 20 4e 61 6d 65  alog, null, Name
1720: 20 7d 29 29 0a 20 20 20 20 20 20 7b 0a 20 20 20   })).      {.   
1730: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 44 61       foreach (Da
1740: 74 61 52 6f 77 20 72 6f 77 20 69 6e 20 74 62 6c  taRow row in tbl
1750: 2e 52 6f 77 73 29 0a 20 20 20 20 20 20 20 20 7b  .Rows).        {
1760: 0a 20 20 20 20 20 20 20 20 20 20 54 72 69 67 67  .          Trigg
1770: 65 72 20 74 20 3d 20 6e 65 77 20 54 72 69 67 67  er t = new Trigg
1780: 65 72 28 74 68 69 73 2c 20 72 6f 77 29 3b 0a 20  er(this, row);. 
1790: 20 20 20 20 20 20 20 20 20 5f 74 72 69 67 67 65           _trigge
17a0: 72 73 2e 41 64 64 28 74 29 3b 0a 20 20 20 20 20  rs.Add(t);.     
17b0: 20 20 20 20 20 5f 6f 6c 64 74 72 69 67 67 65 72       _oldtrigger
17c0: 73 2e 41 64 64 28 28 28 49 43 6c 6f 6e 65 61 62  s.Add(((ICloneab
17d0: 6c 65 29 74 29 2e 43 6c 6f 6e 65 28 29 20 61 73  le)t).Clone() as
17e0: 20 54 72 69 67 67 65 72 29 3b 0a 0a 20 20 20 20   Trigger);..    
17f0: 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70        builder.Ap
1800: 70 65 6e 64 46 6f 72 6d 61 74 28 22 7b 30 7d 3b  pendFormat("{0};
1810: 5c 72 5c 6e 22 2c 20 74 2e 4f 72 69 67 69 6e 61  \r\n", t.Origina
1820: 6c 53 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 7d  lSql);.        }
1830: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1840: 5f 6f 72 69 67 53 71 6c 20 3d 20 62 75 69 6c 64  _origSql = build
1850: 65 72 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0a 20  er.ToString();. 
1860: 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 65 72 6e     }..    intern
1870: 61 6c 20 76 6f 69 64 20 43 6f 6d 6d 69 74 74 65  al void Committe
1880: 64 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  d().    {.      
1890: 5f 65 78 69 73 74 73 20 3d 20 74 72 75 65 3b 0a  _exists = true;.
18a0: 20 20 20 20 20 20 52 65 6c 6f 61 64 44 65 66 69        ReloadDefi
18b0: 6e 69 74 69 6f 6e 28 29 3b 0a 0a 20 20 20 20 20  nition();..     
18c0: 20 66 6f 72 65 61 63 68 20 28 43 6f 6c 75 6d 6e   foreach (Column
18d0: 20 63 20 69 6e 20 43 6f 6c 75 6d 6e 73 29 0a 20   c in Columns). 
18e0: 20 20 20 20 20 20 20 63 2e 43 6f 6d 6d 69 74 74         c.Committ
18f0: 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 66 6f 72  ed();..      for
1900: 65 61 63 68 20 28 46 6f 72 65 69 67 6e 4b 65 79  each (ForeignKey
1910: 20 6b 65 79 20 69 6e 20 46 6f 72 65 69 67 6e 4b   key in ForeignK
1920: 65 79 73 29 0a 20 20 20 20 20 20 20 20 6b 65 79  eys).        key
1930: 2e 43 6c 65 61 72 44 69 72 74 79 28 29 3b 0a 0a  .ClearDirty();..
1940: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 49        foreach (I
1950: 6e 64 65 78 20 69 64 78 20 69 6e 20 49 6e 64 65  ndex idx in Inde
1960: 78 65 73 29 0a 20 20 20 20 20 20 20 20 69 64 78  xes).        idx
1970: 2e 43 6c 65 61 72 44 69 72 74 79 28 29 3b 0a 0a  .ClearDirty();..
1980: 20 20 20 20 20 20 69 66 20 28 50 72 69 6d 61 72        if (Primar
1990: 79 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 0a 20 20  yKey != null).  
19a0: 20 20 20 20 20 20 50 72 69 6d 61 72 79 4b 65 79        PrimaryKey
19b0: 2e 43 6c 65 61 72 44 69 72 74 79 28 29 3b 0a 20  .ClearDirty();. 
19c0: 20 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73     }..    [Brows
19d0: 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20  able(false)].   
19e0: 20 70 75 62 6c 69 63 20 4c 69 73 74 3c 49 6e 64   public List<Ind
19f0: 65 78 3e 20 49 6e 64 65 78 65 73 0a 20 20 20 20  ex> Indexes.    
1a00: 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65  {.      get { re
1a10: 74 75 72 6e 20 5f 69 6e 64 65 78 65 73 3b 20 7d  turn _indexes; }
1a20: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f  .    }..    [Bro
1a30: 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20  wsable(false)]. 
1a40: 20 20 20 70 75 62 6c 69 63 20 50 72 69 6d 61 72     public Primar
1a50: 79 4b 65 79 20 50 72 69 6d 61 72 79 4b 65 79 0a  yKey PrimaryKey.
1a60: 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20      {.      get 
1a70: 7b 20 72 65 74 75 72 6e 20 5f 6b 65 79 3b 20 7d  { return _key; }
1a80: 0a 20 20 20 20 20 20 73 65 74 0a 20 20 20 20 20  .      set.     
1a90: 20 7b 0a 20 20 20 20 20 20 20 20 5f 6b 65 79 20   {.        _key 
1aa0: 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 20  = value;.       
1ab0: 20 5f 6f 77 6e 65 72 2e 49 6e 76 61 6c 69 64 61   _owner.Invalida
1ac0: 74 65 28 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  te();.      }.  
1ad0: 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61    }..    [Browsa
1ae0: 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20  ble(false)].    
1af0: 70 75 62 6c 69 63 20 4c 69 73 74 3c 46 6f 72 65  public List<Fore
1b00: 69 67 6e 4b 65 79 3e 20 46 6f 72 65 69 67 6e 4b  ignKey> ForeignK
1b10: 65 79 73 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  eys.    {.      
1b20: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 66 6b  get { return _fk
1b30: 65 79 73 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20  eys; }.    }..  
1b40: 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c    [Browsable(fal
1b50: 73 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20  se)].    public 
1b60: 4c 69 73 74 3c 73 74 72 69 6e 67 3e 20 43 68 65  List<string> Che
1b70: 63 6b 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67  ck.    {.      g
1b80: 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 63 68 65  et { return _che
1b90: 63 6b 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20  ck; }.    }..   
1ba0: 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73   [Browsable(fals
1bb0: 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  e)].    public o
1bc0: 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 54  verride object T
1bd0: 72 69 67 67 65 72 73 0a 20 20 20 20 7b 0a 20 20  riggers.    {.  
1be0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1bf0: 20 5f 74 72 69 67 67 65 72 73 3b 20 7d 0a 20 20   _triggers; }.  
1c00: 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73 61    }..    [Browsa
1c10: 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20  ble(false)].    
1c20: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4f 72  public string Or
1c30: 69 67 69 6e 61 6c 53 71 6c 0a 20 20 20 20 7b 0a  iginalSql.    {.
1c40: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1c50: 72 6e 20 5f 6f 72 69 67 53 71 6c 3b 20 7d 0a 20  rn _origSql; }. 
1c60: 20 20 20 7d 0a 0a 20 20 20 20 5b 43 61 74 65 67     }..    [Categ
1c70: 6f 72 79 28 22 53 74 6f 72 61 67 65 22 29 5d 0a  ory("Storage")].
1c80: 20 20 20 20 5b 52 65 66 72 65 73 68 50 72 6f 70      [RefreshProp
1c90: 65 72 74 69 65 73 28 52 65 66 72 65 73 68 50 72  erties(RefreshPr
1ca0: 6f 70 65 72 74 69 65 73 2e 41 6c 6c 29 5d 0a 20  operties.All)]. 
1cb0: 20 20 20 5b 50 61 72 65 6e 74 68 65 73 69 7a 65     [Parenthesize
1cc0: 50 72 6f 70 65 72 74 79 4e 61 6d 65 28 74 72 75  PropertyName(tru
1cd0: 65 29 5d 0a 20 20 20 20 5b 4e 6f 74 69 66 79 50  e)].    [NotifyP
1ce0: 61 72 65 6e 74 50 72 6f 70 65 72 74 79 28 74 72  arentProperty(tr
1cf0: 75 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20  ue)].    public 
1d00: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
1d10: 4e 61 6d 65 0a 20 20 20 20 7b 0a 20 20 20 20 20  Name.    {.     
1d20: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f 6e   get { return _n
1d30: 61 6d 65 3b 20 7d 0a 20 20 20 20 20 20 73 65 74  ame; }.      set
1d40: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
1d50: 20 69 66 20 28 5f 6e 61 6d 65 20 21 3d 20 76 61   if (_name != va
1d60: 6c 75 65 29 0a 20 20 20 20 20 20 20 20 7b 0a 20  lue).        {. 
1d70: 20 20 20 20 20 20 20 20 20 5f 6e 61 6d 65 20 3d           _name =
1d80: 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20   value;.        
1d90: 20 20 5f 6f 77 6e 65 72 2e 4e 61 6d 65 20 3d 20    _owner.Name = 
1da0: 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 20  value;.         
1db0: 20 5f 6f 77 6e 65 72 2e 4d 61 6b 65 44 69 72 74   _owner.MakeDirt
1dc0: 79 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  y();.        }. 
1dd0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
1de0: 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c    [Browsable(fal
1df0: 73 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20  se)].    public 
1e00: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
1e10: 4f 6c 64 4e 61 6d 65 0a 20 20 20 20 7b 0a 20 20  OldName.    {.  
1e20: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1e30: 20 5f 6f 6c 64 6e 61 6d 65 3b 20 7d 0a 20 20 20   _oldname; }.   
1e40: 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 6f   }..    public o
1e50: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 54  verride string T
1e60: 6f 53 74 72 69 6e 67 28 29 0a 20 20 20 20 7b 0a  oString().    {.
1e70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
1e80: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 5b 7b 30 7d  ing.Format("[{0}
1e90: 5d 2e 5b 7b 31 7d 5d 22 2c 20 43 61 74 61 6c 6f  ].[{1}]", Catalo
1ea0: 67 2c 20 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a  g, Name);.    }.
1eb0: 0a 20 20 20 20 5b 43 61 74 65 67 6f 72 79 28 22  .    [Category("
1ec0: 53 74 6f 72 61 67 65 22 29 5d 0a 20 20 20 20 5b  Storage")].    [
1ed0: 45 64 69 74 6f 72 28 74 79 70 65 6f 66 28 43 61  Editor(typeof(Ca
1ee0: 74 61 6c 6f 67 54 79 70 65 45 64 69 74 6f 72 29  talogTypeEditor)
1ef0: 2c 20 74 79 70 65 6f 66 28 55 49 54 79 70 65 45  , typeof(UITypeE
1f00: 64 69 74 6f 72 29 29 5d 0a 20 20 20 20 5b 44 65  ditor))].    [De
1f10: 66 61 75 6c 74 56 61 6c 75 65 28 22 6d 61 69 6e  faultValue("main
1f20: 22 29 5d 0a 20 20 20 20 5b 52 65 66 72 65 73 68  ")].    [Refresh
1f30: 50 72 6f 70 65 72 74 69 65 73 28 52 65 66 72 65  Properties(Refre
1f40: 73 68 50 72 6f 70 65 72 74 69 65 73 2e 41 6c 6c  shProperties.All
1f50: 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  )].    public ov
1f60: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 61  erride string Ca
1f70: 74 61 6c 6f 67 0a 20 20 20 20 7b 0a 20 20 20 20  talog.    {.    
1f80: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 5f    get { return _
1f90: 63 61 74 61 6c 6f 67 3b 20 7d 0a 20 20 20 20 7d  catalog; }.    }
1fa0: 0a 0a 20 20 20 20 5b 43 61 74 65 67 6f 72 79 28  ..    [Category(
1fb0: 22 53 74 6f 72 61 67 65 22 29 5d 0a 20 20 20 20  "Storage")].    
1fc0: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44 61  public string Da
1fd0: 74 61 62 61 73 65 0a 20 20 20 20 7b 0a 20 20 20  tabase.    {.   
1fe0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1ff0: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 2e 44 61 74 61  _connection.Data
2000: 53 6f 75 72 63 65 3b 20 7d 0a 20 20 20 20 7d 0a  Source; }.    }.
2010: 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28  .    [Browsable(
2020: 66 61 6c 73 65 29 5d 0a 20 20 20 20 70 75 62 6c  false)].    publ
2030: 69 63 20 4c 69 73 74 3c 43 6f 6c 75 6d 6e 3e 20  ic List<Column> 
2040: 43 6f 6c 75 6d 6e 73 0a 20 20 20 20 7b 0a 20 20  Columns.    {.  
2050: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
2060: 20 5f 63 6f 6c 75 6d 6e 73 3b 20 7d 0a 20 20 20   _columns; }.   
2070: 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 73   }..    public s
2080: 74 72 69 6e 67 20 47 65 74 53 71 6c 28 29 0a 20  tring GetSql(). 
2090: 20 20 20 7b 0a 20 20 20 20 20 20 53 74 72 69 6e     {.      Strin
20a0: 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65 72  gBuilder builder
20b0: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
20c0: 6c 64 65 72 28 29 3b 0a 20 20 20 20 20 20 73 74  lder();.      st
20d0: 72 69 6e 67 20 61 6c 74 4e 61 6d 65 20 3d 20 6e  ring altName = n
20e0: 75 6c 6c 3b 0a 0a 20 20 20 20 20 20 69 66 20 28  ull;..      if (
20f0: 5f 65 78 69 73 74 73 29 0a 20 20 20 20 20 20 7b  _exists).      {
2100: 0a 20 20 20 20 20 20 20 20 47 75 69 64 20 67 20  .        Guid g 
2110: 3d 20 47 75 69 64 2e 4e 65 77 47 75 69 64 28 29  = Guid.NewGuid()
2120: 3b 0a 20 20 20 20 20 20 20 20 61 6c 74 4e 61 6d  ;.        altNam
2130: 65 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  e = String.Forma
2140: 74 28 22 7b 30 7d 5f 7b 31 7d 22 2c 20 4e 61 6d  t("{0}_{1}", Nam
2150: 65 2c 20 67 2e 54 6f 53 74 72 69 6e 67 28 22 4e  e, g.ToString("N
2160: 22 29 29 3b 0a 0a 20 20 20 20 20 20 20 20 69 66  "));..        if
2170: 20 28 5f 6f 6c 64 69 6e 64 65 78 65 73 2e 43 6f   (_oldindexes.Co
2180: 75 6e 74 20 3e 20 30 29 0a 20 20 20 20 20 20 20  unt > 0).       
2190: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75 69   {.          bui
21a0: 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 2d 2d 20  lder.Append("-- 
21b0: 44 72 6f 70 20 70 72 65 76 69 6f 75 73 20 69 6e  Drop previous in
21c0: 64 65 78 65 73 20 6f 6e 20 74 68 65 20 74 61 62  dexes on the tab
21d0: 6c 65 5c 72 5c 6e 22 29 3b 0a 20 20 20 20 20 20  le\r\n");.      
21e0: 20 20 20 20 66 6f 72 65 61 63 68 20 28 49 6e 64      foreach (Ind
21f0: 65 78 20 69 64 78 20 69 6e 20 5f 6f 6c 64 69 6e  ex idx in _oldin
2200: 64 65 78 65 73 29 0a 20 20 20 20 20 20 20 20 20  dexes).         
2210: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62   {.            b
2220: 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f 72  uilder.AppendFor
2230: 6d 61 74 28 22 44 52 4f 50 20 49 4e 44 45 58 20  mat("DROP INDEX 
2240: 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d 3b 5c 72 5c 6e  [{0}].[{1}];\r\n
2250: 22 2c 20 5f 63 61 74 61 6c 6f 67 2c 20 69 64 78  ", _catalog, idx
2260: 2e 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20  .Name);.        
2270: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62 75    }.          bu
2280: 69 6c 64 65 72 2e 41 70 70 65 6e 64 4c 69 6e 65  ilder.AppendLine
2290: 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20  ();.        }.. 
22a0: 20 20 20 20 20 20 20 69 66 20 28 5f 6f 6c 64 74         if (_oldt
22b0: 72 69 67 67 65 72 73 2e 43 6f 75 6e 74 20 3e 20  riggers.Count > 
22c0: 30 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  0).        {.   
22d0: 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41         builder.A
22e0: 70 70 65 6e 64 28 22 2d 2d 20 44 72 6f 70 20 70  ppend("-- Drop p
22f0: 72 65 76 69 6f 75 73 20 74 72 69 67 67 65 72 73  revious triggers
2300: 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 5c 72 5c   on the table\r\
2310: 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 66  n");.          f
2320: 6f 72 65 61 63 68 20 28 54 72 69 67 67 65 72 20  oreach (Trigger 
2330: 74 72 69 67 20 69 6e 20 5f 6f 6c 64 74 72 69 67  trig in _oldtrig
2340: 67 65 72 73 29 0a 20 20 20 20 20 20 20 20 20 20  gers).          
2350: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75  {.            bu
2360: 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d  ilder.AppendForm
2370: 61 74 28 22 44 52 4f 50 20 54 52 49 47 47 45 52  at("DROP TRIGGER
2380: 20 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d 3b 5c 72 5c   [{0}].[{1}];\r\
2390: 6e 22 2c 20 5f 63 61 74 61 6c 6f 67 2c 20 74 72  n", _catalog, tr
23a0: 69 67 2e 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ig.Name);.      
23b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
23c0: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 4c 69  builder.AppendLi
23d0: 6e 65 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ne();.        }.
23e0: 0a 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72  .        builder
23f0: 2e 41 70 70 65 6e 64 28 22 2d 2d 20 52 65 6e 61  .Append("-- Rena
2400: 6d 65 20 74 68 65 20 6f 6c 64 20 74 61 62 6c 65  me the old table
2410: 5c 72 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  \r\n");.        
2420: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f  builder.AppendFo
2430: 72 6d 61 74 28 22 41 4c 54 45 52 20 54 41 42 4c  rmat("ALTER TABL
2440: 45 20 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d 20 52 45  E [{0}].[{1}] RE
2450: 4e 41 4d 45 20 54 4f 20 5b 7b 32 7d 5d 3b 5c 72  NAME TO [{2}];\r
2460: 5c 6e 5c 72 5c 6e 22 2c 20 5f 63 61 74 61 6c 6f  \n\r\n", _catalo
2470: 67 2c 20 5f 6f 6c 64 6e 61 6d 65 2c 20 61 6c 74  g, _oldname, alt
2480: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 0a  Name);.      }..
2490: 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70        builder.Ap
24a0: 70 65 6e 64 28 22 2d 2d 20 43 72 65 61 74 65 20  pend("-- Create 
24b0: 74 68 65 20 6e 65 77 20 74 61 62 6c 65 5c 72 5c  the new table\r\
24c0: 6e 22 29 3b 0a 20 20 20 20 20 20 62 75 69 6c 64  n");.      build
24d0: 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d 61 74 28  er.AppendFormat(
24e0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 5b 7b  "CREATE TABLE [{
24f0: 30 7d 5d 2e 5b 7b 31 7d 5d 20 28 5c 72 5c 6e 22  0}].[{1}] (\r\n"
2500: 2c 20 5f 63 61 74 61 6c 6f 67 2c 20 4e 61 6d 65  , _catalog, Name
2510: 29 3b 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  );.      string 
2520: 73 65 70 61 72 61 74 6f 72 20 3d 20 22 20 20 20  separator = "   
2530: 20 22 3b 0a 0a 20 20 20 20 20 20 66 6f 72 65 61   ";..      forea
2540: 63 68 20 28 43 6f 6c 75 6d 6e 20 63 20 69 6e 20  ch (Column c in 
2550: 43 6f 6c 75 6d 6e 73 29 0a 20 20 20 20 20 20 7b  Columns).      {
2560: 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72  .        if (Str
2570: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
2580: 79 28 63 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 29 20  y(c.ColumnName) 
2590: 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20 20 20 20  == false).      
25a0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 62 75    {.          bu
25b0: 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 73 65 70  ilder.Append(sep
25c0: 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 20  arator);.       
25d0: 20 20 20 63 2e 57 72 69 74 65 53 71 6c 28 62 75     c.WriteSql(bu
25e0: 69 6c 64 65 72 29 3b 0a 20 20 20 20 20 20 20 20  ilder);.        
25f0: 20 20 73 65 70 61 72 61 74 6f 72 20 3d 20 22 2c    separator = ",
2600: 5c 72 5c 6e 20 20 20 20 22 3b 0a 20 20 20 20 20  \r\n    ";.     
2610: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20     }.      }..  
2620: 20 20 20 20 69 66 20 28 5f 6b 65 79 2e 43 6f 6c      if (_key.Col
2630: 75 6d 6e 73 2e 43 6f 75 6e 74 20 3e 20 31 29 0a  umns.Count > 1).
2640: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
2650: 73 74 72 69 6e 67 20 69 6e 6e 65 72 73 65 70 20  string innersep 
2660: 3d 20 22 22 3b 0a 20 20 20 20 20 20 20 20 62 75  = "";.        bu
2670: 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d  ilder.AppendForm
2680: 61 74 28 22 7b 30 7d 43 4f 4e 53 54 52 41 49 4e  at("{0}CONSTRAIN
2690: 54 20 5b 50 4b 5f 7b 31 7d 5d 20 50 52 49 4d 41  T [PK_{1}] PRIMA
26a0: 52 59 20 4b 45 59 20 28 22 2c 20 73 65 70 61 72  RY KEY (", separ
26b0: 61 74 6f 72 2c 20 4e 61 6d 65 29 3b 0a 20 20 20  ator, Name);.   
26c0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 49 6e       foreach (In
26d0: 64 65 78 43 6f 6c 75 6d 6e 20 63 20 69 6e 20 5f  dexColumn c in _
26e0: 6b 65 79 2e 43 6f 6c 75 6d 6e 73 29 0a 20 20 20  key.Columns).   
26f0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
2700: 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46   builder.AppendF
2710: 6f 72 6d 61 74 28 22 7b 30 7d 5b 7b 31 7d 5d 22  ormat("{0}[{1}]"
2720: 2c 20 69 6e 6e 65 72 73 65 70 2c 20 63 2e 43 6f  , innersep, c.Co
2730: 6c 75 6d 6e 29 3b 0a 20 20 20 20 20 20 20 20 20  lumn);.         
2740: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
2750: 6c 6c 4f 72 45 6d 70 74 79 28 63 2e 43 6f 6c 6c  llOrEmpty(c.Coll
2760: 61 74 65 29 20 3d 3d 20 66 61 6c 73 65 20 26 26  ate) == false &&
2770: 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28   String.Compare(
2780: 63 2e 43 6f 6c 6c 61 74 65 2c 20 22 42 49 4e 41  c.Collate, "BINA
2790: 52 59 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  RY", StringCompa
27a0: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
27b0: 6f 72 65 43 61 73 65 29 20 21 3d 20 30 29 0a 20  oreCase) != 0). 
27c0: 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64             build
27d0: 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d 61 74 28  er.AppendFormat(
27e0: 22 20 43 4f 4c 4c 41 54 45 20 7b 30 7d 22 2c 20  " COLLATE {0}", 
27f0: 63 2e 43 6f 6c 6c 61 74 65 2e 54 6f 55 70 70 65  c.Collate.ToUppe
2800: 72 49 6e 76 61 72 69 61 6e 74 28 29 29 3b 0a 0a  rInvariant());..
2810: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 2e            if (c.
2820: 53 6f 72 74 4d 6f 64 65 20 21 3d 20 43 6f 6c 75  SortMode != Colu
2830: 6d 6e 53 6f 72 74 4d 6f 64 65 2e 41 73 63 65 6e  mnSortMode.Ascen
2840: 64 69 6e 67 29 0a 20 20 20 20 20 20 20 20 20 20  ding).          
2850: 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
2860: 46 6f 72 6d 61 74 28 22 20 44 45 53 43 22 29 3b  Format(" DESC");
2870: 0a 0a 20 20 20 20 20 20 20 20 20 20 69 6e 6e 65  ..          inne
2880: 72 73 65 70 20 3d 20 22 2c 20 22 3b 0a 20 20 20  rsep = ", ";.   
2890: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62       }.        b
28a0: 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 29  uilder.Append(")
28b0: 22 29 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 20  ");..        if 
28c0: 28 5f 6b 65 79 2e 43 6f 6e 66 6c 69 63 74 20 21  (_key.Conflict !
28d0: 3d 20 43 6f 6e 66 6c 69 63 74 45 6e 75 6d 2e 41  = ConflictEnum.A
28e0: 62 6f 72 74 29 0a 20 20 20 20 20 20 20 20 20 20  bort).          
28f0: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f  builder.AppendFo
2900: 72 6d 61 74 28 22 20 4f 4e 20 43 4f 4e 46 4c 49  rmat(" ON CONFLI
2910: 43 54 20 7b 30 7d 22 2c 20 5f 6b 65 79 2e 43 6f  CT {0}", _key.Co
2920: 6e 66 6c 69 63 74 2e 54 6f 53 74 72 69 6e 67 28  nflict.ToString(
2930: 29 2e 54 6f 55 70 70 65 72 49 6e 76 61 72 69 61  ).ToUpperInvaria
2940: 6e 74 28 29 29 3b 0a 20 20 20 20 20 20 7d 0a 0a  nt());.      }..
2950: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e        for (int n
2960: 20 3d 20 30 3b 20 6e 20 3c 20 43 68 65 63 6b 2e   = 0; n < Check.
2970: 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0a 20 20 20 20  Count; n++).    
2980: 20 20 7b 0a 20 20 20 20 20 20 20 20 73 74 72 69    {.        stri
2990: 6e 67 20 63 68 65 63 6b 20 3d 20 43 68 65 63 6b  ng check = Check
29a0: 5b 6e 5d 3b 0a 0a 20 20 20 20 20 20 20 20 69 66  [n];..        if
29b0: 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
29c0: 72 45 6d 70 74 79 28 63 68 65 63 6b 29 20 3d 3d  rEmpty(check) ==
29d0: 20 74 72 75 65 29 20 63 6f 6e 74 69 6e 75 65 3b   true) continue;
29e0: 0a 20 20 20 20 20 20 20 20 53 69 6d 70 6c 65 54  .        SimpleT
29f0: 6f 6b 65 6e 69 7a 65 72 2e 53 74 72 69 6e 67 50  okenizer.StringP
2a00: 61 72 74 73 5b 5d 20 61 72 72 20 3d 20 53 69 6d  arts[] arr = Sim
2a10: 70 6c 65 54 6f 6b 65 6e 69 7a 65 72 2e 42 72 65  pleTokenizer.Bre
2a20: 61 6b 53 74 72 69 6e 67 28 63 68 65 63 6b 29 3b  akString(check);
2a30: 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e  .        for (in
2a40: 74 20 78 20 3d 20 30 3b 20 78 20 3c 20 61 72 72  t x = 0; x < arr
2a50: 2e 4c 65 6e 67 74 68 3b 20 78 2b 2b 29 0a 20 20  .Length; x++).  
2a60: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
2a70: 20 20 69 66 20 28 61 72 72 5b 78 5d 2e 64 65 70    if (arr[x].dep
2a80: 74 68 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 20  th == 0).       
2a90: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
2aa0: 20 63 68 65 63 6b 20 3d 20 53 74 72 69 6e 67 2e   check = String.
2ab0: 46 6f 72 6d 61 74 28 22 28 7b 30 7d 29 22 2c 20  Format("({0})", 
2ac0: 63 68 65 63 6b 29 3b 0a 20 20 20 20 20 20 20 20  check);.        
2ad0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
2ae0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
2af0: 0a 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72  .        builder
2b00: 2e 41 70 70 65 6e 64 28 73 65 70 61 72 61 74 6f  .Append(separato
2b10: 72 29 3b 0a 20 20 20 20 20 20 20 20 62 75 69 6c  r);.        buil
2b20: 64 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d 61 74  der.AppendFormat
2b30: 28 22 43 4f 4e 53 54 52 41 49 4e 54 20 5b 43 4b  ("CONSTRAINT [CK
2b40: 5f 7b 30 7d 5f 7b 31 7d 5d 20 43 48 45 43 4b 20  _{0}_{1}] CHECK 
2b50: 7b 32 7d 22 2c 20 4e 61 6d 65 2c 20 6e 20 2b 20  {2}", Name, n + 
2b60: 31 2c 20 63 68 65 63 6b 29 3b 0a 20 20 20 20 20  1, check);.     
2b70: 20 7d 0a 0a 20 20 20 20 20 20 4c 69 73 74 3c 46   }..      List<F
2b80: 6f 72 65 69 67 6e 4b 65 79 3e 20 6b 65 79 73 20  oreignKey> keys 
2b90: 3d 20 6e 65 77 20 4c 69 73 74 3c 46 6f 72 65 69  = new List<Forei
2ba0: 67 6e 4b 65 79 3e 28 29 3b 0a 0a 20 20 20 20 20  gnKey>();..     
2bb0: 20 66 6f 72 20 28 69 6e 74 20 78 20 3d 20 30 3b   for (int x = 0;
2bc0: 20 78 20 3c 20 46 6f 72 65 69 67 6e 4b 65 79 73   x < ForeignKeys
2bd0: 2e 43 6f 75 6e 74 3b 20 78 2b 2b 29 0a 20 20 20  .Count; x++).   
2be0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 46 6f 72     {.        For
2bf0: 65 69 67 6e 4b 65 79 20 6b 65 79 20 3d 20 46 6f  eignKey key = Fo
2c00: 72 65 69 67 6e 4b 65 79 73 5b 78 5d 3b 0a 0a 20  reignKeys[x];.. 
2c10: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
2c20: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
2c30: 6b 65 79 2e 46 72 6f 6d 2e 43 6f 6c 75 6d 6e 29  key.From.Column)
2c40: 20 3d 3d 20 74 72 75 65 20 7c 7c 20 53 74 72 69   == true || Stri
2c50: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
2c60: 28 6b 65 79 2e 46 72 6f 6d 2e 43 61 74 61 6c 6f  (key.From.Catalo
2c70: 67 29 20 3d 3d 20 74 72 75 65 20 7c 7c 0a 20 20  g) == true ||.  
2c80: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 49          String.I
2c90: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6b 65 79  sNullOrEmpty(key
2ca0: 2e 54 6f 2e 54 61 62 6c 65 29 20 3d 3d 20 74 72  .To.Table) == tr
2cb0: 75 65 20 7c 7c 20 53 74 72 69 6e 67 2e 49 73 4e  ue || String.IsN
2cc0: 75 6c 6c 4f 72 45 6d 70 74 79 28 6b 65 79 2e 54  ullOrEmpty(key.T
2cd0: 6f 2e 43 6f 6c 75 6d 6e 29 20 3d 3d 20 74 72 75  o.Column) == tru
2ce0: 65 29 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  e).          con
2cf0: 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20 20 20 20  tinue;..        
2d00: 69 66 20 28 6b 65 79 73 2e 43 6f 75 6e 74 20 3e  if (keys.Count >
2d10: 20 30 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20   0).        {.  
2d20: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 73          if (keys
2d30: 5b 30 5d 2e 4e 61 6d 65 20 3d 3d 20 6b 65 79 2e  [0].Name == key.
2d40: 4e 61 6d 65 20 26 26 20 6b 65 79 73 5b 30 5d 2e  Name && keys[0].
2d50: 54 6f 2e 43 61 74 61 6c 6f 67 20 3d 3d 20 6b 65  To.Catalog == ke
2d60: 79 2e 54 6f 2e 43 61 74 61 6c 6f 67 20 26 26 20  y.To.Catalog && 
2d70: 6b 65 79 73 5b 30 5d 2e 54 6f 2e 54 61 62 6c 65  keys[0].To.Table
2d80: 20 3d 3d 20 6b 65 79 2e 54 6f 2e 54 61 62 6c 65   == key.To.Table
2d90: 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20  ).          {.  
2da0: 20 20 20 20 20 20 20 20 20 20 6b 65 79 73 2e 41            keys.A
2db0: 64 64 28 6b 65 79 29 3b 0a 20 20 20 20 20 20 20  dd(key);.       
2dc0: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20       continue;. 
2dd0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
2de0: 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70       builder.App
2df0: 65 6e 64 28 73 65 70 61 72 61 74 6f 72 29 3b 0a  end(separator);.
2e00: 20 20 20 20 20 20 20 20 20 20 57 72 69 74 65 46            WriteF
2e10: 4b 65 79 73 28 6b 65 79 73 2c 20 62 75 69 6c 64  Keys(keys, build
2e20: 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6b  er);.          k
2e30: 65 79 73 2e 43 6c 65 61 72 28 29 3b 0a 20 20 20  eys.Clear();.   
2e40: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6b       }.        k
2e50: 65 79 73 2e 41 64 64 28 6b 65 79 29 3b 0a 20 20  eys.Add(key);.  
2e60: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 20      }..      if 
2e70: 28 6b 65 79 73 2e 43 6f 75 6e 74 20 3e 20 30 29  (keys.Count > 0)
2e80: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
2e90: 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28   builder.Append(
2ea0: 73 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20  separator);.    
2eb0: 20 20 20 20 57 72 69 74 65 46 4b 65 79 73 28 6b      WriteFKeys(k
2ec0: 65 79 73 2c 20 62 75 69 6c 64 65 72 29 3b 0a 20  eys, builder);. 
2ed0: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 62 75       }..      bu
2ee0: 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 5c 72  ilder.Append("\r
2ef0: 5c 6e 29 3b 5c 72 5c 6e 22 29 3b 0a 0a 20 20 20  \n);\r\n");..   
2f00: 20 20 20 2f 2f 20 52 65 62 75 69 6c 64 69 6e 67     // Rebuilding
2f10: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62   an existing tab
2f20: 6c 65 0a 20 20 20 20 20 20 69 66 20 28 61 6c 74  le.      if (alt
2f30: 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0a 20 20  Name != null).  
2f40: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 73 65      {.        se
2f50: 70 61 72 61 74 6f 72 20 3d 20 22 22 3b 0a 20 20  parator = "";.  
2f60: 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70        builder.Ap
2f70: 70 65 6e 64 28 22 5c 72 5c 6e 2d 2d 20 43 6f 70  pend("\r\n-- Cop
2f80: 79 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  y the contents o
2f90: 66 20 74 68 65 20 6f 6c 64 20 74 61 62 6c 65 20  f the old table 
2fa0: 69 6e 74 6f 20 74 68 65 20 6e 65 77 20 74 61 62  into the new tab
2fb0: 6c 65 5c 72 5c 6e 22 29 3b 0a 20 20 20 20 20 20  le\r\n");.      
2fc0: 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
2fd0: 46 6f 72 6d 61 74 28 22 49 4e 53 45 52 54 20 49  Format("INSERT I
2fe0: 4e 54 4f 20 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d 20  NTO [{0}].[{1}] 
2ff0: 28 22 2c 20 5f 63 61 74 61 6c 6f 67 2c 20 4e 61  (", _catalog, Na
3000: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  me);.        for
3010: 65 61 63 68 20 28 43 6f 6c 75 6d 6e 20 63 20 69  each (Column c i
3020: 6e 20 43 6f 6c 75 6d 6e 73 29 0a 20 20 20 20 20  n Columns).     
3030: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69     {.          i
3040: 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
3050: 4f 72 45 6d 70 74 79 28 63 2e 4f 72 69 67 69 6e  OrEmpty(c.Origin
3060: 61 6c 4e 61 6d 65 29 20 3d 3d 20 66 61 6c 73 65  alName) == false
3070: 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20  ).          {.  
3080: 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65            builde
3090: 72 2e 41 70 70 65 6e 64 46 6f 72 6d 61 74 28 22  r.AppendFormat("
30a0: 7b 31 7d 5b 7b 30 7d 5d 22 2c 20 63 2e 43 6f 6c  {1}[{0}]", c.Col
30b0: 75 6d 6e 4e 61 6d 65 2c 20 73 65 70 61 72 61 74  umnName, separat
30c0: 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  or);.           
30d0: 20 73 65 70 61 72 61 74 6f 72 20 3d 20 22 2c 20   separator = ", 
30e0: 22 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  ";.          }. 
30f0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3100: 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28   builder.Append(
3110: 22 29 5c 72 5c 6e 20 20 53 45 4c 45 43 54 20 22  ")\r\n  SELECT "
3120: 29 3b 0a 20 20 20 20 20 20 20 20 73 65 70 61 72  );.        separ
3130: 61 74 6f 72 20 3d 20 22 22 3b 0a 20 20 20 20 20  ator = "";.     
3140: 20 20 20 66 6f 72 65 61 63 68 20 28 43 6f 6c 75     foreach (Colu
3150: 6d 6e 20 63 20 69 6e 20 43 6f 6c 75 6d 6e 73 29  mn c in Columns)
3160: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
3170: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
3180: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 2e  IsNullOrEmpty(c.
3190: 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 29 20 3d 3d  OriginalName) ==
31a0: 20 66 61 6c 73 65 29 0a 20 20 20 20 20 20 20 20   false).        
31b0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
31c0: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f  builder.AppendFo
31d0: 72 6d 61 74 28 22 7b 31 7d 5b 7b 30 7d 5d 22 2c  rmat("{1}[{0}]",
31e0: 20 63 2e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 2c   c.OriginalName,
31f0: 20 73 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20   separator);.   
3200: 20 20 20 20 20 20 20 20 20 73 65 70 61 72 61 74           separat
3210: 6f 72 20 3d 20 22 2c 20 22 3b 0a 20 20 20 20 20  or = ", ";.     
3220: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
3230: 0a 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72  .        builder
3240: 2e 41 70 70 65 6e 64 46 6f 72 6d 61 74 28 22 5c  .AppendFormat("\
3250: 72 5c 6e 20 20 46 52 4f 4d 20 5b 7b 30 7d 5d 2e  r\n  FROM [{0}].
3260: 5b 7b 31 7d 5d 3b 5c 72 5c 6e 5c 72 5c 6e 22 2c  [{1}];\r\n\r\n",
3270: 20 5f 63 61 74 61 6c 6f 67 2c 20 61 6c 74 4e 61   _catalog, altNa
3280: 6d 65 29 3b 0a 0a 20 20 20 20 20 20 20 20 62 75  me);..        bu
3290: 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 2d 2d  ilder.Append("--
32a0: 20 44 72 6f 70 20 74 68 65 20 6f 6c 64 20 74 61   Drop the old ta
32b0: 62 6c 65 5c 72 5c 6e 22 29 3b 0a 20 20 20 20 20  ble\r\n");.     
32c0: 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
32d0: 64 46 6f 72 6d 61 74 28 22 44 52 4f 50 20 54 41  dFormat("DROP TA
32e0: 42 4c 45 20 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d 3b  BLE [{0}].[{1}];
32f0: 5c 72 5c 6e 22 2c 20 5f 63 61 74 61 6c 6f 67 2c  \r\n", _catalog,
3300: 20 61 6c 74 4e 61 6d 65 29 3b 0a 20 20 20 20 20   altName);.     
3310: 20 7d 0a 0a 20 20 20 20 20 20 73 65 70 61 72 61   }..      separa
3320: 74 6f 72 20 3d 20 22 5c 72 5c 6e 22 3b 0a 20 20  tor = "\r\n";.  
3330: 20 20 20 20 69 66 20 28 5f 69 6e 64 65 78 65 73      if (_indexes
3340: 2e 43 6f 75 6e 74 20 3e 20 30 29 0a 20 20 20 20  .Count > 0).    
3350: 20 20 7b 0a 20 20 20 20 20 20 20 20 62 75 69 6c    {.        buil
3360: 64 65 72 2e 41 70 70 65 6e 64 28 22 5c 72 5c 6e  der.Append("\r\n
3370: 2d 2d 20 43 72 65 61 74 65 20 74 68 65 20 6e 65  -- Create the ne
3380: 77 20 69 6e 64 65 78 65 73 22 29 3b 0a 20 20 20  w indexes");.   
3390: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 49 6e       foreach (In
33a0: 64 65 78 20 69 64 78 20 69 6e 20 5f 69 6e 64 65  dex idx in _inde
33b0: 78 65 73 29 0a 20 20 20 20 20 20 20 20 7b 0a 20  xes).        {. 
33c0: 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72           builder
33d0: 2e 41 70 70 65 6e 64 28 73 65 70 61 72 61 74 6f  .Append(separato
33e0: 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 64  r);.          id
33f0: 78 2e 57 72 69 74 65 53 71 6c 28 62 75 69 6c 64  x.WriteSql(build
3400: 65 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  er);.        }. 
3410: 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41         builder.A
3420: 70 70 65 6e 64 4c 69 6e 65 28 29 3b 0a 20 20 20  ppendLine();.   
3430: 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 20 28     }..      if (
3440: 5f 74 72 69 67 67 65 72 73 2e 43 6f 75 6e 74 20  _triggers.Count 
3450: 3e 20 30 29 0a 20 20 20 20 20 20 7b 0a 20 20 20  > 0).      {.   
3460: 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70       builder.App
3470: 65 6e 64 28 22 5c 72 5c 6e 2d 2d 20 43 72 65 61  end("\r\n-- Crea
3480: 74 65 20 74 68 65 20 6e 65 77 20 74 72 69 67 67  te the new trigg
3490: 65 72 73 22 29 3b 0a 20 20 20 20 20 20 20 20 66  ers");.        f
34a0: 6f 72 65 61 63 68 20 28 54 72 69 67 67 65 72 20  oreach (Trigger 
34b0: 74 72 69 67 20 69 6e 20 5f 74 72 69 67 67 65 72  trig in _trigger
34c0: 73 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  s).        {.   
34d0: 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41         builder.A
34e0: 70 70 65 6e 64 28 73 65 70 61 72 61 74 6f 72 29  ppend(separator)
34f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 74 72 69 67  ;.          trig
3500: 2e 57 72 69 74 65 53 71 6c 28 62 75 69 6c 64 65  .WriteSql(builde
3510: 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 65  r);.          se
3520: 70 61 72 61 74 6f 72 20 3d 20 22 5c 72 5c 6e 22  parator = "\r\n"
3530: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
3540: 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65      builder.Appe
3550: 6e 64 4c 69 6e 65 28 29 3b 0a 20 20 20 20 20 20  ndLine();.      
3560: 7d 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  }..      return 
3570: 62 75 69 6c 64 65 72 2e 54 6f 53 74 72 69 6e 67  builder.ToString
3580: 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  ();.    }..    p
3590: 72 69 76 61 74 65 20 76 6f 69 64 20 57 72 69 74  rivate void Writ
35a0: 65 46 4b 65 79 73 28 4c 69 73 74 3c 46 6f 72 65  eFKeys(List<Fore
35b0: 69 67 6e 4b 65 79 3e 20 6b 65 79 73 2c 20 53 74  ignKey> keys, St
35c0: 72 69 6e 67 42 75 69 6c 64 65 72 20 62 75 69 6c  ringBuilder buil
35d0: 64 65 72 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  der).    {.     
35e0: 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46   builder.AppendF
35f0: 6f 72 6d 61 74 28 22 43 4f 4e 53 54 52 41 49 4e  ormat("CONSTRAIN
3600: 54 20 5b 7b 30 7d 5d 20 46 4f 52 45 49 47 4e 20  T [{0}] FOREIGN 
3610: 4b 45 59 20 28 22 2c 20 6b 65 79 73 5b 30 5d 2e  KEY (", keys[0].
3620: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 73 74 72  Name);.      str
3630: 69 6e 67 20 73 65 70 61 72 61 74 6f 72 20 3d 20  ing separator = 
3640: 22 22 3b 0a 0a 20 20 20 20 20 20 66 6f 72 65 61  "";..      forea
3650: 63 68 20 28 46 6f 72 65 69 67 6e 4b 65 79 20 6b  ch (ForeignKey k
3660: 65 79 20 69 6e 20 6b 65 79 73 29 0a 20 20 20 20  ey in keys).    
3670: 20 20 7b 0a 20 20 20 20 20 20 20 20 62 75 69 6c    {.        buil
3680: 64 65 72 2e 41 70 70 65 6e 64 46 6f 72 6d 61 74  der.AppendFormat
3690: 28 22 7b 30 7d 5b 7b 31 7d 5d 22 2c 20 73 65 70  ("{0}[{1}]", sep
36a0: 61 72 61 74 6f 72 2c 20 6b 65 79 2e 46 72 6f 6d  arator, key.From
36b0: 2e 43 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20 20 20  .Column);.      
36c0: 20 20 73 65 70 61 72 61 74 6f 72 20 3d 20 22 2c    separator = ",
36d0: 20 22 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20   ";.      }..   
36e0: 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
36f0: 64 46 6f 72 6d 61 74 28 22 29 20 52 45 46 45 52  dFormat(") REFER
3700: 45 4e 43 45 53 20 5b 7b 30 7d 5d 20 28 22 2c 20  ENCES [{0}] (", 
3710: 6b 65 79 73 5b 30 5d 2e 54 6f 2e 54 61 62 6c 65  keys[0].To.Table
3720: 29 3b 0a 0a 20 20 20 20 20 20 73 65 70 61 72 61  );..      separa
3730: 74 6f 72 20 3d 20 22 22 3b 0a 20 20 20 20 20 20  tor = "";.      
3740: 66 6f 72 65 61 63 68 20 28 46 6f 72 65 69 67 6e  foreach (Foreign
3750: 4b 65 79 20 6b 65 79 20 69 6e 20 6b 65 79 73 29  Key key in keys)
3760: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
3770: 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46   builder.AppendF
3780: 6f 72 6d 61 74 28 22 7b 30 7d 5b 7b 31 7d 5d 22  ormat("{0}[{1}]"
3790: 2c 20 73 65 70 61 72 61 74 6f 72 2c 20 6b 65 79  , separator, key
37a0: 2e 54 6f 2e 43 6f 6c 75 6d 6e 29 3b 0a 20 20 20  .To.Column);.   
37b0: 20 20 20 20 20 73 65 70 61 72 61 74 6f 72 20 3d       separator =
37c0: 20 22 2c 20 22 3b 0a 20 20 20 20 20 20 7d 0a 20   ", ";.      }. 
37d0: 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70       builder.App
37e0: 65 6e 64 28 22 29 22 29 3b 0a 20 20 20 20 7d 0a  end(")");.    }.
37f0: 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28  .    [Browsable(
3800: 66 61 6c 73 65 29 5d 0a 20 20 20 20 70 75 62 6c  false)].    publ
3810: 69 63 20 6f 76 65 72 72 69 64 65 20 56 69 65 77  ic override View
3820: 54 61 62 6c 65 42 61 73 65 20 44 65 73 69 67 6e  TableBase Design
3830: 54 61 62 6c 65 0a 20 20 20 20 7b 0a 20 20 20 20  Table.    {.    
3840: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74    get { return t
3850: 68 69 73 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20  his; }.    }..  
3860: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
3870: 65 20 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 47  e DbConnection G
3880: 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 29 0a 20  etConnection(). 
3890: 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72     {.      retur
38a0: 6e 20 5f 63 6f 6e 6e 65 63 74 69 6f 6e 3b 0a 20  n _connection;. 
38b0: 20 20 20 7d 0a 0a 20 20 20 20 23 72 65 67 69 6f     }..    #regio
38c0: 6e 20 49 43 75 73 74 6f 6d 54 79 70 65 44 65 73  n ICustomTypeDes
38d0: 63 72 69 70 74 6f 72 20 4d 65 6d 62 65 72 73 0a  criptor Members.
38e0: 0a 20 20 20 20 41 74 74 72 69 62 75 74 65 43 6f  .    AttributeCo
38f0: 6c 6c 65 63 74 69 6f 6e 20 49 43 75 73 74 6f 6d  llection ICustom
3900: 54 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47  TypeDescriptor.G
3910: 65 74 41 74 74 72 69 62 75 74 65 73 28 29 0a 20  etAttributes(). 
3920: 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72     {.      retur
3930: 6e 20 54 79 70 65 44 65 73 63 72 69 70 74 6f 72  n TypeDescriptor
3940: 2e 47 65 74 41 74 74 72 69 62 75 74 65 73 28 47  .GetAttributes(G
3950: 65 74 54 79 70 65 28 29 29 3b 0a 20 20 20 20 7d  etType());.    }
3960: 0a 0a 20 20 20 20 73 74 72 69 6e 67 20 49 43 75  ..    string ICu
3970: 73 74 6f 6d 54 79 70 65 44 65 73 63 72 69 70 74  stomTypeDescript
3980: 6f 72 2e 47 65 74 43 6c 61 73 73 4e 61 6d 65 28  or.GetClassName(
3990: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
39a0: 74 75 72 6e 20 22 54 61 62 6c 65 20 44 65 73 69  turn "Table Desi
39b0: 67 6e 22 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  gn";.    }..    
39c0: 73 74 72 69 6e 67 20 49 43 75 73 74 6f 6d 54 79  string ICustomTy
39d0: 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74  peDescriptor.Get
39e0: 43 6f 6d 70 6f 6e 65 6e 74 4e 61 6d 65 28 29 0a  ComponentName().
39f0: 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75      {.      retu
3a00: 72 6e 20 54 6f 53 74 72 69 6e 67 28 29 3b 0a 20  rn ToString();. 
3a10: 20 20 20 7d 0a 0a 20 20 20 20 54 79 70 65 43 6f     }..    TypeCo
3a20: 6e 76 65 72 74 65 72 20 49 43 75 73 74 6f 6d 54  nverter ICustomT
3a30: 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65  ypeDescriptor.Ge
3a40: 74 43 6f 6e 76 65 72 74 65 72 28 29 0a 20 20 20  tConverter().   
3a50: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
3a60: 54 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47  TypeDescriptor.G
3a70: 65 74 43 6f 6e 76 65 72 74 65 72 28 47 65 74 54  etConverter(GetT
3a80: 79 70 65 28 29 29 3b 0a 20 20 20 20 7d 0a 0a 20  ype());.    }.. 
3a90: 20 20 20 45 76 65 6e 74 44 65 73 63 72 69 70 74     EventDescript
3aa0: 6f 72 20 49 43 75 73 74 6f 6d 54 79 70 65 44 65  or ICustomTypeDe
3ab0: 73 63 72 69 70 74 6f 72 2e 47 65 74 44 65 66 61  scriptor.GetDefa
3ac0: 75 6c 74 45 76 65 6e 74 28 29 0a 20 20 20 20 7b  ultEvent().    {
3ad0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79  .      return Ty
3ae0: 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74  peDescriptor.Get
3af0: 44 65 66 61 75 6c 74 45 76 65 6e 74 28 47 65 74  DefaultEvent(Get
3b00: 54 79 70 65 28 29 29 3b 0a 20 20 20 20 7d 0a 0a  Type());.    }..
3b10: 20 20 20 20 50 72 6f 70 65 72 74 79 44 65 73 63      PropertyDesc
3b20: 72 69 70 74 6f 72 20 49 43 75 73 74 6f 6d 54 79  riptor ICustomTy
3b30: 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74  peDescriptor.Get
3b40: 44 65 66 61 75 6c 74 50 72 6f 70 65 72 74 79 28  DefaultProperty(
3b50: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
3b60: 74 75 72 6e 20 54 79 70 65 44 65 73 63 72 69 70  turn TypeDescrip
3b70: 74 6f 72 2e 47 65 74 44 65 66 61 75 6c 74 50 72  tor.GetDefaultPr
3b80: 6f 70 65 72 74 79 28 47 65 74 54 79 70 65 28 29  operty(GetType()
3b90: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6f 62  );.    }..    ob
3ba0: 6a 65 63 74 20 49 43 75 73 74 6f 6d 54 79 70 65  ject ICustomType
3bb0: 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74 45 64  Descriptor.GetEd
3bc0: 69 74 6f 72 28 54 79 70 65 20 65 64 69 74 6f 72  itor(Type editor
3bd0: 42 61 73 65 54 79 70 65 29 0a 20 20 20 20 7b 0a  BaseType).    {.
3be0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79 70        return Typ
3bf0: 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74 45  eDescriptor.GetE
3c00: 64 69 74 6f 72 28 47 65 74 54 79 70 65 28 29 2c  ditor(GetType(),
3c10: 20 65 64 69 74 6f 72 42 61 73 65 54 79 70 65 29   editorBaseType)
3c20: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 45 76 65  ;.    }..    Eve
3c30: 6e 74 44 65 73 63 72 69 70 74 6f 72 43 6f 6c 6c  ntDescriptorColl
3c40: 65 63 74 69 6f 6e 20 49 43 75 73 74 6f 6d 54 79  ection ICustomTy
3c50: 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74  peDescriptor.Get
3c60: 45 76 65 6e 74 73 28 41 74 74 72 69 62 75 74 65  Events(Attribute
3c70: 5b 5d 20 61 74 74 72 69 62 75 74 65 73 29 0a 20  [] attributes). 
3c80: 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72     {.      retur
3c90: 6e 20 54 79 70 65 44 65 73 63 72 69 70 74 6f 72  n TypeDescriptor
3ca0: 2e 47 65 74 45 76 65 6e 74 73 28 47 65 74 54 79  .GetEvents(GetTy
3cb0: 70 65 28 29 2c 20 61 74 74 72 69 62 75 74 65 73  pe(), attributes
3cc0: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 45 76  );.    }..    Ev
3cd0: 65 6e 74 44 65 73 63 72 69 70 74 6f 72 43 6f 6c  entDescriptorCol
3ce0: 6c 65 63 74 69 6f 6e 20 49 43 75 73 74 6f 6d 54  lection ICustomT
3cf0: 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65  ypeDescriptor.Ge
3d00: 74 45 76 65 6e 74 73 28 29 0a 20 20 20 20 7b 0a  tEvents().    {.
3d10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79 70        return Typ
3d20: 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74 45  eDescriptor.GetE
3d30: 76 65 6e 74 73 28 47 65 74 54 79 70 65 28 29 29  vents(GetType())
3d40: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 50 72 6f  ;.    }..    Pro
3d50: 70 65 72 74 79 44 65 73 63 72 69 70 74 6f 72 43  pertyDescriptorC
3d60: 6f 6c 6c 65 63 74 69 6f 6e 20 49 43 75 73 74 6f  ollection ICusto
3d70: 6d 54 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e  mTypeDescriptor.
3d80: 47 65 74 50 72 6f 70 65 72 74 69 65 73 28 41 74  GetProperties(At
3d90: 74 72 69 62 75 74 65 5b 5d 20 61 74 74 72 69 62  tribute[] attrib
3da0: 75 74 65 73 29 0a 20 20 20 20 7b 0a 20 20 20 20  utes).    {.    
3db0: 20 20 72 65 74 75 72 6e 20 54 79 70 65 44 65 73    return TypeDes
3dc0: 63 72 69 70 74 6f 72 2e 47 65 74 50 72 6f 70 65  criptor.GetPrope
3dd0: 72 74 69 65 73 28 47 65 74 54 79 70 65 28 29 2c  rties(GetType(),
3de0: 20 61 74 74 72 69 62 75 74 65 73 29 3b 0a 20 20   attributes);.  
3df0: 20 20 7d 0a 0a 20 20 20 20 50 72 6f 70 65 72 74    }..    Propert
3e00: 79 44 65 73 63 72 69 70 74 6f 72 43 6f 6c 6c 65  yDescriptorColle
3e10: 63 74 69 6f 6e 20 49 43 75 73 74 6f 6d 54 79 70  ction ICustomTyp
3e20: 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74 50  eDescriptor.GetP
3e30: 72 6f 70 65 72 74 69 65 73 28 29 0a 20 20 20 20  roperties().    
3e40: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54  {.      return T
3e50: 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65  ypeDescriptor.Ge
3e60: 74 50 72 6f 70 65 72 74 69 65 73 28 47 65 74 54  tProperties(GetT
3e70: 79 70 65 28 29 29 3b 0a 20 20 20 20 7d 0a 0a 20  ype());.    }.. 
3e80: 20 20 20 6f 62 6a 65 63 74 20 49 43 75 73 74 6f     object ICusto
3e90: 6d 54 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e  mTypeDescriptor.
3ea0: 47 65 74 50 72 6f 70 65 72 74 79 4f 77 6e 65 72  GetPropertyOwner
3eb0: 28 50 72 6f 70 65 72 74 79 44 65 73 63 72 69 70  (PropertyDescrip
3ec0: 74 6f 72 20 70 64 29 0a 20 20 20 20 7b 0a 20 20  tor pd).    {.  
3ed0: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
3ee0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 65 6e 64  .    }..    #end
3ef0: 72 65 67 69 6f 6e 0a 20 20 7d 0a 0a 20 20 69 6e  region.  }..  in
3f00: 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63 65  ternal interface
3f10: 20 49 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f 6e   IHaveConnection
3f20: 0a 20 20 7b 0a 20 20 20 20 44 62 43 6f 6e 6e 65  .  {.    DbConne
3f30: 63 74 69 6f 6e 20 47 65 74 43 6f 6e 6e 65 63 74  ction GetConnect
3f40: 69 6f 6e 28 29 3b 0a 20 20 20 20 5b 42 72 6f 77  ion();.    [Brow
3f50: 73 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20  sable(false)].  
3f60: 20 20 56 69 65 77 54 61 62 6c 65 42 61 73 65 20    ViewTableBase 
3f70: 44 65 73 69 67 6e 54 61 62 6c 65 20 7b 20 67 65  DesignTable { ge
3f80: 74 3b 20 7d 0a 20 20 7d 0a 0a 20 20 69 6e 74 65  t; }.  }..  inte
3f90: 72 6e 61 6c 20 69 6e 74 65 72 66 61 63 65 20 49  rnal interface I
3fa0: 48 61 76 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 63  HaveConnectionSc
3fb0: 6f 70 65 20 3a 20 49 48 61 76 65 43 6f 6e 6e 65  ope : IHaveConne
3fc0: 63 74 69 6f 6e 0a 20 20 7b 0a 20 20 20 20 5b 42  ction.  {.    [B
3fd0: 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d  rowsable(false)]
3fe0: 0a 20 20 20 20 73 74 72 69 6e 67 20 43 61 74 61  .    string Cata
3ff0: 6c 6f 67 53 63 6f 70 65 20 7b 20 67 65 74 3b 20  logScope { get; 
4000: 7d 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65  }.    [Browsable
4010: 28 66 61 6c 73 65 29 5d 0a 20 20 20 20 73 74 72  (false)].    str
4020: 69 6e 67 20 54 61 62 6c 65 53 63 6f 70 65 20 7b  ing TableScope {
4030: 20 67 65 74 3b 20 7d 0a 20 20 7d 0a 0a 20 20 69   get; }.  }..  i
4040: 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 43 6f  nternal class Co
4050: 6c 6c 61 74 69 6f 6e 54 79 70 65 45 64 69 74 6f  llationTypeEdito
4060: 72 20 3a 20 4f 62 6a 65 63 74 53 65 6c 65 63 74  r : ObjectSelect
4070: 6f 72 45 64 69 74 6f 72 0a 20 20 7b 0a 20 20 20  orEditor.  {.   
4080: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
4090: 20 55 49 54 79 70 65 45 64 69 74 6f 72 45 64 69   UITypeEditorEdi
40a0: 74 53 74 79 6c 65 20 47 65 74 45 64 69 74 53 74  tStyle GetEditSt
40b0: 79 6c 65 28 49 54 79 70 65 44 65 73 63 72 69 70  yle(ITypeDescrip
40c0: 74 6f 72 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65  torContext conte
40d0: 78 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  xt).    {.      
40e0: 72 65 74 75 72 6e 20 55 49 54 79 70 65 45 64 69  return UITypeEdi
40f0: 74 6f 72 45 64 69 74 53 74 79 6c 65 2e 44 72 6f  torEditStyle.Dro
4100: 70 44 6f 77 6e 3b 0a 20 20 20 20 7d 0a 0a 20 20  pDown;.    }..  
4110: 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72    protected over
4120: 72 69 64 65 20 76 6f 69 64 20 46 69 6c 6c 54 72  ride void FillTr
4130: 65 65 57 69 74 68 44 61 74 61 28 53 65 6c 65 63  eeWithData(Selec
4140: 74 6f 72 20 73 65 6c 65 63 74 6f 72 2c 20 49 54  tor selector, IT
4150: 79 70 65 44 65 73 63 72 69 70 74 6f 72 43 6f 6e  ypeDescriptorCon
4160: 74 65 78 74 20 63 6f 6e 74 65 78 74 2c 20 49 53  text context, IS
4170: 65 72 76 69 63 65 50 72 6f 76 69 64 65 72 20 70  erviceProvider p
4180: 72 6f 76 69 64 65 72 29 0a 20 20 20 20 7b 0a 20  rovider).    {. 
4190: 20 20 20 20 20 62 61 73 65 2e 46 69 6c 6c 54 72       base.FillTr
41a0: 65 65 57 69 74 68 44 61 74 61 28 73 65 6c 65 63  eeWithData(selec
41b0: 74 6f 72 2c 20 63 6f 6e 74 65 78 74 2c 20 70 72  tor, context, pr
41c0: 6f 76 69 64 65 72 29 3b 0a 20 20 20 20 20 20 73  ovider);.      s
41d0: 65 6c 65 63 74 6f 72 2e 41 64 64 4e 6f 64 65 28  elector.AddNode(
41e0: 22 42 49 4e 41 52 59 22 2c 20 22 42 49 4e 41 52  "BINARY", "BINAR
41f0: 59 22 2c 20 6e 75 6c 6c 29 3b 0a 20 20 20 20 20  Y", null);.     
4200: 20 73 65 6c 65 63 74 6f 72 2e 41 64 64 4e 6f 64   selector.AddNod
4210: 65 28 22 4e 4f 43 41 53 45 22 2c 20 22 4e 4f 43  e("NOCASE", "NOC
4220: 41 53 45 22 2c 20 6e 75 6c 6c 29 3b 0a 20 20 20  ASE", null);.   
4230: 20 7d 0a 20 20 7d 0a 0a 20 20 69 6e 74 65 72 6e   }.  }..  intern
4240: 61 6c 20 63 6c 61 73 73 20 43 61 74 61 6c 6f 67  al class Catalog
4250: 54 79 70 65 45 64 69 74 6f 72 20 3a 20 4f 62 6a  TypeEditor : Obj
4260: 65 63 74 53 65 6c 65 63 74 6f 72 45 64 69 74 6f  ectSelectorEdito
4270: 72 0a 20 20 7b 0a 20 20 20 20 70 75 62 6c 69 63  r.  {.    public
4280: 20 6f 76 65 72 72 69 64 65 20 55 49 54 79 70 65   override UIType
4290: 45 64 69 74 6f 72 45 64 69 74 53 74 79 6c 65 20  EditorEditStyle 
42a0: 47 65 74 45 64 69 74 53 74 79 6c 65 28 49 54 79  GetEditStyle(ITy
42b0: 70 65 44 65 73 63 72 69 70 74 6f 72 43 6f 6e 74  peDescriptorCont
42c0: 65 78 74 20 63 6f 6e 74 65 78 74 29 0a 20 20 20  ext context).   
42d0: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
42e0: 55 49 54 79 70 65 45 64 69 74 6f 72 45 64 69 74  UITypeEditorEdit
42f0: 53 74 79 6c 65 2e 44 72 6f 70 44 6f 77 6e 3b 0a  Style.DropDown;.
4300: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 74 65      }..    prote
4310: 63 74 65 64 20 6f 76 65 72 72 69 64 65 20 76 6f  cted override vo
4320: 69 64 20 46 69 6c 6c 54 72 65 65 57 69 74 68 44  id FillTreeWithD
4330: 61 74 61 28 53 65 6c 65 63 74 6f 72 20 73 65 6c  ata(Selector sel
4340: 65 63 74 6f 72 2c 20 49 54 79 70 65 44 65 73 63  ector, ITypeDesc
4350: 72 69 70 74 6f 72 43 6f 6e 74 65 78 74 20 63 6f  riptorContext co
4360: 6e 74 65 78 74 2c 20 49 53 65 72 76 69 63 65 50  ntext, IServiceP
4370: 72 6f 76 69 64 65 72 20 70 72 6f 76 69 64 65 72  rovider provider
4380: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 62 61  ).    {.      ba
4390: 73 65 2e 46 69 6c 6c 54 72 65 65 57 69 74 68 44  se.FillTreeWithD
43a0: 61 74 61 28 73 65 6c 65 63 74 6f 72 2c 20 63 6f  ata(selector, co
43b0: 6e 74 65 78 74 2c 20 70 72 6f 76 69 64 65 72 29  ntext, provider)
43c0: 3b 0a 20 20 20 20 20 20 49 48 61 76 65 43 6f 6e  ;.      IHaveCon
43d0: 6e 65 63 74 69 6f 6e 20 73 6f 75 72 63 65 20 3d  nection source =
43e0: 20 63 6f 6e 74 65 78 74 2e 49 6e 73 74 61 6e 63   context.Instanc
43f0: 65 20 61 73 20 49 48 61 76 65 43 6f 6e 6e 65 63  e as IHaveConnec
4400: 74 69 6f 6e 3b 0a 0a 20 20 20 20 20 20 69 66 20  tion;..      if 
4410: 28 73 6f 75 72 63 65 20 3d 3d 20 6e 75 6c 6c 29  (source == null)
4420: 20 72 65 74 75 72 6e 3b 0a 0a 20 20 20 20 20 20   return;..      
4430: 75 73 69 6e 67 20 28 44 61 74 61 54 61 62 6c 65  using (DataTable
4440: 20 74 61 62 6c 65 20 3d 20 73 6f 75 72 63 65 2e   table = source.
4450: 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 29 2e  GetConnection().
4460: 47 65 74 53 63 68 65 6d 61 28 22 43 61 74 61 6c  GetSchema("Catal
4470: 6f 67 73 22 29 29 0a 20 20 20 20 20 20 7b 0a 20  ogs")).      {. 
4480: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
4490: 44 61 74 61 52 6f 77 20 72 6f 77 20 69 6e 20 74  DataRow row in t
44a0: 61 62 6c 65 2e 52 6f 77 73 29 0a 20 20 20 20 20  able.Rows).     
44b0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 73     {.          s
44c0: 65 6c 65 63 74 6f 72 2e 41 64 64 4e 6f 64 65 28  elector.AddNode(
44d0: 72 6f 77 5b 30 5d 2e 54 6f 53 74 72 69 6e 67 28  row[0].ToString(
44e0: 29 2c 20 72 6f 77 5b 30 5d 2c 20 6e 75 6c 6c 29  ), row[0], null)
44f0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
4500: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a    }.    }.  }.}.