List:Commits« Previous MessageNext Message »
From:rburnett Date:April 19 2006 5:47pm
Subject:Connector/NET commit: r220 - in trunk: . VSTools VSTools/CtcComponents VSTools/Editors VSTools/Nodes VSTools/Resources mysqlclient mysqlclient/common
View as plain text  
Added:
   trunk/VSTools/Nodes/TriggerNode.cs
   trunk/VSTools/Resources/db.Column.16x16.png
   trunk/VSTools/Resources/db.Trigger.16x16.png
Modified:
   trunk/MySql.Data.2005.csproj
   trunk/VSTools/CtcComponents/MyVSTools.ctc
   trunk/VSTools/CtcComponents/PkgCmdID.h
   trunk/VSTools/Editors/BaseEditor.cs
   trunk/VSTools/MyVSTools.csproj
   trunk/VSTools/Nodes/ExplorerNode.cs
   trunk/VSTools/Nodes/MyHierarchyNode.cs
   trunk/VSTools/Nodes/ProcedureNode.cs
   trunk/VSTools/Nodes/ProceduresNode.cs
   trunk/VSTools/Nodes/TableNode.cs
   trunk/VSTools/PkgCmdID.cs
   trunk/VSTools/Resources/Thumbs.db
   trunk/VSTools/VSPackage.Designer.cs
   trunk/VSTools/VSPackage.resx
   trunk/mysqlclient/ISSchemaProvider.cs
   trunk/mysqlclient/NonISSchemaProvider.cs
   trunk/mysqlclient/SchemaProvider.cs
   trunk/mysqlclient/common/DBConnectionString.cs
   trunk/mysqlclient/nativedriver.cs
Log:
DbConnectionString.cs
  default password to String.Empty
ISSchemaProvider.cs
   implement trigger  and column collections
   refactor the query routine to be general purpose
NativeDriver.cs
   removed some old code
NonISSchemaProvider.cs
   added stub outs for new column and trigger collections
SchemaProvider.cs
   added new abstract methods for column and trigger collections
MyVSTools.ctc
   added trigger and column menus
PkgCmdID.h
PkgCmdID.cs
   added constants for new menus and commands
BaseEditor.cs
   uncommented code for initializing RDT and made the vars static
ExplorerNode.cs
   refactored AddChild into IndexChild and LinkChild since I need IndexChild separately
   Added RemoveChild()
   Added GetDatabaseNode()
   Added ExecuteNonQuery()
   Small changes to OpenEditor()
MyHierarchyNode
   Added sinks in an attempt to get events working
   Added trigger and column icons to resource loader code
   Added UnindexNode()
   Added ItemDelete() and RefreshItem() methods (not working)
   using sinks member from the Advise and Unadvise interface members
ProcedureNode.cs
   Added new ctor for creating a new procedure
   Implemented delete
ProceduresNode.cs
   Implemented create new procedure
TableNode.cs
   Implemented Populate() to add columns and triggers
TriggerNode.cs
   New class to handle triggers
[Rest of changes related to adding new resources]

Modified: trunk/MySql.Data.2005.csproj
===================================================================
--- trunk/MySql.Data.2005.csproj	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/MySql.Data.2005.csproj	2006-04-19 15:47:20 UTC (rev 220)
@@ -91,7 +91,6 @@
   </ItemGroup>
   <ItemGroup>
     <None Include="CHANGES" />
-    <None Include="ClassDiagram1.cd" />
     <None Include="cnet.snk" />
     <None Include="README" />
     <Compile Include="MySqlClient\AssemblyInfo.cs">

Modified: trunk/VSTools/CtcComponents/MyVSTools.ctc
===================================================================
--- trunk/VSTools/CtcComponents/MyVSTools.ctc	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/VSTools/CtcComponents/MyVSTools.ctc	2006-04-19 15:47:20 UTC (rev 220)
@@ -70,6 +70,8 @@
     guidMyVSToolsCmdSet:TableCtxtMenu, guidMyVSToolsCmdSet:0, 0x0000,
CONTEXT|ALWAYSCREATE|NOCUSTOMIZE, "TableContextMenu";
     guidMyVSToolsCmdSet:ViewCtxtMenu, guidMyVSToolsCmdSet:0, 0x0000,
CONTEXT|ALWAYSCREATE|NOCUSTOMIZE, "ViewContextMenu";
     guidMyVSToolsCmdSet:FunctionCtxtMenu, guidMyVSToolsCmdSet:0, 0x0000,
