System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact cb0ff466f32cd083f09263415a0cfb2d605b810d:


0000: ef bb bf 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .../************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20  ************. * 
0040: 41 44 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61  ADO.NET 2.0 Data
0050: 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51   Provider for SQ
0060: 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58  Lite Version 3.X
0070: 0a 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52  . * Written by R
0080: 6f 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72  obert Simpson (r
0090: 6f 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c  obert@blackcastl
00a0: 65 73 6f 66 74 2e 63 6f 6d 29 0a 20 2a 20 0a 20  esoft.com). * . 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a   risk!. ********
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2f 0a 0a 6e 61 6d 65 73 70 61 63 65 20 53 51 4c  /..namespace SQL
0130: 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 44 65 73  ite.Designer.Des
0140: 69 67 6e 0a 7b 0a 20 20 75 73 69 6e 67 20 53 79  ign.{.  using Sy
0150: 73 74 65 6d 3b 0a 20 20 75 73 69 6e 67 20 53 79  stem;.  using Sy
0160: 73 74 65 6d 2e 44 61 74 61 2e 43 6f 6d 6d 6f 6e  stem.Data.Common
0170: 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ;.  using System
0180: 2e 43 6f 6d 70 6f 6e 65 6e 74 4d 6f 64 65 6c 2e  .ComponentModel.
0190: 44 65 73 69 67 6e 3b 0a 20 20 75 73 69 6e 67 20  Design;.  using 
01a0: 53 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e 65 6e 74  System.Component
01b0: 4d 6f 64 65 6c 3b 0a 20 20 75 73 69 6e 67 20 53  Model;.  using S
01c0: 79 73 74 65 6d 2e 44 72 61 77 69 6e 67 2e 44 65  ystem.Drawing.De
01d0: 73 69 67 6e 3b 0a 20 20 75 73 69 6e 67 20 53 79  sign;.  using Sy
01e0: 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73  stem.Collections
01f0: 2e 47 65 6e 65 72 69 63 3b 0a 20 20 75 73 69 6e  .Generic;.  usin
0200: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 3b 0a 20  g System.Data;. 
0210: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 65   using System.Te
0220: 78 74 3b 0a 20 20 75 73 69 6e 67 20 53 51 4c 69  xt;.  using SQLi
0230: 74 65 2e 44 65 73 69 67 6e 65 72 2e 45 64 69 74  te.Designer.Edit
0240: 6f 72 73 3b 0a 0a 20 20 69 6e 74 65 72 6e 61 6c  ors;..  internal
0250: 20 63 6c 61 73 73 20 56 69 65 77 20 3a 20 56 69   class View : Vi
0260: 65 77 54 61 62 6c 65 42 61 73 65 2c 20 49 43 75  ewTableBase, ICu
0270: 73 74 6f 6d 54 79 70 65 44 65 73 63 72 69 70 74  stomTypeDescript
0280: 6f 72 0a 20 20 7b 0a 20 20 20 20 70 72 69 76 61  or.  {.    priva
0290: 74 65 20 73 74 72 69 6e 67 20 5f 6e 61 6d 65 3b  te string _name;
02a0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72  .    private str
02b0: 69 6e 67 20 5f 6f 6c 64 6e 61 6d 65 3b 0a 20 20  ing _oldname;.  
02c0: 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
02d0: 20 5f 73 71 6c 3b 0a 20 20 20 20 70 72 69 76 61   _sql;.    priva
02e0: 74 65 20 73 74 72 69 6e 67 20 5f 6f 6c 64 73 71  te string _oldsq
02f0: 6c 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20 56  l;.    private V
0300: 69 65 77 44 65 73 69 67 6e 65 72 44 6f 63 20 5f  iewDesignerDoc _
0310: 6f 77 6e 65 72 3b 0a 20 20 20 20 70 72 69 76 61  owner;.    priva
0320: 74 65 20 73 74 72 69 6e 67 20 5f 63 61 74 61 6c  te string _catal
0330: 6f 67 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20  og;.    private 
0340: 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 5f 63 6f  DbConnection _co
0350: 6e 6e 65 63 74 69 6f 6e 3b 0a 20 20 20 20 4c 69  nnection;.    Li
0360: 73 74 3c 56 69 65 77 54 72 69 67 67 65 72 3e 20  st<ViewTrigger> 
0370: 5f 74 72 69 67 67 65 72 73 20 3d 20 6e 65 77 20  _triggers = new 
0380: 4c 69 73 74 3c 56 69 65 77 54 72 69 67 67 65 72  List<ViewTrigger
0390: 3e 28 29 3b 0a 20 20 20 20 4c 69 73 74 3c 56 69  >();.    List<Vi
03a0: 65 77 54 72 69 67 67 65 72 3e 20 5f 6f 6c 64 74  ewTrigger> _oldt
03b0: 72 69 67 67 65 72 73 20 3d 20 6e 65 77 20 4c 69  riggers = new Li
03c0: 73 74 3c 56 69 65 77 54 72 69 67 67 65 72 3e 28  st<ViewTrigger>(
03d0: 29 3b 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
03e0: 20 56 69 65 77 28 73 74 72 69 6e 67 20 76 69 65   View(string vie
03f0: 77 4e 61 6d 65 2c 20 44 62 43 6f 6e 6e 65 63 74  wName, DbConnect
0400: 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20  ion connection, 
0410: 56 69 65 77 44 65 73 69 67 6e 65 72 44 6f 63 20  ViewDesignerDoc 
0420: 70 61 72 65 6e 74 29 0a 20 20 20 20 7b 0a 20 20  parent).    {.  
0430: 20 20 20 20 5f 6f 77 6e 65 72 20 3d 20 70 61 72      _owner = par
0440: 65 6e 74 3b 0a 20 20 20 20 20 20 5f 6e 61 6d 65  ent;.      _name
0450: 20 3d 20 76 69 65 77 4e 61 6d 65 3b 0a 20 20 20   = viewName;.   
0460: 20 20 20 5f 6f 6c 64 6e 61 6d 65 20 3d 20 76 69     _oldname = vi
0470: 65 77 4e 61 6d 65 3b 0a 20 20 20 20 20 20 5f 63  ewName;.      _c
0480: 61 74 61 6c 6f 67 20 3d 20 63 6f 6e 6e 65 63 74  atalog = connect
0490: 69 6f 6e 2e 44 61 74 61 62 61 73 65 3b 0a 20 20  ion.Database;.  
04a0: 20 20 20 20 5f 63 6f 6e 6e 65 63 74 69 6f 6e 20      _connection 
04b0: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 3b 0a 20 20  = connection;.  
04c0: 20 20 20 20 5f 6f 77 6e 65 72 2e 4e 61 6d 65 20      _owner.Name 
04d0: 3d 20 5f 6e 61 6d 65 3b 0a 0a 20 20 20 20 20 20  = _name;..      
04e0: 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
04f0: 6c 4f 72 45 6d 70 74 79 28 76 69 65 77 4e 61 6d  lOrEmpty(viewNam
0500: 65 29 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20  e) == false).   
0510: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 75 73 69     {.        usi
0520: 6e 67 20 28 44 61 74 61 54 61 62 6c 65 20 74 62  ng (DataTable tb
0530: 6c 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 47  l = connection.G
0540: 65 74 53 63 68 65 6d 61 28 22 56 69 65 77 73 22  etSchema("Views"
0550: 2c 20 6e 65 77 20 73 74 72 69 6e 67 5b 5d 20 7b  , new string[] {
0560: 20 43 61 74 61 6c 6f 67 2c 20 6e 75 6c 6c 2c 20   Catalog, null, 
0570: 4e 61 6d 65 20 7d 29 29 0a 20 20 20 20 20 20 20  Name })).       
0580: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20   {.          if 
0590: 28 74 62 6c 2e 52 6f 77 73 2e 43 6f 75 6e 74 20  (tbl.Rows.Count 
05a0: 3e 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 7b  > 0).          {
05b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71  .            _sq
05c0: 6c 20 3d 20 74 62 6c 2e 52 6f 77 73 5b 30 5d 5b  l = tbl.Rows[0][
05d0: 22 56 49 45 57 5f 44 45 46 49 4e 49 54 49 4f 4e  "VIEW_DEFINITION
05e0: 22 5d 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0a 0a  "].ToString();..
05f0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
0600: 6e 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65  ngBuilder builde
0610: 72 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  r = new StringBu
0620: 69 6c 64 65 72 28 29 3b 0a 20 20 20 20 20 20 20  ilder();.       
0630: 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70       builder.App
0640: 65 6e 64 28 5f 73 71 6c 29 3b 0a 20 20 20 20 20  end(_sql);.     
0650: 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41         builder.A
0660: 70 70 65 6e 64 4c 69 6e 65 28 22 3b 22 29 3b 0a  ppendLine(";");.
0670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 74 72  .            _tr
0680: 69 67 67 65 72 73 2e 43 6c 65 61 72 28 29 3b 0a  iggers.Clear();.
0690: 20 20 20 20 20 20 20 20 20 20 20 20 5f 6f 6c 64              _old
06a0: 74 72 69 67 67 65 72 73 2e 43 6c 65 61 72 28 29  triggers.Clear()
06b0: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ;..            u
06c0: 73 69 6e 67 20 28 44 61 74 61 54 61 62 6c 65 20  sing (DataTable 
06d0: 74 74 62 6c 20 3d 20 5f 63 6f 6e 6e 65 63 74 69  ttbl = _connecti
06e0: 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28 22 54 72  on.GetSchema("Tr
06f0: 69 67 67 65 72 73 22 2c 20 6e 65 77 20 73 74 72  iggers", new str
0700: 69 6e 67 5b 5d 20 7b 20 43 61 74 61 6c 6f 67 2c  ing[] { Catalog,
0710: 20 6e 75 6c 6c 2c 20 4e 61 6d 65 20 7d 29 29 0a   null, Name })).
0720: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
0730: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
0740: 61 63 68 20 28 44 61 74 61 52 6f 77 20 72 6f 77  ach (DataRow row
0750: 20 69 6e 20 74 74 62 6c 2e 52 6f 77 73 29 0a 20   in ttbl.Rows). 
0760: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20               {. 
0770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56                 V
0780: 69 65 77 54 72 69 67 67 65 72 20 74 20 3d 20 6e  iewTrigger t = n
0790: 65 77 20 56 69 65 77 54 72 69 67 67 65 72 28 74  ew ViewTrigger(t
07a0: 68 69 73 2c 20 72 6f 77 29 3b 0a 20 20 20 20 20  his, row);.     
07b0: 20 20 20 20 20 20 20 20 20 20 20 5f 74 72 69 67             _trig
07c0: 67 65 72 73 2e 41 64 64 28 74 29 3b 0a 20 20 20  gers.Add(t);.   
07d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 6f 6c               _ol
07e0: 64 74 72 69 67 67 65 72 73 2e 41 64 64 28 28 28  dtriggers.Add(((
07f0: 49 43 6c 6f 6e 65 61 62 6c 65 29 74 29 2e 43 6c  ICloneable)t).Cl
0800: 6f 6e 65 28 29 20 61 73 20 56 69 65 77 54 72 69  one() as ViewTri
0810: 67 67 65 72 29 3b 0a 0a 20 20 20 20 20 20 20 20  gger);..        
0820: 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e          builder.
0830: 41 70 70 65 6e 64 46 6f 72 6d 61 74 28 22 7b 30  AppendFormat("{0
0840: 7d 3b 5c 72 5c 6e 22 2c 20 74 2e 4f 72 69 67 69  };\r\n", t.Origi
0850: 6e 61 6c 53 71 6c 29 3b 0a 20 20 20 20 20 20 20  nalSql);.       
0860: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
0870: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
0880: 20 20 20 5f 6f 6c 64 73 71 6c 20 3d 20 62 75 69     _oldsql = bui
0890: 6c 64 65 72 2e 54 6f 53 74 72 69 6e 67 28 29 3b  lder.ToString();
08a0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
08b0: 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20         else.    
08c0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
08d0: 20 20 20 20 5f 6f 6c 64 6e 61 6d 65 20 3d 20 6e      _oldname = n
08e0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ull;.          }
08f0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
0900: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75   }.    }..    pu
0910: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 76 6f  blic override vo
0920: 69 64 20 4d 61 6b 65 44 69 72 74 79 28 29 0a 20  id MakeDirty(). 
0930: 20 20 20 7b 0a 20 20 20 20 20 20 5f 6f 77 6e 65     {.      _owne
0940: 72 2e 4d 61 6b 65 44 69 72 74 79 28 29 3b 0a 20  r.MakeDirty();. 
0950: 20 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73     }..    [Brows
0960: 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20  able(false)].   
0970: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
0980: 20 6f 62 6a 65 63 74 20 54 72 69 67 67 65 72 73   object Triggers
0990: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74  .    {.      get
09a0: 20 7b 20 72 65 74 75 72 6e 20 5f 74 72 69 67 67   { return _trigg
09b0: 65 72 73 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20  ers; }.    }..  
09c0: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 43 6f    public void Co
09d0: 6d 6d 69 74 74 65 64 28 29 0a 20 20 20 20 7b 0a  mmitted().    {.
09e0: 20 20 20 20 20 20 5f 6f 6c 64 73 71 6c 20 3d 20        _oldsql = 
09f0: 5f 73 71 6c 3b 0a 20 20 20 20 20 20 5f 6f 6c 64  _sql;.      _old
0a00: 6e 61 6d 65 20 3d 20 5f 6e 61 6d 65 3b 0a 0a 20  name = _name;.. 
0a10: 20 20 20 20 20 5f 6f 6c 64 74 72 69 67 67 65 72       _oldtrigger
0a20: 73 20 3d 20 5f 74 72 69 67 67 65 72 73 3b 0a 20  s = _triggers;. 
0a30: 20 20 20 20 20 5f 74 72 69 67 67 65 72 73 2e 43       _triggers.C
0a40: 6c 65 61 72 28 29 3b 0a 20 20 20 20 20 20 66 6f  lear();.      fo
0a50: 72 65 61 63 68 20 28 56 69 65 77 54 72 69 67 67  reach (ViewTrigg
0a60: 65 72 20 74 72 69 67 20 69 6e 20 5f 6f 6c 64 74  er trig in _oldt
0a70: 72 69 67 67 65 72 73 29 0a 20 20 20 20 20 20 7b  riggers).      {
0a80: 0a 20 20 20 20 20 20 20 20 5f 74 72 69 67 67 65  .        _trigge
0a90: 72 73 2e 41 64 64 28 28 28 49 43 6c 6f 6e 65 61  rs.Add(((IClonea
0aa0: 62 6c 65 29 74 72 69 67 29 2e 43 6c 6f 6e 65 28  ble)trig).Clone(
0ab0: 29 20 61 73 20 56 69 65 77 54 72 69 67 67 65 72  ) as ViewTrigger
0ac0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
0ad0: 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  ..    public ove
0ae0: 72 72 69 64 65 20 73 74 72 69 6e 67 20 54 6f 53  rride string ToS
0af0: 74 72 69 6e 67 28 29 0a 20 20 20 20 7b 0a 20 20  tring().    {.  
0b00: 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
0b10: 67 2e 46 6f 72 6d 61 74 28 22 5b 7b 30 7d 5d 2e  g.Format("[{0}].
0b20: 5b 7b 31 7d 5d 22 2c 20 43 61 74 61 6c 6f 67 2c  [{1}]", Catalog,
0b30: 20 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 0a 20   Name);.    }.. 
0b40: 20 20 20 5b 43 61 74 65 67 6f 72 79 28 22 53 74     [Category("St
0b50: 6f 72 61 67 65 22 29 5d 0a 20 20 20 20 5b 52 65  orage")].    [Re
0b60: 66 72 65 73 68 50 72 6f 70 65 72 74 69 65 73 28  freshProperties(
0b70: 52 65 66 72 65 73 68 50 72 6f 70 65 72 74 69 65  RefreshPropertie
0b80: 73 2e 41 6c 6c 29 5d 0a 20 20 20 20 5b 50 61 72  s.All)].    [Par
0b90: 65 6e 74 68 65 73 69 7a 65 50 72 6f 70 65 72 74  enthesizePropert
0ba0: 79 4e 61 6d 65 28 74 72 75 65 29 5d 0a 20 20 20  yName(true)].   
0bb0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
0bc0: 20 73 74 72 69 6e 67 20 4e 61 6d 65 0a 20 20 20   string Name.   
0bd0: 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72   {.      get { r
0be0: 65 74 75 72 6e 20 5f 6e 61 6d 65 3b 20 7d 0a 20  eturn _name; }. 
0bf0: 20 20 20 20 20 73 65 74 0a 20 20 20 20 20 20 7b       set.      {
0c00: 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 6e 61  .        if (_na
0c10: 6d 65 20 21 3d 20 76 61 6c 75 65 29 0a 20 20 20  me != value).   
0c20: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
0c30: 20 5f 6e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 0a   _name = value;.
0c40: 20 20 20 20 20 20 20 20 20 20 5f 6f 77 6e 65 72            _owner
0c50: 2e 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 0a 20  .Name = value;. 
0c60: 20 20 20 20 20 20 20 20 20 5f 6f 77 6e 65 72 2e           _owner.
0c70: 4d 61 6b 65 44 69 72 74 79 28 29 3b 0a 20 20 20  MakeDirty();.   
0c80: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
0c90: 20 20 20 7d 0a 0a 20 20 20 20 5b 42 72 6f 77 73     }..    [Brows
0ca0: 61 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20  able(false)].   
0cb0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
0cc0: 20 73 74 72 69 6e 67 20 4f 6c 64 4e 61 6d 65 0a   string OldName.
0cd0: 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20      {.      get 
0ce0: 7b 20 72 65 74 75 72 6e 20 5f 6f 6c 64 6e 61 6d  { return _oldnam
0cf0: 65 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  e; }.    }..    
0d00: 5b 43 61 74 65 67 6f 72 79 28 22 53 74 6f 72 61  [Category("Stora
0d10: 67 65 22 29 5d 0a 20 20 20 20 5b 45 64 69 74 6f  ge")].    [Edito
0d20: 72 28 74 79 70 65 6f 66 28 43 61 74 61 6c 6f 67  r(typeof(Catalog
0d30: 54 79 70 65 45 64 69 74 6f 72 29 2c 20 74 79 70  TypeEditor), typ
0d40: 65 6f 66 28 55 49 54 79 70 65 45 64 69 74 6f 72  eof(UITypeEditor
0d50: 29 29 5d 0a 20 20 20 20 5b 44 65 66 61 75 6c 74  ))].    [Default
0d60: 56 61 6c 75 65 28 22 6d 61 69 6e 22 29 5d 0a 20  Value("main")]. 
0d70: 20 20 20 5b 52 65 66 72 65 73 68 50 72 6f 70 65     [RefreshPrope
0d80: 72 74 69 65 73 28 52 65 66 72 65 73 68 50 72 6f  rties(RefreshPro
0d90: 70 65 72 74 69 65 73 2e 41 6c 6c 29 5d 0a 20 20  perties.All)].  
0da0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
0db0: 65 20 73 74 72 69 6e 67 20 43 61 74 61 6c 6f 67  e string Catalog
0dc0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74  .    {.      get
0dd0: 20 7b 20 72 65 74 75 72 6e 20 5f 63 61 74 61 6c   { return _catal
0de0: 6f 67 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20  og; }.    }..   
0df0: 20 5b 43 61 74 65 67 6f 72 79 28 22 53 74 6f 72   [Category("Stor
0e00: 61 67 65 22 29 5d 0a 20 20 20 20 70 75 62 6c 69  age")].    publi
0e10: 63 20 73 74 72 69 6e 67 20 44 61 74 61 62 61 73  c string Databas
0e20: 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65  e.    {.      ge
0e30: 74 20 7b 20 72 65 74 75 72 6e 20 5f 63 6f 6e 6e  t { return _conn
0e40: 65 63 74 69 6f 6e 2e 44 61 74 61 53 6f 75 72 63  ection.DataSourc
0e50: 65 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  e; }.    }..    
0e60: 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65  [Browsable(false
0e70: 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74  )].    public st
0e80: 72 69 6e 67 20 53 71 6c 54 65 78 74 0a 20 20 20  ring SqlText.   
0e90: 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72   {.      get { r
0ea0: 65 74 75 72 6e 20 5f 73 71 6c 3b 20 7d 0a 20 20  eturn _sql; }.  
0eb0: 20 20 20 20 73 65 74 0a 20 20 20 20 20 20 7b 0a      set.      {.
0ec0: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
0ed0: 6e 67 2e 43 6f 6d 70 61 72 65 28 5f 73 71 6c 2c  ng.Compare(_sql,
0ee0: 20 76 61 6c 75 65 2c 20 53 74 72 69 6e 67 43 6f   value, StringCo
0ef0: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
0f00: 49 67 6e 6f 72 65 43 61 73 65 29 20 21 3d 20 30  IgnoreCase) != 0
0f10: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
0f20: 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 76 61 6c        _sql = val
0f30: 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 5f 6f  ue;.          _o
0f40: 77 6e 65 72 2e 4d 61 6b 65 44 69 72 74 79 28 29  wner.MakeDirty()
0f50: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
0f60: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 5b    }.    }..    [
0f70: 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65 29  Browsable(false)
0f80: 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72  ].    public str
0f90: 69 6e 67 20 4f 72 69 67 69 6e 61 6c 53 71 6c 0a  ing OriginalSql.
0fa0: 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 20      {.      get 
0fb0: 7b 20 72 65 74 75 72 6e 20 5f 6f 6c 64 73 71 6c  { return _oldsql
0fc0: 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  ; }.    }..    p
0fd0: 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65 74  ublic string Get
0fe0: 53 71 6c 54 65 78 74 28 29 0a 20 20 20 20 7b 0a  SqlText().    {.
0ff0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
1000: 2e 43 6f 6d 70 61 72 65 28 5f 73 71 6c 2c 20 5f  .Compare(_sql, _
1010: 6f 6c 64 73 71 6c 2c 20 53 74 72 69 6e 67 43 6f  oldsql, StringCo
1020: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
1030: 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
1040: 20 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61   && String.Compa
1050: 72 65 28 5f 6e 61 6d 65 2c 20 5f 6f 6c 64 6e 61  re(_name, _oldna
1060: 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  me, StringCompar
1070: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
1080: 72 65 43 61 73 65 29 20 3d 3d 20 30 29 20 72 65  reCase) == 0) re
1090: 74 75 72 6e 20 6e 75 6c 6c 3b 0a 0a 20 20 20 20  turn null;..    
10a0: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
10b0: 62 75 69 6c 64 65 72 20 3d 20 6e 65 77 20 53 74  builder = new St
10c0: 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0a 0a  ringBuilder();..
10d0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
10e0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 5f  .IsNullOrEmpty(_
10f0: 6f 6c 64 6e 61 6d 65 29 20 3d 3d 20 66 61 6c 73  oldname) == fals
1100: 65 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  e).      {.     
1110: 20 20 20 66 6f 72 65 61 63 68 20 28 56 69 65 77     foreach (View
1120: 54 72 69 67 67 65 72 20 74 72 69 67 20 69 6e 20  Trigger trig in 
1130: 5f 6f 6c 64 74 72 69 67 67 65 72 73 29 0a 20 20  _oldtriggers).  
1140: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
1150: 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
1160: 46 6f 72 6d 61 74 28 22 44 52 4f 50 20 54 52 49  Format("DROP TRI
1170: 47 47 45 52 20 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d  GGER [{0}].[{1}]
1180: 3b 5c 72 5c 6e 22 2c 20 43 61 74 61 6c 6f 67 2c  ;\r\n", Catalog,
1190: 20 74 72 69 67 2e 4e 61 6d 65 29 3b 0a 20 20 20   trig.Name);.   
11a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62       }.        b
11b0: 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 46 6f 72  uilder.AppendFor
11c0: 6d 61 74 28 22 44 52 4f 50 20 56 49 45 57 20 5b  mat("DROP VIEW [
11d0: 7b 30 7d 5d 2e 5b 7b 31 7d 5d 3b 5c 72 5c 6e 22  {0}].[{1}];\r\n"
11e0: 2c 20 43 61 74 61 6c 6f 67 2c 20 5f 6f 6c 64 6e  , Catalog, _oldn
11f0: 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  ame);.      }.. 
1200: 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70       builder.App
1210: 65 6e 64 46 6f 72 6d 61 74 28 22 43 52 45 41 54  endFormat("CREAT
1220: 45 20 56 49 45 57 20 5b 7b 30 7d 5d 2e 5b 7b 31  E VIEW [{0}].[{1
1230: 7d 5d 20 41 53 20 7b 32 7d 3b 5c 72 5c 6e 22 2c  }] AS {2};\r\n",
1240: 20 43 61 74 61 6c 6f 67 2c 20 4e 61 6d 65 2c 20   Catalog, Name, 
1250: 53 71 6c 54 65 78 74 29 3b 0a 0a 20 20 20 20 20  SqlText);..     
1260: 20 73 74 72 69 6e 67 20 73 65 70 20 3d 20 22 22   string sep = ""
1270: 3b 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ;.      foreach 
1280: 28 56 69 65 77 54 72 69 67 67 65 72 20 74 72 69  (ViewTrigger tri
1290: 67 20 69 6e 20 5f 74 72 69 67 67 65 72 73 29 0a  g in _triggers).
12a0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
12b0: 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 73  builder.Append(s
12c0: 65 70 29 3b 0a 20 20 20 20 20 20 20 20 74 72 69  ep);.        tri
12d0: 67 2e 57 72 69 74 65 53 71 6c 28 62 75 69 6c 64  g.WriteSql(build
12e0: 65 72 29 3b 0a 20 20 20 20 20 20 20 20 73 65 70  er);.        sep
12f0: 20 3d 20 22 5c 72 5c 6e 22 3b 0a 20 20 20 20 20   = "\r\n";.     
1300: 20 7d 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e   }..      return
1310: 20 62 75 69 6c 64 65 72 2e 54 6f 53 74 72 69 6e   builder.ToStrin
1320: 67 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  g();.    }..    
1330: 23 72 65 67 69 6f 6e 20 49 43 75 73 74 6f 6d 54  #region ICustomT
1340: 79 70 65 44 65 73 63 72 69 70 74 6f 72 20 4d 65  ypeDescriptor Me
1350: 6d 62 65 72 73 0a 0a 20 20 20 20 41 74 74 72 69  mbers..    Attri
1360: 62 75 74 65 43 6f 6c 6c 65 63 74 69 6f 6e 20 49  buteCollection I
1370: 43 75 73 74 6f 6d 54 79 70 65 44 65 73 63 72 69  CustomTypeDescri
1380: 70 74 6f 72 2e 47 65 74 41 74 74 72 69 62 75 74  ptor.GetAttribut
1390: 65 73 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  es().    {.     
13a0: 20 72 65 74 75 72 6e 20 54 79 70 65 44 65 73 63   return TypeDesc
13b0: 72 69 70 74 6f 72 2e 47 65 74 41 74 74 72 69 62  riptor.GetAttrib
13c0: 75 74 65 73 28 47 65 74 54 79 70 65 28 29 29 3b  utes(GetType());
13d0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 74 72 69  .    }..    stri
13e0: 6e 67 20 49 43 75 73 74 6f 6d 54 79 70 65 44 65  ng ICustomTypeDe
13f0: 73 63 72 69 70 74 6f 72 2e 47 65 74 43 6c 61 73  scriptor.GetClas
1400: 73 4e 61 6d 65 28 29 0a 20 20 20 20 7b 0a 20 20  sName().    {.  
1410: 20 20 20 20 72 65 74 75 72 6e 20 22 56 69 65 77      return "View
1420: 20 44 65 73 69 67 6e 22 3b 0a 20 20 20 20 7d 0a   Design";.    }.
1430: 0a 20 20 20 20 73 74 72 69 6e 67 20 49 43 75 73  .    string ICus
1440: 74 6f 6d 54 79 70 65 44 65 73 63 72 69 70 74 6f  tomTypeDescripto
1450: 72 2e 47 65 74 43 6f 6d 70 6f 6e 65 6e 74 4e 61  r.GetComponentNa
1460: 6d 65 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  me().    {.     
1470: 20 72 65 74 75 72 6e 20 54 6f 53 74 72 69 6e 67   return ToString
1480: 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 54  ();.    }..    T
1490: 79 70 65 43 6f 6e 76 65 72 74 65 72 20 49 43 75  ypeConverter ICu
14a0: 73 74 6f 6d 54 79 70 65 44 65 73 63 72 69 70 74  stomTypeDescript
14b0: 6f 72 2e 47 65 74 43 6f 6e 76 65 72 74 65 72 28  or.GetConverter(
14c0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
14d0: 74 75 72 6e 20 54 79 70 65 44 65 73 63 72 69 70  turn TypeDescrip
14e0: 74 6f 72 2e 47 65 74 43 6f 6e 76 65 72 74 65 72  tor.GetConverter
14f0: 28 47 65 74 54 79 70 65 28 29 29 3b 0a 20 20 20  (GetType());.   
1500: 20 7d 0a 0a 20 20 20 20 45 76 65 6e 74 44 65 73   }..    EventDes
1510: 63 72 69 70 74 6f 72 20 49 43 75 73 74 6f 6d 54  criptor ICustomT
1520: 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65  ypeDescriptor.Ge
1530: 74 44 65 66 61 75 6c 74 45 76 65 6e 74 28 29 0a  tDefaultEvent().
1540: 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75      {.      retu
1550: 72 6e 20 54 79 70 65 44 65 73 63 72 69 70 74 6f  rn TypeDescripto
1560: 72 2e 47 65 74 44 65 66 61 75 6c 74 45 76 65 6e  r.GetDefaultEven
1570: 74 28 47 65 74 54 79 70 65 28 29 29 3b 0a 20 20  t(GetType());.  
1580: 20 20 7d 0a 0a 20 20 20 20 50 72 6f 70 65 72 74    }..    Propert
1590: 79 44 65 73 63 72 69 70 74 6f 72 20 49 43 75 73  yDescriptor ICus
15a0: 74 6f 6d 54 79 70 65 44 65 73 63 72 69 70 74 6f  tomTypeDescripto
15b0: 72 2e 47 65 74 44 65 66 61 75 6c 74 50 72 6f 70  r.GetDefaultProp
15c0: 65 72 74 79 28 29 0a 20 20 20 20 7b 0a 20 20 20  erty().    {.   
15d0: 20 20 20 72 65 74 75 72 6e 20 54 79 70 65 44 65     return TypeDe
15e0: 73 63 72 69 70 74 6f 72 2e 47 65 74 44 65 66 61  scriptor.GetDefa
15f0: 75 6c 74 50 72 6f 70 65 72 74 79 28 47 65 74 54  ultProperty(GetT
1600: 79 70 65 28 29 29 3b 0a 20 20 20 20 7d 0a 0a 20  ype());.    }.. 
1610: 20 20 20 6f 62 6a 65 63 74 20 49 43 75 73 74 6f     object ICusto
1620: 6d 54 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e  mTypeDescriptor.
1630: 47 65 74 45 64 69 74 6f 72 28 54 79 70 65 20 65  GetEditor(Type e
1640: 64 69 74 6f 72 42 61 73 65 54 79 70 65 29 0a 20  ditorBaseType). 
1650: 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72     {.      retur
1660: 6e 20 54 79 70 65 44 65 73 63 72 69 70 74 6f 72  n TypeDescriptor
1670: 2e 47 65 74 45 64 69 74 6f 72 28 47 65 74 54 79  .GetEditor(GetTy
1680: 70 65 28 29 2c 20 65 64 69 74 6f 72 42 61 73 65  pe(), editorBase
1690: 54 79 70 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  Type);.    }..  
16a0: 20 20 45 76 65 6e 74 44 65 73 63 72 69 70 74 6f    EventDescripto
16b0: 72 43 6f 6c 6c 65 63 74 69 6f 6e 20 49 43 75 73  rCollection ICus
16c0: 74 6f 6d 54 79 70 65 44 65 73 63 72 69 70 74 6f  tomTypeDescripto
16d0: 72 2e 47 65 74 45 76 65 6e 74 73 28 41 74 74 72  r.GetEvents(Attr
16e0: 69 62 75 74 65 5b 5d 20 61 74 74 72 69 62 75 74  ibute[] attribut
16f0: 65 73 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  es).    {.      
1700: 72 65 74 75 72 6e 20 54 79 70 65 44 65 73 63 72  return TypeDescr
1710: 69 70 74 6f 72 2e 47 65 74 45 76 65 6e 74 73 28  iptor.GetEvents(
1720: 47 65 74 54 79 70 65 28 29 2c 20 61 74 74 72 69  GetType(), attri
1730: 62 75 74 65 73 29 3b 0a 20 20 20 20 7d 0a 0a 20  butes);.    }.. 
1740: 20 20 20 45 76 65 6e 74 44 65 73 63 72 69 70 74     EventDescript
1750: 6f 72 43 6f 6c 6c 65 63 74 69 6f 6e 20 49 43 75  orCollection ICu
1760: 73 74 6f 6d 54 79 70 65 44 65 73 63 72 69 70 74  stomTypeDescript
1770: 6f 72 2e 47 65 74 45 76 65 6e 74 73 28 29 0a 20  or.GetEvents(). 
1780: 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72     {.      retur
1790: 6e 20 54 79 70 65 44 65 73 63 72 69 70 74 6f 72  n TypeDescriptor
17a0: 2e 47 65 74 45 76 65 6e 74 73 28 47 65 74 54 79  .GetEvents(GetTy
17b0: 70 65 28 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  pe());.    }..  
17c0: 20 20 50 72 6f 70 65 72 74 79 44 65 73 63 72 69    PropertyDescri
17d0: 70 74 6f 72 43 6f 6c 6c 65 63 74 69 6f 6e 20 49  ptorCollection I
17e0: 43 75 73 74 6f 6d 54 79 70 65 44 65 73 63 72 69  CustomTypeDescri
17f0: 70 74 6f 72 2e 47 65 74 50 72 6f 70 65 72 74 69  ptor.GetProperti
1800: 65 73 28 41 74 74 72 69 62 75 74 65 5b 5d 20 61  es(Attribute[] a
1810: 74 74 72 69 62 75 74 65 73 29 0a 20 20 20 20 7b  ttributes).    {
1820: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79  .      return Ty
1830: 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74  peDescriptor.Get
1840: 50 72 6f 70 65 72 74 69 65 73 28 47 65 74 54 79  Properties(GetTy
1850: 70 65 28 29 2c 20 61 74 74 72 69 62 75 74 65 73  pe(), attributes
1860: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 50 72  );.    }..    Pr
1870: 6f 70 65 72 74 79 44 65 73 63 72 69 70 74 6f 72  opertyDescriptor
1880: 43 6f 6c 6c 65 63 74 69 6f 6e 20 49 43 75 73 74  Collection ICust
1890: 6f 6d 54 79 70 65 44 65 73 63 72 69 70 74 6f 72  omTypeDescriptor
18a0: 2e 47 65 74 50 72 6f 70 65 72 74 69 65 73 28 29  .GetProperties()
18b0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74  .    {.      ret
18c0: 75 72 6e 20 54 79 70 65 44 65 73 63 72 69 70 74  urn TypeDescript
18d0: 6f 72 2e 47 65 74 50 72 6f 70 65 72 74 69 65 73  or.GetProperties
18e0: 28 47 65 74 54 79 70 65 28 29 29 3b 0a 20 20 20  (GetType());.   
18f0: 20 7d 0a 0a 20 20 20 20 6f 62 6a 65 63 74 20 49   }..    object I
1900: 43 75 73 74 6f 6d 54 79 70 65 44 65 73 63 72 69  CustomTypeDescri
1910: 70 74 6f 72 2e 47 65 74 50 72 6f 70 65 72 74 79  ptor.GetProperty
1920: 4f 77 6e 65 72 28 50 72 6f 70 65 72 74 79 44 65  Owner(PropertyDe
1930: 73 63 72 69 70 74 6f 72 20 70 64 29 0a 20 20 20  scriptor pd).   
1940: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
1950: 74 68 69 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  this;.    }..   
1960: 20 23 65 6e 64 72 65 67 69 6f 6e 0a 0a 20 20 20   #endregion..   
1970: 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73   [Browsable(fals
1980: 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  e)].    public o
1990: 76 65 72 72 69 64 65 20 56 69 65 77 54 61 62 6c  verride ViewTabl
19a0: 65 42 61 73 65 20 44 65 73 69 67 6e 54 61 62 6c  eBase DesignTabl
19b0: 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65  e.    {.      ge
19c0: 74 20 7b 20 72 65 74 75 72 6e 20 74 68 69 73 3b  t { return this;
19d0: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75   }.    }..    pu
19e0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 44 62  blic override Db
19f0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 47 65 74 43 6f  Connection GetCo
1a00: 6e 6e 65 63 74 69 6f 6e 28 29 0a 20 20 20 20 7b  nnection().    {
1a10: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 63  .      return _c
1a20: 6f 6e 6e 65 63 74 69 6f 6e 3b 0a 20 20 20 20 7d  onnection;.    }
1a30: 0a 20 20 7d 0a 7d 0a                             .  }.}.