From 4258e4b44220c5f96997717a9b3441968108abd4 Mon Sep 17 00:00:00 2001 From: Karina Zhou Date: Tue, 9 Jun 2020 18:50:25 -0700 Subject: [PATCH] Fix | Fix SqlClientMetaDataCollectionNames.Parameters mismatching issue (#580) * Fix Parameters undefined issue and add test case * Update valid names and add tests --- .../SqlClientMetaDataCollectionNames.xml | 18 +++-- .../netcore/ref/Microsoft.Data.SqlClient.cs | 10 ++- .../SqlClientMetaDataCollectionNames.cs | 13 +-- .../netfx/ref/Microsoft.Data.SqlClient.cs | 10 ++- .../SqlClientMetaDataCollectionNames.cs | 13 +-- .../SqlClientMetaDataCollectionNamesTest.cs | 5 +- .../ConnectionSchemaTest.cs | 79 +++++++++++++++++-- 7 files changed, 116 insertions(+), 32 deletions(-) diff --git a/doc/snippets/Microsoft.Data.SqlClient/SqlClientMetaDataCollectionNames.xml b/doc/snippets/Microsoft.Data.SqlClient/SqlClientMetaDataCollectionNames.xml index 8aa207b418..e013016ee9 100644 --- a/doc/snippets/Microsoft.Data.SqlClient/SqlClientMetaDataCollectionNames.xml +++ b/doc/snippets/Microsoft.Data.SqlClient/SqlClientMetaDataCollectionNames.xml @@ -24,14 +24,10 @@ A constant for use with the **GetSchema** method that represents the **Indexes** collection. To be added. - - A constant for use with the **GetSchema** method that represents the **Parameters** collection. + + A constant for use with the **GetSchema** method that represents the **ProcedureParameters** collection. To be added. - - - A constant for use with the **GetSchema** method that represents the **ProcedureColumns** collection. - To be added. - + A constant for use with the **GetSchema** method that represents the **Procedures** collection. To be added. @@ -56,5 +52,13 @@ A constant for use with the **GetSchema** method that represents the **Views** collection. To be added. + + A constant for use with the **GetSchema** method that represents the **AllColumns** collection. + To be added. + + + A constant for use with the **GetSchema** method that represents the **ColumnSetColumns** collection. + To be added. + diff --git a/src/Microsoft.Data.SqlClient/netcore/ref/Microsoft.Data.SqlClient.cs b/src/Microsoft.Data.SqlClient/netcore/ref/Microsoft.Data.SqlClient.cs index 52e6e35dd3..461bee2eaf 100644 --- a/src/Microsoft.Data.SqlClient/netcore/ref/Microsoft.Data.SqlClient.cs +++ b/src/Microsoft.Data.SqlClient/netcore/ref/Microsoft.Data.SqlClient.cs @@ -328,10 +328,8 @@ public static partial class SqlClientMetaDataCollectionNames public static readonly string IndexColumns; /// public static readonly string Indexes; - /// - public static readonly string Parameters; - /// - public static readonly string ProcedureColumns; + /// + public static readonly string ProcedureParameters; /// public static readonly string Procedures; /// @@ -344,6 +342,10 @@ public static partial class SqlClientMetaDataCollectionNames public static readonly string ViewColumns; /// public static readonly string Views; + /// + public static readonly string AllColumns; + /// + public static readonly string ColumnSetColumns; } /// [System.ComponentModel.DefaultEventAttribute("RecordsAffected")] diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlClientMetaDataCollectionNames.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlClientMetaDataCollectionNames.cs index 7caf4421fa..1c805b53df 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlClientMetaDataCollectionNames.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlClientMetaDataCollectionNames.cs @@ -23,11 +23,8 @@ public static class SqlClientMetaDataCollectionNames /// public static readonly string Indexes = "Indexes"; - /// - public static readonly string Parameters = "Parameters"; - - /// - public static readonly string ProcedureColumns = "ProcedureColumns"; + /// + public static readonly string ProcedureParameters = "ProcedureParameters"; /// public static readonly string Procedures = "Procedures"; @@ -46,5 +43,11 @@ public static class SqlClientMetaDataCollectionNames /// public static readonly string Views = "Views"; + + /// + public static readonly string AllColumns = "AllColumns"; // supported starting from SQL Server 2008 + + /// + public static readonly string ColumnSetColumns = "ColumnSetColumns"; // supported starting from SQL Server 2008 } } diff --git a/src/Microsoft.Data.SqlClient/netfx/ref/Microsoft.Data.SqlClient.cs b/src/Microsoft.Data.SqlClient/netfx/ref/Microsoft.Data.SqlClient.cs index 345ebcea9e..197e886da2 100644 --- a/src/Microsoft.Data.SqlClient/netfx/ref/Microsoft.Data.SqlClient.cs +++ b/src/Microsoft.Data.SqlClient/netfx/ref/Microsoft.Data.SqlClient.cs @@ -365,10 +365,8 @@ public static partial class SqlClientMetaDataCollectionNames public static readonly string IndexColumns; /// public static readonly string Indexes; - /// - public static readonly string Parameters; - /// - public static readonly string ProcedureColumns; + /// + public static readonly string ProcedureParameters; /// public static readonly string Procedures; /// @@ -381,6 +379,10 @@ public static partial class SqlClientMetaDataCollectionNames public static readonly string ViewColumns; /// public static readonly string Views; + /// + public static readonly string AllColumns; + /// + public static readonly string ColumnSetColumns; } /// public sealed partial class SqlClientPermission : System.Data.Common.DBDataPermission diff --git a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlClientMetaDataCollectionNames.cs b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlClientMetaDataCollectionNames.cs index eb2db23548..5400ac2fb0 100644 --- a/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlClientMetaDataCollectionNames.cs +++ b/src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlClientMetaDataCollectionNames.cs @@ -22,11 +22,8 @@ public static class SqlClientMetaDataCollectionNames /// public static readonly string Indexes = "Indexes"; - /// - public static readonly string Parameters = "Parameters"; - - /// - public static readonly string ProcedureColumns = "ProcedureColumns"; + /// + public static readonly string ProcedureParameters = "ProcedureParameters"; /// public static readonly string Procedures = "Procedures"; @@ -46,5 +43,11 @@ public static class SqlClientMetaDataCollectionNames /// public static readonly string Views = "Views"; + /// + public static readonly string AllColumns = "AllColumns"; // supported starting from SQL Server 2008 + + /// + public static readonly string ColumnSetColumns = "ColumnSetColumns"; // supported starting from SQL Server 2008 + } } diff --git a/src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlClientMetaDataCollectionNamesTest.cs b/src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlClientMetaDataCollectionNamesTest.cs index 69ed6d6304..789949ee68 100644 --- a/src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlClientMetaDataCollectionNamesTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlClientMetaDataCollectionNamesTest.cs @@ -16,14 +16,15 @@ public void ValuesTest() Assert.Equal("ForeignKeys", SqlClientMetaDataCollectionNames.ForeignKeys); Assert.Equal("IndexColumns", SqlClientMetaDataCollectionNames.IndexColumns); Assert.Equal("Indexes", SqlClientMetaDataCollectionNames.Indexes); - Assert.Equal("Parameters", SqlClientMetaDataCollectionNames.Parameters); - Assert.Equal("ProcedureColumns", SqlClientMetaDataCollectionNames.ProcedureColumns); + Assert.Equal("ProcedureParameters", SqlClientMetaDataCollectionNames.ProcedureParameters); Assert.Equal("Procedures", SqlClientMetaDataCollectionNames.Procedures); Assert.Equal("Tables", SqlClientMetaDataCollectionNames.Tables); Assert.Equal("UserDefinedTypes", SqlClientMetaDataCollectionNames.UserDefinedTypes); Assert.Equal("Users", SqlClientMetaDataCollectionNames.Users); Assert.Equal("ViewColumns", SqlClientMetaDataCollectionNames.ViewColumns); Assert.Equal("Views", SqlClientMetaDataCollectionNames.Views); + Assert.Equal("AllColumns", SqlClientMetaDataCollectionNames.AllColumns); + Assert.Equal("ColumnSetColumns", SqlClientMetaDataCollectionNames.ColumnSetColumns); } } } diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataBaseSchemaTest/ConnectionSchemaTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataBaseSchemaTest/ConnectionSchemaTest.cs index 6e7e1623a2..7b2742e8d6 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataBaseSchemaTest/ConnectionSchemaTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataBaseSchemaTest/ConnectionSchemaTest.cs @@ -12,17 +12,89 @@ public static class ConnectionSchemaTest { [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] - public static void GetAllTablesFromSchema() + public static void GetTablesFromSchema() { VerifySchemaTable(SqlClientMetaDataCollectionNames.Tables, new string[] { "TABLE_CATALOG", "TABLE_SCHEMA", "TABLE_NAME", "TABLE_TYPE" }); } [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] - public static void GetAllProceduresFromSchema() + public static void GetProceduresFromSchema() { VerifySchemaTable(SqlClientMetaDataCollectionNames.Procedures, new string[] { "ROUTINE_SCHEMA", "ROUTINE_NAME", "ROUTINE_TYPE" }); } + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + public static void GetProcedureParametersFromSchema() + { + VerifySchemaTable(SqlClientMetaDataCollectionNames.ProcedureParameters, new string[] { "PARAMETER_MODE", "PARAMETER_NAME" }); + } + + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + public static void GetDatabasesFromSchema() + { + VerifySchemaTable(SqlClientMetaDataCollectionNames.Databases, new string[] { "database_name", "dbid", "create_date" }); + } + + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + public static void GetForeignKeysFromSchema() + { + VerifySchemaTable(SqlClientMetaDataCollectionNames.ForeignKeys, new string[] { "CONSTRAINT_TYPE", "IS_DEFERRABLE", "INITIALLY_DEFERRED" }); + } + + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + public static void GetIndexesFromSchema() + { + VerifySchemaTable(SqlClientMetaDataCollectionNames.Indexes, new string[] { "index_name", "constraint_name" }); + } + + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + public static void GetIndexColumnsFromSchema() + { + VerifySchemaTable(SqlClientMetaDataCollectionNames.IndexColumns, new string[] { "index_name", "KeyType", "column_name" }); + } + + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + public static void GetColumnsFromSchema() + { + VerifySchemaTable(SqlClientMetaDataCollectionNames.Columns, new string[] { "IS_NULLABLE", "COLUMN_DEFAULT" }); + } + + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + public static void GetAllColumnsFromSchema() + { + VerifySchemaTable(SqlClientMetaDataCollectionNames.AllColumns, new string[] { "IS_NULLABLE", "COLUMN_DEFAULT", "IS_FILESTREAM", "IS_SPARSE", "IS_COLUMN_SET" }); + } + + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + public static void GetColumnSetColumnsFromSchema() + { + VerifySchemaTable(SqlClientMetaDataCollectionNames.ColumnSetColumns, new string[] { "IS_NULLABLE", "COLUMN_DEFAULT", "IS_FILESTREAM", "IS_SPARSE", "IS_COLUMN_SET" }); + } + + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + public static void GetUsersFromSchema() + { + VerifySchemaTable(SqlClientMetaDataCollectionNames.Users, new string[] { "uid", "user_name" }); + } + + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + public static void GetViewsFromSchema() + { + VerifySchemaTable(SqlClientMetaDataCollectionNames.Views, new string[] { "TABLE_NAME", "CHECK_OPTION", "IS_UPDATABLE" }); + } + + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + public static void GetViewColumnsFromSchema() + { + VerifySchemaTable(SqlClientMetaDataCollectionNames.ViewColumns, new string[] { "VIEW_CATALOG", "VIEW_SCHEMA", "VIEW_NAME" }); + } + + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + public static void GetUserDefinedTypesFromSchema() + { + VerifySchemaTable(SqlClientMetaDataCollectionNames.UserDefinedTypes, new string[] { "assembly_name", "version_revision", "culture_info" }); + } + private static void VerifySchemaTable(string schemaItemName, string[] testColumnNames) { SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(DataTestUtility.TCPConnectionString) @@ -36,9 +108,6 @@ private static void VerifySchemaTable(string schemaItemName, string[] testColumn connection.Open(); DataTable table = connection.GetSchema(schemaItemName); - // Display the contents of the table. - Assert.InRange(table.Rows.Count, 1, int.MaxValue); - // Get all table columns HashSet columnNames = new HashSet();