CONTEXT|ALWAYSCREATE|NOCUSTOMIZE, "FunctionContextMenu";
+    guidMyVSToolsCmdSet:TriggerCtxtMenu, guidMyVSToolsCmdSet:0, 0x0000,
CONTEXT|ALWAYSCREATE|NOCUSTOMIZE, "TriggerContextMenu";
+    guidMyVSToolsCmdSet:ColumnCtxtMenu, guidMyVSToolsCmdSet:0, 0x0000,
CONTEXT|ALWAYSCREATE|NOCUSTOMIZE, "ColumnContextMenu";
   MENUS_END
 
   // In this section you can define new menu groups. A menu group is a container for
@@ -92,6 +94,7 @@
     guidMyVSToolsCmdSet:TableGroup, guidMyVSToolsCmdSet:TableCtxtMenu, 0x1000;
     guidMyVSToolsCmdSet:ViewGroup, guidMyVSToolsCmdSet:ViewCtxtMenu, 0x1000;
     guidMyVSToolsCmdSet:FunctionGroup, guidMyVSToolsCmdSet:FunctionCtxtMenu, 0x1000;
+    guidMyVSToolsCmdSet:TriggerGroup, guidMyVSToolsCmdSet:TriggerCtxtMenu, 0x1000;
   NEWGROUPS_END
 
   // Button section.
@@ -133,6 +136,9 @@
 
    // Functions menus
    guidMyVSToolsCmdSet:cmdidAddNewFunction, guidMyVSToolsCmdSet:FunctionsGroup, 0x100,
guidMyVSToolsCmdSet:0, BUTTON, , "Add New &Function";
+
+   // Trigger menus
+   guidMyVSToolsCmdSet:cmdidAddNewTrigger, guidMyVSToolsCmdSet:TriggerGroup, 0x100,
guidMyVSToolsCmdSet:0, BUTTON, , "Add New &Trigger";
   BUTTONS_END
 
   // The bitmaps section is used to define the bitmaps that are used for the commands.
@@ -189,9 +195,16 @@
   guidMyVSToolsCmdSet:DeleteGroup, guidMyVSToolsCmdSet:FunctionCtxtMenu, 0x1001;
   guidMyVSToolsCmdSet:PropertiesGroup, guidMyVSToolsCmdSet:FunctionCtxtMenu, 0x1002;
 
+  // Trigger menu
+  guidMyVSToolsCmdSet:cmdidOpen, guidMyVSToolsCmdSet:TriggerGroup, 0x1001;
+  guidMyVSToolsCmdSet:DeleteGroup, guidMyVSToolsCmdSet:TriggerCtxtMenu, 0x1001;
+  guidMyVSToolsCmdSet:PropertiesGroup, guidMyVSToolsCmdSet:TriggerCtxtMenu, 0x1002;
+
   guidMyVSToolsCmdSet:PropertiesGroup, guidMyVSToolsCmdSet:ProceduresCtxtMenu, 0x1002;
 
   guidMyVSToolsCmdSet:PropertiesGroup, guidMyVSToolsCmdSet:FunctionsCtxtMenu, 0x1002;
+
+  guidMyVSToolsCmdSet:PropertiesGroup, guidMyVSToolsCmdSet:ColumnCtxtMenu, 0x1002;
 CMDPLACEMENT_END
 
 

Modified: trunk/VSTools/CtcComponents/PkgCmdID.h
===================================================================
--- trunk/VSTools/CtcComponents/PkgCmdID.h	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/VSTools/CtcComponents/PkgCmdID.h	2006-04-19 15:47:20 UTC (rev 220)
@@ -19,6 +19,8 @@
 #define FunctionsCtxtMenu           0x1008
 #define ViewCtxtMenu                0x1009
 #define FunctionCtxtMenu            0x1010
+#define TriggerCtxtMenu             0x1011
+#define ColumnCtxtMenu              0x1012
 
 ///////////////////////////////////////////////////////////////////////////////
 // Menu Group IDs
@@ -36,6 +38,7 @@
 #define FunctionsGroup              0x1059
 #define ViewGroup                   0x1060
 #define FunctionGroup               0x1061
+#define TriggerGroup                0x1062
 
 ///////////////////////////////////////////////////////////////////////////////
 // Command IDs

