diff --git a/src/AddIns/Misc/SharpDbTools/Project/SharpDbTools.csproj b/src/AddIns/Misc/SharpDbTools/Project/SharpDbTools.csproj index 786c56d0e7..6fbf45f819 100644 --- a/src/AddIns/Misc/SharpDbTools/Project/SharpDbTools.csproj +++ b/src/AddIns/Misc/SharpDbTools/Project/SharpDbTools.csproj @@ -70,6 +70,13 @@ GetConnectionLogicalNameDialog.cs + + TableDescribeForm.cs + + + + TableDescribeForm.cs + diff --git a/src/AddIns/Misc/SharpDbTools/Project/Src/Model/ColumnNames.cs b/src/AddIns/Misc/SharpDbTools/Project/Src/Model/ColumnNames.cs index b393cb17d6..3a63ee13f8 100644 --- a/src/AddIns/Misc/SharpDbTools/Project/Src/Model/ColumnNames.cs +++ b/src/AddIns/Misc/SharpDbTools/Project/Src/Model/ColumnNames.cs @@ -24,5 +24,6 @@ namespace SharpDbTools.Model public const string InvariantName = "invariantName"; public const string Name = "name"; public const string ConnectionString = "connectionString"; + public const string TableName = "TABLE_NAME"; } } diff --git a/src/AddIns/Misc/SharpDbTools/Project/Src/Model/DbModelInfoService.cs b/src/AddIns/Misc/SharpDbTools/Project/Src/Model/DbModelInfoService.cs index 3c84f7ee0f..1b45992a73 100644 --- a/src/AddIns/Misc/SharpDbTools/Project/Src/Model/DbModelInfoService.cs +++ b/src/AddIns/Misc/SharpDbTools/Project/Src/Model/DbModelInfoService.cs @@ -71,6 +71,25 @@ namespace SharpDbTools.Model bool exists = cache.TryGetValue(name, out modelInfo); return modelInfo; } + + public static DataTable GetTableInfo(string modelName, string tableName) + { + LoggingService.Debug("-->GetTableInfo"); + DbModelInfo modelInfo = GetDbModelInfo(modelName); + DataTable columnTable = modelInfo.Tables[TableNames.Columns]; + DataRow[] columnsMetadata = columnTable.Select(ColumnNames.TableName + "='" + tableName + "'"); + LoggingService.Debug("found: " + columnsMetadata.Length + " columns belonging to table: " + tableName); + DataTable tableInfo = columnTable.Copy(); + tableInfo.Clear(); + foreach (DataRow r in columnsMetadata) { + DataRow newRow = tableInfo.NewRow(); + newRow.ItemArray = r.ItemArray; + tableInfo.Rows.Add(newRow); + tableInfo.AcceptChanges(); + } + return tableInfo; + + } public static DbModelInfo LoadMetadataFromConnection(string name) { diff --git a/src/AddIns/Misc/SharpDbTools/Project/Src/Model/TableNames.cs b/src/AddIns/Misc/SharpDbTools/Project/Src/Model/TableNames.cs index 732dc376e5..b08b7bcbcc 100644 --- a/src/AddIns/Misc/SharpDbTools/Project/Src/Model/TableNames.cs +++ b/src/AddIns/Misc/SharpDbTools/Project/Src/Model/TableNames.cs @@ -24,5 +24,6 @@ namespace SharpDbTools.Model public const string MetaDataCollections = "MetaDataCollections"; public const string ConnectionInfo = "ConnectionInfo"; public static string[] PrimaryObjects = new string[] { "Tables", "Procedures", "Functions", "Views", "Users" }; + public static string Columns = "Columns"; } } diff --git a/src/AddIns/Misc/SharpDbTools/Project/Src/ServerBrowserTool.cs b/src/AddIns/Misc/SharpDbTools/Project/Src/ServerBrowserTool.cs index 325c7e224f..e3046f37dd 100644 --- a/src/AddIns/Misc/SharpDbTools/Project/Src/ServerBrowserTool.cs +++ b/src/AddIns/Misc/SharpDbTools/Project/Src/ServerBrowserTool.cs @@ -21,6 +21,7 @@ using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Gui; using SharpDbTools.Model; using SharpDbTools.Connection; +using SharpDbTools.Viewer; namespace SharpDbTools { @@ -147,6 +148,7 @@ namespace SharpDbTools public TreeNode CreateDbModelInfoNode(string name) { TreeNode treeNode = new TreeNode(name); + treeNode.Tag = "ConnectionRoot"; // create and add the menustrip for this node NodeAwareContextMenuStrip cMenu = new NodeAwareContextMenuStrip(treeNode); @@ -317,6 +319,9 @@ namespace SharpDbTools ToolStripMenuItem menuItem = sender as ToolStripMenuItem; NodeAwareContextMenuStrip toolStrip = menuItem.Owner as NodeAwareContextMenuStrip; TreeNode node = toolStrip.TreeNode; + while ((node.Tag == null) || (!node.Tag.Equals("ConnectionRoot"))) { + node = node.Parent; + } string connectionLogicalName = node.Text; return connectionLogicalName; } @@ -370,7 +375,14 @@ namespace SharpDbTools public void DescribeTableClickHandler(object sender, EventArgs args) { - LoggingService.Debug("describe table clicked for: "); + string logicalConnectionName = getConnectionName(sender); + ToolStripMenuItem item = sender as ToolStripMenuItem; + NodeAwareContextMenuStrip s = item.Owner as NodeAwareContextMenuStrip; + string tableName = s.TreeNode.Text; + LoggingService.Debug("describe table clicked for: " + logicalConnectionName + " and table name: " + tableName); + DataTable tableInfo = DbModelInfoService.GetTableInfo(logicalConnectionName, tableName); + TableDescribeForm describeForm = new TableDescribeForm(tableInfo); + describeForm.Show(); } }