Modified: trunk/VSTools/Editors/BaseEditor.cs
===================================================================
--- trunk/VSTools/Editors/BaseEditor.cs	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/VSTools/Editors/BaseEditor.cs	2006-04-19 15:47:20 UTC (rev 220)
@@ -15,8 +15,8 @@
                               IVsWindowPane 
     {
         protected bool isDirty;
-        private IVsRunningDocumentTable rdt;
-        private IVsUIShell vsUIShell;
+        private static IVsRunningDocumentTable rdt;
+        private static IVsUIShell vsUIShell;
         protected uint cookie;
         protected IVsHierarchy hierarchy;
         protected uint itemID;
@@ -27,10 +27,13 @@
         public BaseEditor()
             : base()
         {
-//            rdt = (IVsRunningDocumentTable)PackageSingleton.Package.GetMyService(
-  //              typeof(SVsRunningDocumentTable));
-    //        vsUIShell = (IVsUIShell)PackageSingleton.Package.GetMyService(
-      //          typeof(SVsUIShell));
+            if (rdt == null)
+            {
+                rdt = (IVsRunningDocumentTable)PackageSingleton.Package.GetMyService(
+                    typeof(SVsRunningDocumentTable));
+                vsUIShell = (IVsUIShell)PackageSingleton.Package.GetMyService(
+                    typeof(SVsUIShell));
+            }
         }
 
         protected virtual Guid EditorGuid

Modified: trunk/VSTools/MyVSTools.csproj
===================================================================
--- trunk/VSTools/MyVSTools.csproj	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/VSTools/MyVSTools.csproj	2006-04-19 15:47:20 UTC (rev 220)
@@ -111,9 +111,11 @@
     </Compile>
     <Compile Include="Editors\TableDesignerColumn.cs" />
     <Compile Include="Editors\TableDesignerColumnCollection.cs" />
+    <Compile Include="Nodes\ColumnNode.cs" />
     <Compile Include="Nodes\ExplorerNode.cs" />
     <Compile Include="Nodes\MyHierarchyNode.cs" />
     <None Include="Resources\Microsoft.VisualStudio.Package.Project.cs" />
+    <Compile Include="Nodes\TriggerNode.cs" />
     <Compile Include="TableDataControl.cs">
       <SubType>UserControl</SubType>
     </Compile>
@@ -199,6 +201,8 @@
     <None Include="Resources\database.16x16.bmp" />
     <None Include="Resources\db.Procedure.16x16.png" />
     <None Include="Resources\Function.16x16.bmp" />
+    <None Include="Resources\db.Trigger.16x16.png" />
+    <None Include="Resources\db.Column.16x16.png" />
     <Content Include="Resources\Package.ico" />
     <None Include="Resources\View.16x16.bmp" />
     <None Include="Resources\Table.16x16.bmp" />

Modified: trunk/VSTools/Nodes/ExplorerNode.cs
===================================================================
--- trunk/VSTools/Nodes/ExplorerNode.cs	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/VSTools/Nodes/ExplorerNode.cs	2006-04-19 15:47:20 UTC (rev 220)
@@ -68,18 +68,23 @@
 
         public abstract uint IconIndex { get; }
         public abstract bool Expandable { get; }
-        public abstract void Populate();
+        public virtual void Populate()
+        {
+        }
 
         public virtual uint MenuId
         {
             get { return 0; }
         }
 
-        protected void AddChild(ExplorerNode node)
+        protected void IndexChild(ExplorerNode node)
         {
             HierNode hierNode = GetHierNode();
             node.ItemId = hierNode.IndexNode(node);
+        }
 
+        protected void LinkChild(ExplorerNode node)
+        {
             if (firstChild == null)
                 firstChild = node;
             else
@@ -89,17 +94,34 @@
                     nodeIter = nodeIter.NextSibling;
                 nodeIter.NextSibling = node;
             }
+        }
 
-            //children.Add(node);
+        protected void AddChild(ExplorerNode node)
+        {
+            IndexChild(node);
+            LinkChild(node);
+        }
 
+        public void RemoveChild(ExplorerNode node)
+        {
+            HierNode hierNode = GetHierNode();
+            // first remove it from the item id index
+            hierNode.UnindexNode(node);
 
-/*            node.ItemId = (uint)childId++;
-            if (lastChild != null)
-                lastChild.NextSibling = node;
-            node.NextSibling = null;
-            lastChild = node;
-            if (firstChild == null)
-                firstChild = lastChild;*/
+            // now we unlink it
+            ExplorerNode prevNode = null;
+            ExplorerNode nodeIter = firstChild;
+            while (nodeIter != node)
+            {
+                prevNode = nodeIter;
+                nodeIter = nodeIter.NextSibling;
+            }
+            if (prevNode == null)
+                firstChild = nodeIter.NextSibling;
+            else
+                prevNode.NextSibling = nodeIter.NextSibling;
+
+            hierNode.RefreshItem(itemId);
         }
 
         protected DbConnection GetOpenConnection()
@@ -138,6 +160,16 @@
             return hierNode;
         }
 
+        protected DatabaseNode GetDatabaseNode()
+        {
+            ExplorerNode node = this;
+            while (node != null && !(node is DatabaseNode))
+            {
+                node = node.Parent;
+            }
+            return (node as DatabaseNode);
+        }
+
         protected void OpenEditor(BaseEditor editorObj)
         {
             IVsUIShellOpenDocument openDoc = (IVsUIShellOpenDocument)
@@ -163,29 +195,47 @@
                 //IntPtr.Zero, PackageSingleton.Package, out winFrame);*/
 
             IntPtr viewAndDataPunk = Marshal.GetIUnknownForObject(editorObj);
-            int result = openDoc.InitializeEditorInstance(0, viewAndDataPunk,
viewAndDataPunk,
+            int result = openDoc.InitializeEditorInstance(0,
+                viewAndDataPunk, viewAndDataPunk,
                 editorObj.Filename, ref editor, null, ref editor, editorObj.Filename,
                 null, GetHierNode(), ItemId, IntPtr.Zero,
                 PackageSingleton.Package, ref cmdGui, out winFrame);
             ErrorHandler.ThrowOnFailure(result);
 
             result = uiShell.CreateDocumentWindow(0, editorObj.Filename,
-                GetHierNode(), this.ItemId, viewAndDataPunk, 
+                GetHierNode(), ItemId, viewAndDataPunk, 
                 viewAndDataPunk, ref editor, null, ref cmdGui, PackageSingleton.Package, 
                 editorObj.Filename, null, null, out winFrame);
 
-            if (winFrame != null)
-                winFrame.Show();
+  /*          System.Diagnostics.Trace.WriteLine("starting editor on item = " +
this.ItemId);
             
-/*            System.Diagnostics.Trace.WriteLine("starting editor on item = " +
this.ItemId);
-            Guid logicalView = VSConstants.LOGVIEWID_Primary;
-            result = openDoc.OpenSpecificEditor((uint)__VSOSPEFLAGS.OSPE_OpenAsNewFile,
-                ".cpp", ref editorGuid, null, ref logicalView,
-                Caption, GetHierNode(), this.ItemId, IntPtr.Zero,
-                PackageSingleton.Package, out winFrame);
-            MessageBox.Show("result = " + result);*/
+               Guid logicalView = VSConstants.LOGVIEWID_Primary;
+                int result = openDoc.OpenSpecificEditor(
+                    (uint)__VSOSPEFLAGS.OSPE_OpenAsNewFile,
+                    editorObj.Filename, ref editor, null, ref logicalView,
+                    Caption, GetHierNode(), this.ItemId, IntPtr.Zero,
+                    PackageSingleton.Package, out winFrame);
+*/     
+                if (winFrame != null)
+                    winFrame.Show();
         }
 
+        protected void ExecuteNonQuery(string sql)
+        {
+            DbConnection connection = GetOpenConnection();
+            DbCommand cmd = connection.CreateCommand();
+            cmd.CommandText = sql;
+            cmd.CommandType = CommandType.Text;
+            try
+            {
+                cmd.ExecuteNonQuery();
+            }
+            catch (Exception ex)
+            {
+                throw;
+            }
+        }
+
         public virtual void DoCommand(int commandId)
         {
         }

Modified: trunk/VSTools/Nodes/MyHierarchyNode.cs
===================================================================
--- trunk/VSTools/Nodes/MyHierarchyNode.cs	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/VSTools/Nodes/MyHierarchyNode.cs	2006-04-19 15:47:20 UTC (rev 220)
@@ -12,19 +12,23 @@
 
 namespace MySql.VSTools
 {
-    internal abstract class HierNode : ExplorerNode, IVsUIHierarchy,
IVsPersistHierarchyItem2
+    internal abstract class HierNode : ExplorerNode, 
+        IVsUIHierarchy, 
+        IVsPersistHierarchyItem2
     {
         private static ImageList imageList;
         private EventSinkCollection nodes;
         private ExplorerNode activeNode;
+        private EventSinkCollection sinks;
 
         public HierNode(HierNode parent, string name) : base(parent, name)
         {
             nodes = new EventSinkCollection();
+            sinks = new EventSinkCollection();
 
             if (imageList == null)
             {
-                ResourceManager rm = new ResourceManager("Vsip.MyVSTools.VSPackage",
+                ResourceManager rm = new ResourceManager("MySql.VSTools.VSPackage",
                     Assembly.GetExecutingAssembly());
 
                 imageList = new ImageList();
@@ -37,6 +41,8 @@
                 imageList.Images.Add((Image)rm.GetObject("procedure"));
                 imageList.Images.Add((Image)rm.GetObject("function"));
                 imageList.Images.Add((Image)rm.GetObject("view"));
+                imageList.Images.Add((Image)rm.GetObject("trigger"));
+                imageList.Images.Add((Image)rm.GetObject("column"));
             }
 
 /*                    System.ComponentModel.ComponentResourceManager resources = 
@@ -65,11 +71,30 @@
             return nodes.Add(node);
         }
 
+        public void UnindexNode(ExplorerNode node)
+        {
+            nodes.Remove(node);
+        }
+
         public ExplorerNode ActiveNode
         {
             get { return activeNode; }
         }
 
+        public void RefreshItem(uint itemId)
+        {
+            IEnumerator sinkEnum = (sinks as IEnumerable).GetEnumerator();
+            while (sinkEnum.MoveNext())
+                (sinkEnum.Current as IVsHierarchyEvents).OnInvalidateItems(itemId);
+        }
+
+        public void ItemDeleted(uint itemId)
+        {
+            IEnumerator sinkEnum = (sinks as IEnumerable).GetEnumerator();
+            while (sinkEnum.MoveNext())
+                (sinkEnum.Current as IVsHierarchyEvents).OnItemDeleted(itemId);
+        }
+
         public ExplorerNode NodeFromId(uint itemId)
         {
             if (itemId == VSConstants.VSITEMID_ROOT)
@@ -109,8 +134,7 @@
 
         public int AdviseHierarchyEvents(IVsHierarchyEvents pEventSink, out uint
pdwCookie)
         {
-            pdwCookie = 0;
-            //TODO: fix this
+            pdwCookie = sinks.Add(pEventSink);
             return VSConstants.S_OK;
         }
 
@@ -315,6 +339,7 @@
 
         public int UnadviseHierarchyEvents(uint dwCookie)
         {
+            sinks.RemoveAt(dwCookie);
             return VSConstants.S_OK;
         }
 

Modified: trunk/VSTools/Nodes/ProcedureNode.cs
===================================================================
--- trunk/VSTools/Nodes/ProcedureNode.cs	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/VSTools/Nodes/ProcedureNode.cs	2006-04-19 15:47:20 UTC (rev 220)
@@ -9,14 +9,25 @@
 {
     internal class ProcedureNode : ExplorerNode
     {
-        private DataRow procDef;
+        private string body;
+        private string schema;
 
         public ProcedureNode(ExplorerNode parent, string caption, DataRow row)
             : base(parent, caption)
         {
-            procDef = row;
+            schema = row["ROUTINE_SCHEMA"].ToString();
+            body = row["ROUTINE_DEFINITION"].ToString();
         }
 
+        public ProcedureNode(ExplorerNode parent, string caption, string body)
+            : base(parent, caption)
+        {
+            this.body = body;
+            schema = GetDatabaseNode().Caption;
+            ItemId = VSConstants.VSITEMID_NIL;
+        }
+
+
         public override uint MenuId
         {
             get { return PkgCmdIDList.ProcedureCtxtMenu; }
@@ -40,9 +51,9 @@
         {
             switch (commandId)
             {
-//                case PkgCmdIDList.cmdidDelete:
-  //                  Delete();
-    //                break;
+                case PkgCmdIDList.cmdidDelete:
+                    Delete();
+                    break;
                 case PkgCmdIDList.cmdidOpen:
                     Open();
                     break;
@@ -52,43 +63,36 @@
             }
         }
 
-/*        private void Delete()
+        private void Delete()
         {
             // first make sure the user is sure
-            if (MessageBox.Show(TreeView.Parent,
+            if (MessageBox.Show(
                 String.Format(MyVSTools.GetResourceString("DeleteConfirm"),
-                procDef["ROUTINE_NAME"]),
+                Caption),
                 MyVSTools.GetResourceString("DeleteConfirmTitle"),
                 MessageBoxButtons.YesNo,
                 MessageBoxIcon.Question) == DialogResult.No)
                 return;
 
-            System.Data.Common.DbConnection conn;
-            conn = GetOpenConnection();
-            System.Data.Common.DbCommand cmd = conn.CreateCommand();
-            cmd.CommandText = "DROP PROCEDURE " + procDef["ROUTINE_SCHEMA"] + "." +
-                procDef["ROUTINE_NAME"];
+            string sql = String.Format("DROP PROCEDURE {0}.{1}", schema, Caption);
             try
             {
-                cmd.ExecuteNonQuery();
+                ExecuteNonQuery(sql);
                 //delete was successful, remove this node
-                this.Remove();
+                Parent.RemoveChild(this);
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.Message, 
                     String.Format(MyVSTools.GetResourceString("UnableToDeleteTitle"),
-                    procDef["ROUTINE_NAME"]),
-                    MessageBoxButtons.OK, MessageBoxIcon.Error);
+                    Caption), MessageBoxButtons.OK, MessageBoxIcon.Error);
             }
         }
-        */
-        private void Open()
+
+        internal void Open()
         {
             StoredProcedureEditor editor = new StoredProcedureEditor(
-                Caption, procDef["ROUTINE_SCHEMA"].ToString(), 
-                procDef["ROUTINE_DEFINITION"].ToString(), 
-                GetOpenConnection());
+                Caption, GetDatabaseNode().Caption, body, GetOpenConnection());
             OpenEditor(editor);
         }
     }

Modified: trunk/VSTools/Nodes/ProceduresNode.cs
===================================================================
--- trunk/VSTools/Nodes/ProceduresNode.cs	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/VSTools/Nodes/ProceduresNode.cs	2006-04-19 15:47:20 UTC (rev 220)
@@ -61,10 +61,10 @@
                 "()" + Environment.NewLine +
                 "BEGIN" + Environment.NewLine + "END" +
                 Environment.NewLine;
-            StoredProcedureEditor editor = new StoredProcedureEditor(name,
-                Parent.Caption, defaultBody, GetOpenConnection());
-            OpenEditor(editor);
-        }
+            ProcedureNode node = new ProcedureNode(this, name, defaultBody);
+            IndexChild(node);
+            node.Open();
+       }
 
 
 

Modified: trunk/VSTools/Nodes/TableNode.cs
===================================================================
--- trunk/VSTools/Nodes/TableNode.cs	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/VSTools/Nodes/TableNode.cs	2006-04-19 15:47:20 UTC (rev 220)
@@ -3,6 +3,7 @@
 using System.Text;
 using System.Windows.Forms;
 using System.Data;
+using System.Data.Common;
 
 namespace MySql.VSTools
 {
@@ -101,6 +102,27 @@
 
         public override void Populate()
         {
+            if (populated) return;
+            DbConnection conn = GetOpenConnection();
+            string[] restrictions = new string[4];
+            restrictions[1] = GetDatabaseNode().Caption;
+            restrictions[2] = Caption;
+            DataTable columns = conn.GetSchema("columns", restrictions);
+            foreach (DataRow column in columns.Rows)
+                AddChild(new ColumnNode(this, column));
+            populated = true;
+            try
+            {
+                restrictions[2] = null;
+                restrictions[3] = Caption;
+                DataTable triggers = conn.GetSchema("triggers", restrictions);
+                foreach (DataRow trigger in triggers.Rows)
+                    AddChild(new TriggerNode(this, trigger));
+            }
+            catch (Exception)
+            {
+                throw;
+            }
         }
     }
 }

Added: trunk/VSTools/Nodes/TriggerNode.cs
===================================================================
--- trunk/VSTools/Nodes/TriggerNode.cs	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/VSTools/Nodes/TriggerNode.cs	2006-04-19 15:47:20 UTC (rev 220)
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using System.Data;
+
+namespace MySql.VSTools
+{
+    internal class TriggerNode : ExplorerNode
+    {
+        private DataRow triggerDef;
+
+        public TriggerNode(ExplorerNode parent, DataRow row)
+            : base(parent, row["TRIGGER_NAME"].ToString())
+        {
+            triggerDef = row;
+        }
+
+        public override uint MenuId
+        {
+            get { return PkgCmdIDList.TriggerCtxtMenu; }
+        }
+
+        public override uint IconIndex
+        {
+            get { return 7; }
+        }
+
+        public override bool Expandable
+        {
+            get { return false; }
+        }
+
+        public override void DoCommand(int commandId)
+        {
+            switch (commandId)
+            {
+                case PkgCmdIDList.cmdidDelete:
+                    Delete();
+                    break;
+                default:
+                    base.DoCommand(commandId);
+                    break;
+            }
+        }
+
+        private void Delete()
+        {
+        }
+
+    }
+}

Modified: trunk/VSTools/PkgCmdID.cs
===================================================================
--- trunk/VSTools/PkgCmdID.cs	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/VSTools/PkgCmdID.cs	2006-04-19 15:47:20 UTC (rev 220)
@@ -21,6 +21,8 @@
         public const uint FunctionsCtxtMenu = 0x1008;
         public const uint ViewCtxtMenu = 0x1009;
         public const uint FunctionCtxtMenu = 0x1010;
+        public const uint TriggerCtxtMenu = 0x1011;
+        public const uint ColumnCtxtMenu = 0x1012;
 
         // commands
         public const int cmdidRefresh = 0x102;

Modified: trunk/VSTools/Resources/Thumbs.db
===================================================================
(Binary files differ)

Added: trunk/VSTools/Resources/db.Column.16x16.png
===================================================================
(Binary files differ)


Property changes on: trunk/VSTools/Resources/db.Column.16x16.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/VSTools/Resources/db.Trigger.16x16.png
===================================================================
(Binary files differ)


Property changes on: trunk/VSTools/Resources/db.Trigger.16x16.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/VSTools/VSPackage.Designer.cs
===================================================================
--- trunk/VSTools/VSPackage.Designer.cs	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/VSTools/VSPackage.Designer.cs	2006-04-19 15:47:20 UTC (rev 220)
@@ -8,7 +8,7 @@
 // </auto-generated>
 //------------------------------------------------------------------------------
 
-namespace Vsip.MyVSTools {
+namespace MySql.VSTools {
     using System;
     
     
@@ -39,7 +39,7 @@
         internal static global::System.Resources.ResourceManager ResourceManager {
             get {
                 if (object.ReferenceEquals(resourceMan, null)) {
-                    global::System.Resources.ResourceManager temp = new
global::System.Resources.ResourceManager("Vsip.MyVSTools.VSPackage",
typeof(VSPackage).Assembly);
+                    global::System.Resources.ResourceManager temp = new
global::System.Resources.ResourceManager("MySql.VSTools.VSPackage",
typeof(VSPackage).Assembly);
                     resourceMan = temp;
                 }
                 return resourceMan;
@@ -108,6 +108,13 @@
             }
         }
         
+        internal static System.Drawing.Bitmap column {
+            get {
+                object obj = ResourceManager.GetObject("column", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         internal static System.Drawing.Bitmap database {
             get {
                 object obj = ResourceManager.GetObject("database", resourceCulture);
@@ -213,6 +220,13 @@
             }
         }
         
+        internal static System.Drawing.Bitmap trigger {
+            get {
+                object obj = ResourceManager.GetObject("trigger", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Unable to delete
&apos;{0}&apos;.
         /// </summary>

Modified: trunk/VSTools/VSPackage.resx
===================================================================
--- trunk/VSTools/VSPackage.resx	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/VSTools/VSPackage.resx	2006-04-19 15:47:20 UTC (rev 220)
@@ -184,4 +184,10 @@
   <data name="view" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>Resources\View.16x16.bmp;System.Drawing.Bitmap, System.Drawing,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="trigger" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\db.Trigger.16x16.png;System.Drawing.Bitmap, System.Drawing,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="column" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\db.Column.16x16.png;System.Drawing.Bitmap, System.Drawing,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
 </root>
\ No newline at end of file

Modified: trunk/mysqlclient/ISSchemaProvider.cs
===================================================================
--- trunk/mysqlclient/ISSchemaProvider.cs	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/mysqlclient/ISSchemaProvider.cs	2006-04-19 15:47:20 UTC (rev 220)
@@ -13,27 +13,24 @@
         }
 
 
-        private DataTable Query(string table_name, string where, string[] restrictions)
+        private DataTable Query(string table_name, string[] keys, string[] values)
         {
-            string sql = "SELECT * FROM INFORMATION_SCHEMA." + table_name;
-            bool routines =
table_name.ToLower(System.Globalization.CultureInfo.CurrentCulture)
-                == "routines";
-            string schema_key = routines ? "ROUTINE_SCHEMA" : "TABLE_SCHEMA";
+            StringBuilder where = new StringBuilder();
+            StringBuilder query = new StringBuilder("SELECT * FROM INFORMATION_SCHEMA.");
+            query.Append(table_name);
 
-            string whereClause = where;
-            if (whereClause == null)
-                whereClause = String.Empty;
-
-            if (restrictions[0] != null)
+            for (int i=0; i < values.Length; i++)
             {
-                if (whereClause.Length > 0)
-                    whereClause += " AND ";
-                whereClause += schema_key + "='" + restrictions[0] + "'";
+                if (values[i] == null || values[i] == String.Empty) continue;
+                if (where.Length > 0)
+                    where.Append(" AND ");
+                where.AppendFormat("{0}='{1}'", keys[i], values[i]);
             }
-            if (whereClause.Length > 0)
-                sql += " WHERE " + whereClause;
 
-            return GetTable(sql);
+            if (where.Length > 0)
+                query.AppendFormat(" WHERE {0}", where.ToString());
+
+            return GetTable(query.ToString());
         }
 
         private DataTable GetTable(string sql)
@@ -74,14 +71,39 @@
 
         public override DataTable GetTables(string[] restrictions)
         {
-            return Query("TABLES", null, restrictions);
+            string[] keys = new string[4];
+            keys[0] = "TABLE_CATALOG";
+            keys[1] = "TABLE_sCHEMA";
+            keys[2] = "TABLE_NAME";
+            keys[3] = "TABLE_TYPE";
+            return Query("TABLES", keys, restrictions);
         }
 
+        public override DataTable GetColumns(string[] restrictions)
+        {
+            string[] keys = new string[4];
+            keys[0] = "TABLE_CATALOG";
+            keys[1] = "TABLE_sCHEMA";
+            keys[2] = "TABLE_NAME";
+            keys[3] = "COLUMN_NAME";
+            return Query("COLUMNS", keys, restrictions);
+        }
+
         public override DataTable GetViews(string[] restrictions)
         {
             return Query("VIEWS", null, restrictions);
         }
 
+        public override DataTable GetTriggers(string[] restrictions)
+        {
+            string[] keys = new string[4];
+            keys[0] = "TRIGGER_CATALOG";
+            keys[1] = "TRIGGER_sCHEMA";
+            keys[2] = "TRIGGER_NAME";
+            keys[3] = "EVENT_OBJECT_TABLE";
+            return Query("TRIGGERS", keys, restrictions);
+        }
+
         /// <summary>
         /// Return schema information about procedures and functions
         /// Restrictions supported are:

Modified: trunk/mysqlclient/NonISSchemaProvider.cs
===================================================================
--- trunk/mysqlclient/NonISSchemaProvider.cs	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/mysqlclient/NonISSchemaProvider.cs	2006-04-19 15:47:20 UTC (rev 220)
@@ -20,6 +20,11 @@
             throw new Exception("The method or operation is not implemented.");
         }
 
+        public override DataTable GetColumns(string[] restrictions)
+        {
+            throw new Exception("The method or operation is not implemented.");
+        }
+
         public override DataTable HelpCollection()
         {
             throw new Exception("The method or operation is not implemented.");
@@ -39,5 +44,10 @@
         {
             throw new MySqlException("The VIEWS collection is only supported on MySQL
version 5.0 and later");
         }
+
+        public override DataTable GetTriggers(string[] restrictions)
+        {
+            throw new MySqlException("The TRIGGERS collection is only supported on MySQL
version 5.0 and later");
+        }
     }
 }

Modified: trunk/mysqlclient/SchemaProvider.cs
===================================================================
--- trunk/mysqlclient/SchemaProvider.cs	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/mysqlclient/SchemaProvider.cs	2006-04-19 15:47:20 UTC (rev 220)
@@ -24,21 +24,27 @@
                     return GetDatabases();
                 case "tables":
                     return GetTables(restrictions);
+                case "columns":
+                    return GetColumns(restrictions);
                 case "views":
                     return GetViews(restrictions);
                 case "procedures":
                     return GetProcedures(restrictions);
                 case "procedure parameters":
                     return GetProcedureParameters(restrictions);
+                case "triggers":
+                    return GetTriggers(restrictions);
             }
             return HelpCollection();
         }
 
         public abstract DataTable GetDatabases();
         public abstract DataTable GetTables(string[] restrictions);
+        public abstract DataTable GetColumns(string[] restrictions);
         public abstract DataTable GetProcedures(string[] restrictions);
         public abstract DataTable GetProcedureParameters(string[] restrictions);
         public abstract DataTable GetViews(string[] restrictions);
+        public abstract DataTable GetTriggers(string[] restrictions);
         public abstract DataTable HelpCollection();
     }
 }

Modified: trunk/mysqlclient/common/DBConnectionString.cs
===================================================================
--- trunk/mysqlclient/common/DBConnectionString.cs	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/mysqlclient/common/DBConnectionString.cs	2006-04-19 15:47:20 UTC (rev 220)
@@ -48,6 +48,7 @@
             minPoolSize = 0;
             maxPoolSize = 100;
             port = 3306;
+            password = String.Empty;
         }
 
         public DBConnectionString(string connectString) : this()

Modified: trunk/mysqlclient/nativedriver.cs
===================================================================
--- trunk/mysqlclient/nativedriver.cs	2006-04-18 19:46:12 UTC (rev 219)
+++ trunk/mysqlclient/nativedriver.cs	2006-04-19 15:47:20 UTC (rev 220)
@@ -49,8 +49,6 @@
 		protected MySqlStreamWriter		writer;
 		private   BitArray				nullMap;
 
-//		private	int lastCommandResult;
-//		private	Hashtable commandResults;
         private int warningCount;
 
 		public NativeDriver(MySqlConnectionString settings) : base(settings)
@@ -58,8 +56,6 @@
 			packetSeq = 0;
 			isOpen = false;
 			maxPacketSize = 1047552;
-//			lastCommandResult = 0;
-//			commandResults = new Hashtable();
 		}
 
 		public ClientFlags Flags
@@ -73,11 +69,6 @@
 			set { maxPacketSize = value; }
 		}
 
-//		internal Hashtable CommandResults 
-//		{ 
-//			get { return commandResults; }
-//		}
-
 		/// <summary>
 		/// Returns true if this connection can handle batch SQL natively
 		/// This means MySQL 4.1.1 or later.

Thread
Connector/NET commit: r220 - in trunk: . VSTools VSTools/CtcComponents VSTools/Editors VSTools/Nodes VSTools/Resources mysqlclient mysqlclient/commonrburnett19 Apr