diff --git a/BUILDGUIDE.md b/BUILDGUIDE.md index 6f56080aa0..a6d2d04564 100644 --- a/BUILDGUIDE.md +++ b/BUILDGUIDE.md @@ -74,22 +74,22 @@ Once the environment is setup properly, execute the desired set of commands belo ## Run Functional Tests -Windows (`netfx x86`): +Windows (`netfx x86`): ```bash > dotnet test "src\Microsoft.Data.SqlClient\tests\FunctionalTests\Microsoft.Data.SqlClient.Tests.csproj" /p:Platform="Win32" /p:Configuration="Release" /p:TestTargetOS="Windowsnetfx" --no-build -v n --filter "category!=nonnetfxtests&category!=failing&category!=nonwindowstests" ``` -Windows (`netfx x64`): +Windows (`netfx x64`): ```bash > dotnet test "src\Microsoft.Data.SqlClient\tests\FunctionalTests\Microsoft.Data.SqlClient.Tests.csproj" /p:Platform="x64" /p:Configuration="Release" /p:TestTargetOS="Windowsnetfx" --no-build -v n --filter "category!=nonnetfxtests&category!=failing&category!=nonwindowstests" ``` -Windows (`netcoreapp`): +Windows (`netcoreapp`): ```bash > dotnet test "src\Microsoft.Data.SqlClient\tests\FunctionalTests\Microsoft.Data.SqlClient.Tests.csproj" /p:Platform="AnyCPU" /p:Configuration="Release" /p:TestTargetOS="Windowsnetcoreapp" --no-build -v n --filter "category!=nonnetcoreapptests&category!=failing&category!=nonwindowstests" ``` -Unix (`netcoreapp`): +Unix (`netcoreapp`): ```bash > dotnet test "src/Microsoft.Data.SqlClient/tests/FunctionalTests/Microsoft.Data.SqlClient.Tests.csproj" /p:Platform="AnyCPU" /p:Configuration="Release" /p:TestTargetOS="Unixnetcoreapp" --no-build -v n --filter "category!=nonnetcoreapptests&category!=failing&category!=nonlinuxtests&category!=nonuaptests" ``` @@ -118,25 +118,26 @@ Manual Tests require the below setup to run: |SupportsIntegratedSecurity | (Optional) Whether or not the USER running tests has integrated security access to the target SQL Server.| `true` OR `false`| |SupportsFileStream | (Optional) Whether or not FileStream is enabled on SQL Server| `true` OR `false`| |UseManagedSNIOnWindows | (Optional) Enables testing with Managed SNI on Windows| `true` OR `false`| +|IsAzureSynpase | (Optional) When set to 'true', test suite runs compatible tests for Azure Synapse/Parallel Data Warehouse. | `true` OR `false`| Commands to run tests: -Windows (`netfx x86`): +Windows (`netfx x86`): ```bash > dotnet test "src\Microsoft.Data.SqlClient\tests\ManualTests\Microsoft.Data.SqlClient.ManualTesting.Tests.csproj" /p:Platform="Win32" /p:Configuration="Release" /p:TestTargetOS="Windowsnetfx" --no-build -v n --filter "category!=nonnetfxtests&category!=failing&category!=nonwindowstests" ``` -Windows (`netfx x64`): +Windows (`netfx x64`): ```bash > dotnet test "src\Microsoft.Data.SqlClient\tests\ManualTests\Microsoft.Data.SqlClient.ManualTesting.Tests.csproj" /p:Platform="x64" /p:Configuration="Release" /p:TestTargetOS="Windowsnetfx" --no-build -v n --filter "category!=nonnetfxtests&category!=failing&category!=nonwindowstests" ``` -Windows (`netcoreapp`): +Windows (`netcoreapp`): ```bash > dotnet test "src\Microsoft.Data.SqlClient\tests\ManualTests\Microsoft.Data.SqlClient.ManualTesting.Tests.csproj" /p:Platform="AnyCPU" /p:Configuration="Release" /p:TestTargetOS="Windowsnetcoreapp" --no-build -v n --filter "category!=nonnetcoreapptests&category!=failing&category!=nonwindowstests" ``` -Unix (`netcoreapp`): +Unix (`netcoreapp`): ```bash > dotnet test "src/Microsoft.Data.SqlClient/tests/ManualTests/Microsoft.Data.SqlClient.ManualTesting.Tests.csproj" /p:Platform="AnyCPU" /p:Configuration="Release" /p:TestTargetOS="Unixnetcoreapp" --no-build -v n --filter "category!=nonnetcoreapptests&category!=failing&category!=nonlinuxtests&category!=nonuaptests" ``` @@ -156,7 +157,7 @@ Tests can be built and run with custom "Reference Type" property that enables di - "NetStandardPackage" => Build and run tests with Microsoft.Data.SqlClient as Package Reference via .NET Standard Library > ************** IMPORTANT NOTE BEFORE PROCEEDING WITH "PACKAGE" AND "NETSTANDARDPACKAGE" REFERENCE TYPES *************** -> CREATE A NUGET PACKAGE WITH BELOW COMMAND AND ADD TO LOCAL FOLDER + UPDATE NUGET CONFIG FILE TO READ FROM THAT LOCATION +> CREATE A NUGET PACKAGE WITH BELOW COMMAND AND ADD TO LOCAL FOLDER + UPDATE NUGET CONFIG FILE TO READ FROM THAT LOCATION > ``` > > msbuild /p:configuration=Release > ``` diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/CoreCryptoTests.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/CoreCryptoTests.cs index a7e019ba43..82456e8636 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/CoreCryptoTests.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/CoreCryptoTests.cs @@ -11,7 +11,8 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests.AlwaysEncrypted { public class CoreCryptoTests : IClassFixture { - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Always Encrypted not supported in Azure Synapse. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] [PlatformSpecific(TestPlatforms.Windows)] public void TestAeadCryptoWithNativeBaseline() { @@ -45,7 +46,8 @@ public void TestAeadCryptoWithNativeBaseline() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Always Encrypted not supported in Azure Synapse. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] [PlatformSpecific(TestPlatforms.Windows)] public void TestRsaCryptoWithNativeBaseline() { diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/CspProviderExt.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/CspProviderExt.cs index 1944b79f17..49dd608d99 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/CspProviderExt.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/CspProviderExt.cs @@ -144,7 +144,7 @@ public void TestRoundTripWithCSPAndCertStoreProvider() } } - [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringSetupForAE))] [ClassData(typeof(AEConnectionStringProvider))] public void TestEncryptDecryptWithCSP(string connectionString) { diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/DDBasics/DDAsyncTest/DDAsyncTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/DDBasics/DDAsyncTest/DDAsyncTest.cs index b837f3983e..d1f7ed0a24 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/DDBasics/DDAsyncTest/DDAsyncTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/DDBasics/DDAsyncTest/DDAsyncTest.cs @@ -15,7 +15,7 @@ public static class DDAsyncTest [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void OpenConnection_WithAsyncTrue_ThrowsNotSupportedException() { - //Fails on NetCore + //Passes on NetCore var asyncConnectionString = DataTestUtility.TCPConnectionString + ";async=true"; Assert.Throws(() => { new SqlConnection(asyncConnectionString); }); } @@ -30,7 +30,8 @@ public static void OpenConnection_WithAsyncTrue() } #region <> - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Remove dependency on Northwind database by creating required table in setup. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void ExecuteCommand_WithNewConnection_ShouldPerformAsyncByDefault() { var executedProcessList = new List(); @@ -75,7 +76,8 @@ private static async Task ExecuteCommandWithNewConnectionAsync(string processNam #endregion #region <> - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parallel query execution on the same connection is not supported. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void ExecuteCommand_WithSharedConnection_ShouldPerformAsyncByDefault() { var executedProcessList = new List(); diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/DDBasics/DDDataTypesTest/DDDataTypesTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/DDBasics/DDDataTypesTest/DDDataTypesTest.cs index 8c028c9c1c..0d1e0e7e68 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/DDBasics/DDDataTypesTest/DDDataTypesTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/DDBasics/DDDataTypesTest/DDDataTypesTest.cs @@ -12,7 +12,8 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests { public static class DDDataTypesTest { - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Cannot find data type 'XML'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void XmlTest() { string tempTable = "xml_" + Guid.NewGuid().ToString().Replace('-', '_'); @@ -73,7 +74,8 @@ public static void XmlTest() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: The statement failed. Column 'col1' has a data type that cannot participate in a columnstore index. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void MaxTypesTest() { string tempTable = "max_" + Guid.NewGuid().ToString().Replace('-', '_'); diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/DDBasics/DDMARSTest/DDMARSTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/DDBasics/DDMARSTest/DDMARSTest.cs index c88eba6a3f..ad057e587d 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/DDBasics/DDMARSTest/DDMARSTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/DDBasics/DDMARSTest/DDMARSTest.cs @@ -8,7 +8,8 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests { public static class DDMARSTest { - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Remove dependency from Northwind database + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestMain() { string connstr = (new SqlConnectionStringBuilder(DataTestUtility.TCPConnectionString) { MultipleActiveResultSets = true }).ConnectionString; diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs index a3437647fa..65727fbc66 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs @@ -41,7 +41,7 @@ public static class DataTestUtility public static readonly bool SupportsLocalDb = false; public static readonly bool SupportsFileStream = false; public static readonly bool UseManagedSNIOnWindows = false; - + public static readonly bool IsAzureSynapse = false; public static readonly string DNSCachingConnString = null; public static readonly string DNSCachingServerCR = null; // this is for the control ring public static readonly string DNSCachingServerTR = null; // this is for the tenant ring @@ -79,6 +79,7 @@ static DataTestUtility() DNSCachingConnString = c.DNSCachingConnString; DNSCachingServerCR = c.DNSCachingServerCR; DNSCachingServerTR = c.DNSCachingServerTR; + IsAzureSynapse = c.IsAzureSynapse; IsDNSCachingSupportedCR = c.IsDNSCachingSupportedCR; IsDNSCachingSupportedTR = c.IsDNSCachingSupportedTR; EnclaveAzureDatabaseConnString = c.EnclaveAzureDatabaseConnString; @@ -243,21 +244,28 @@ public static bool IsSupportedDataClassification() public static bool IsDNSCachingSetup() => !string.IsNullOrEmpty(DNSCachingConnString); + // Synapse: Always Encrypted is not supported with Azure Synapse. + // Ref: https://feedback.azure.com/forums/307516-azure-synapse-analytics/suggestions/17858869-support-always-encrypted-in-sql-data-warehouse public static bool IsEnclaveAzureDatabaseSetup() { - return EnclaveEnabled && !string.IsNullOrEmpty(EnclaveAzureDatabaseConnString); + return EnclaveEnabled && !string.IsNullOrEmpty(EnclaveAzureDatabaseConnString) && IsNotAzureSynapse(); } - public static bool IsUdtTestDatabasePresent() => IsDatabasePresent(UdtTestDbName); + public static bool IsNotAzureSynapse() => !IsAzureSynapse; + + // Synapse: UDT Test Database not compatible with Azure Synapse. + public static bool IsUdtTestDatabasePresent() => IsDatabasePresent(UdtTestDbName) && IsNotAzureSynapse(); public static bool AreConnStringsSetup() { return !string.IsNullOrEmpty(NPConnectionString) && !string.IsNullOrEmpty(TCPConnectionString); } + // Synapse: Always Encrypted is not supported with Azure Synapse. + // Ref: https://feedback.azure.com/forums/307516-azure-synapse-analytics/suggestions/17858869-support-always-encrypted-in-sql-data-warehouse public static bool AreConnStringSetupForAE() { - return AEConnStrings.Count > 0; + return AEConnStrings.Count > 0 && IsNotAzureSynapse(); } public static bool IsAADPasswordConnStrSetup() @@ -280,19 +288,23 @@ public static bool IsNotAzureServer() return !AreConnStringsSetup() || !Utils.IsAzureSqlServer(new SqlConnectionStringBuilder((TCPConnectionString)).DataSource); } + // Synapse: Always Encrypted is not supported with Azure Synapse. + // Ref: https://feedback.azure.com/forums/307516-azure-synapse-analytics/suggestions/17858869-support-always-encrypted-in-sql-data-warehouse public static bool IsAKVSetupAvailable() { - return !string.IsNullOrEmpty(AKVUrl) && !string.IsNullOrEmpty(AKVClientId) && !string.IsNullOrEmpty(AKVClientSecret); + return !string.IsNullOrEmpty(AKVUrl) && !string.IsNullOrEmpty(AKVClientId) && !string.IsNullOrEmpty(AKVClientSecret) && IsNotAzureSynapse(); } public static bool IsUsingManagedSNI() => UseManagedSNIOnWindows; public static bool IsUsingNativeSNI() => !IsUsingManagedSNI(); + // Synapse: UTF8 collations are not supported with Azure Synapse. + // Ref: https://feedback.azure.com/forums/307516-azure-synapse-analytics/suggestions/40103791-utf-8-collations-should-be-supported-in-azure-syna public static bool IsUTF8Supported() { bool retval = false; - if (AreConnStringsSetup()) + if (AreConnStringsSetup() && IsNotAzureSynapse()) { using (SqlConnection connection = new SqlConnection(TCPConnectionString)) using (SqlCommand command = new SqlCommand()) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/ProviderAgnostic/ReaderTest/ReaderTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/ProviderAgnostic/ReaderTest/ReaderTest.cs index b2ecfdcec9..054d495760 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/ProviderAgnostic/ReaderTest/ReaderTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/ProviderAgnostic/ReaderTest/ReaderTest.cs @@ -11,7 +11,8 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests { public static class ReaderTest { - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Remove dependency from Northwind database + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestMain() { string connectionString = DataTestUtility.TCPConnectionString; diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AdapterTest/AdapterTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AdapterTest/AdapterTest.cs index c12d8ba220..6249c4fae3 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AdapterTest/AdapterTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AdapterTest/AdapterTest.cs @@ -64,7 +64,8 @@ public AdapterTest() InitDataValues(); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Remove Northwind dependency by creating required tables in setup. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void SimpleFillTest() { using (SqlConnection conn = new SqlConnection(DataTestUtility.TCPConnectionString)) @@ -85,7 +86,8 @@ public void SimpleFillTest() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Remove Northwind dependency by creating required tables in setup. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void PrepUnprepTest() { // share the connection @@ -171,7 +173,8 @@ public void PrepUnprepTest() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Create table statement contains a data type that is unsupported in Parallel Data Warehouse. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void SqlVariantTest() { string tableName = DataTestUtility.GenerateObjectName(); @@ -265,7 +268,8 @@ public void SqlVariantTest() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: The RETURN statement can only be used in user-defined functions. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void ParameterTest_AllTypes() { string procName = DataTestUtility.GenerateObjectName(); @@ -477,7 +481,8 @@ public void ParameterTest_AllTypes() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: The RETURN statement can only be used in user-defined functions. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void ParameterTest_InOut() { string procName = DataTestUtility.GetUniqueName("P"); @@ -574,7 +579,8 @@ public void ParameterTest_InOut() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Remove Northwind dependency by creating required tables in setup. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void UpdateTest() { using (SqlConnection conn = new SqlConnection(DataTestUtility.TCPConnectionString)) @@ -658,7 +664,8 @@ public void UpdateTest() // these next texts verify that 'bulk' operations work. If each command type modifies more than three rows, then we do a Prep/Exec instead of // adhoc ExecuteSql. - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Remove Northwind dependency by creating required tables in setup. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void BulkUpdateTest() { using (SqlConnection conn = new SqlConnection(DataTestUtility.TCPConnectionString)) @@ -755,7 +762,8 @@ public void BulkUpdateTest() // Makes sure that we can refresh an identity column in the dataSet // for a newly inserted row - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Must declare the scalar variable "@@IDENTITY". + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void UpdateRefreshTest() { string createIdentTable = @@ -849,7 +857,8 @@ public void UpdateRefreshTest() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Create table statement contains a data type that is unsupported in Parallel Data Warehouse. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void UpdateNullTest() { string tableName = DataTestUtility.GenerateObjectName(); @@ -905,7 +914,8 @@ public void UpdateNullTest() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Create table statement contains a data type that is unsupported in Parallel Data Warehouse. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void UpdateOffsetTest() { string tableName = DataTestUtility.GenerateObjectName(); @@ -981,16 +991,17 @@ public void UpdateOffsetTest() public void SelectAllTest() { // Test exceptions - using (SqlDataAdapter sqlAdapter = new SqlDataAdapter(new SqlCommand("select * from orders", new SqlConnection(DataTestUtility.TCPConnectionString)))) + using (SqlDataAdapter sqlAdapter = new SqlDataAdapter(new SqlCommand("select * from sys.columns", new SqlConnection(DataTestUtility.TCPConnectionString)))) { DataSet dataset = new DataSet(); - sqlAdapter.TableMappings.Add("Table", "orders"); + sqlAdapter.TableMappings.Add("View", "sys.columns"); sqlAdapter.Fill(dataset); } } // AutoGen test - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Remove Northwind dependency by creating required tables in setup. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void AutoGenUpdateTest() { using (SqlConnection conn = new SqlConnection(DataTestUtility.TCPConnectionString)) @@ -1061,7 +1072,8 @@ public void AutoGenUpdateTest() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Dynamic SQL generation is not supported against a SelectCommand that does not return any base table information. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void AutoGenErrorTest() { string createIdentTable = @@ -1104,9 +1116,11 @@ public void AutoGenErrorTest() } } - // These next tests verify that 'bulk' operations work. If each command type modifies more than three rows, then we do a Prep/Exec instead of + // These next tests verify that 'bulk' operations work. + // If each command type modifies more than three rows, then we do a Prep/Exec instead of // adhoc ExecuteSql. - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Remove Northwind dependency nu creating required tables in setup. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void AutoGenBulkUpdateTest() { using (SqlConnection conn = new SqlConnection(DataTestUtility.TCPConnectionString)) @@ -1256,7 +1270,8 @@ public void TestDeriveParameters() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 65: Incorrect syntax near 'as'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void TestReadOnlyColumnMetadata() { using (SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString)) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/AsyncCancelledConnectionsTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/AsyncCancelledConnectionsTest.cs index 5578e968ce..c3cc2d6b07 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/AsyncCancelledConnectionsTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/AsyncCancelledConnectionsTest.cs @@ -21,7 +21,6 @@ public AsyncCancelledConnectionsTest(ITestOutputHelper output) this._output = output; } - [ActiveIssue(490)] // This test seems to fail regularly in pipelines due to deadlocks. But it's still useful for local testing. [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public void CancelAsyncConnections() { diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/AsyncTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/AsyncTest.cs index 2b475c7a7c..080a66b394 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/AsyncTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/AsyncTest.cs @@ -10,7 +10,7 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests { public static class AsyncTest { - [ActiveIssue(5533)] + [ActiveIssue(5533)] // Async Operations slower than Sync operations [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void TestReadAsyncTimeConsumed() { diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/BeginExecAsyncTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/BeginExecAsyncTest.cs index 2c0673d507..4f7956745f 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/BeginExecAsyncTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/BeginExecAsyncTest.cs @@ -30,7 +30,8 @@ private static string GenerateCommandText() return commandText; } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 201: Incorrect syntax near ';'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void ExecuteTest() { using (SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString)) @@ -68,7 +69,8 @@ public static void ExecuteTest() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 201: Incorrect syntax near ';'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void FailureTest() { using (SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString)) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/BeginExecReaderAsyncTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/BeginExecReaderAsyncTest.cs index 87bbef247b..daa58b1851 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/BeginExecReaderAsyncTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/BeginExecReaderAsyncTest.cs @@ -33,7 +33,8 @@ private static string GenerateCommandText() return commandText; } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 198: Incorrect syntax near ';'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void ExecuteTest() { using (SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString)) @@ -51,7 +52,8 @@ public static void ExecuteTest() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 198: Incorrect syntax near ';'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void BeginExecuteReaderWithCallback() { object state = new object(); diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/XmlReaderAsyncTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/XmlReaderAsyncTest.cs index f72f474a78..52a5dde8f3 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/XmlReaderAsyncTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/XmlReaderAsyncTest.cs @@ -13,7 +13,8 @@ public static class XmlReaderAsyncTest private static string commandText = "SELECT * from dbo.Customers FOR XML AUTO, XMLDATA;"; - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 29: Incorrect syntax near 'FOR'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void ExecuteTest() { using (SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString)) @@ -34,7 +35,8 @@ public static void ExecuteTest() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Northwind dependency + Parse error at line: 1, column: 29: Incorrect syntax near 'FOR'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void ExceptionTest() { using (SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString)) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectionPoolTest/ConnectionPoolTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectionPoolTest/ConnectionPoolTest.cs index 872d5d385c..2696f354aa 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectionPoolTest/ConnectionPoolTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectionPoolTest/ConnectionPoolTest.cs @@ -21,7 +21,8 @@ public static void ConnectionPool_NonMars() RunDataTestForSingleConnString(_TCPConnectionString); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Fix this test for Azure Synapse. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void ConnectionPool_Mars() { RunDataTestForSingleConnString(_tcpMarsConnStr); diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs index ba9777a432..3e338a3b1e 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs @@ -26,7 +26,9 @@ public static class ConnectivityTest private static readonly string s_selectTableCmd = $"SELECT COUNT(*) FROM {s_tableName}"; private static readonly string s_dropDatabaseCmd = $"DROP DATABASE {s_databaseName}"; - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Stored procedure sp_who2 does not exist or is not supported. + // Synapse: SqlConnection.ServerProcessId is always retrieved as 0. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void EnvironmentHostNameSPIDTest() { SqlConnectionStringBuilder builder = (new SqlConnectionStringBuilder(DataTestUtility.TCPConnectionString) { Pooling = true }); @@ -44,6 +46,7 @@ public static void EnvironmentHostNameSPIDTest() reader.Read(); sessionSpid = reader.GetInt16(0); } + // Confirm Server process id is same as result of SELECT @@SPID Assert.Equal(sessionSpid, sqlClientSPID); @@ -113,7 +116,8 @@ public static void ConnectionTimeoutTestWithThread() Assert.True(timeElapsed < threshold); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Catalog view 'sysprocesses' is not supported in this version. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void LocalProcessIdTest() { SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(DataTestUtility.TCPConnectionString); @@ -205,6 +209,7 @@ public void SqlConnectionOpen() } } + // Synapse: Parse error at line: 1, column: 59: Incorrect syntax near 'SINGLE_USER' - No support for MULTI_USER [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))] public static void ConnectionKilledTest() { @@ -235,7 +240,8 @@ public static void ConnectionKilledTest() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: KILL not supported on Azure Synapse - Parse error at line: 1, column: 6: Incorrect syntax near '105'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void ConnectionResiliencySPIDTest() { SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(DataTestUtility.TCPConnectionString); @@ -249,7 +255,7 @@ public static void ConnectionResiliencySPIDTest() InternalConnectionWrapper wrapper = new InternalConnectionWrapper(conn, true, builder.ConnectionString); using (SqlCommand cmd = conn.CreateCommand()) { - cmd.CommandText = "SELECT TOP 1 * FROM dbo.Employees"; + cmd.CommandText = "SELECT @@SPID"; wrapper.KillConnectionByTSql(); bool cmdSuccess = false; try diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/TcpDefaultForAzureTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/TcpDefaultForAzureTest.cs index 8ebec2932c..0128571616 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/TcpDefaultForAzureTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/TcpDefaultForAzureTest.cs @@ -33,8 +33,11 @@ static TcpDefaultForAzureTest() builder.ConnectTimeout = 1; } - [SkipOnTargetFramework(TargetFrameworkMonikers.Uap)] // Cannot retrieve UseManagedSNI flag via reflection on UAP - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Named Pipes not supported for Azure Synapse + // Expected protocol TCP Provider in the error message, but received: A network-related or instance-specific error occurred while establishing a connection to SQL Server. + // The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. + // (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void NonAzureNoProtocolConnectionTest() { builder.DataSource = InvalidHostname; diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataClassificationTest/DataClassificationTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataClassificationTest/DataClassificationTest.cs index 51ff126410..8119bd2586 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataClassificationTest/DataClassificationTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataClassificationTest/DataClassificationTest.cs @@ -14,7 +14,8 @@ public static class DataClassificationTest { private static string s_tableName; - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsSupportedDataClassification))] + // Synapse: Azure Synapse does not support RANK + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse), nameof(DataTestUtility.IsSupportedDataClassification))] public static void TestDataClassificationResultSetRank() { s_tableName = DataTestUtility.GetUniqueNameForSqlServer("DC"); @@ -98,11 +99,11 @@ private static void VerifySensitivityClassification(SqlDataReader reader, bool r { if (columnPos == 1 || columnPos == 2) { - Assert.True(sp.SensitivityRank == SensitivityRank.LOW); + Assert.Equal(SensitivityRank.LOW, sp.SensitivityRank); } else if (columnPos == 6 || columnPos == 7) { - Assert.True(sp.SensitivityRank == SensitivityRank.MEDIUM); + Assert.Equal(SensitivityRank.MEDIUM, sp.SensitivityRank); } } else diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataReaderTest/DataReaderTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataReaderTest/DataReaderTest.cs index 2e1c32c716..723fafc2a2 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataReaderTest/DataReaderTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataReaderTest/DataReaderTest.cs @@ -69,7 +69,8 @@ public static void MultiQuerySchema() // Checks for the IsColumnSet bit in the GetSchemaTable for Sparse columns - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Cannot find data type 'xml'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void CheckSparseColumnBit() { const int sparseColumns = 4095; @@ -130,6 +131,7 @@ public static void CheckSparseColumnBit() } } + // Synapse: Statement 'Drop Database' is not supported in this version of SQL Server. [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))] public static void CollatedDataReaderTest() { @@ -210,7 +212,8 @@ private static bool IsColumnBitSet(SqlConnection con, string selectQuery, int in return columnSetPresent; } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Enforced unique constraints are not supported. To create an unenforced unique constraint you must include the NOT ENFORCED syntax as part of your statement. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void CheckHiddenColumns() { // hidden columns can be found by using CommandBehavior.KeyInfo or at the sql level diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs index 1eab7e65c3..2dc5dfcb89 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs @@ -37,7 +37,8 @@ public static void RunAllTestsForSingleServer_TCP() RunAllTestsForSingleServer(DataTestUtility.TCPConnectionString); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: The statement failed. Column 'foo' has a data type that cannot participate in a columnstore index. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static async Task AsyncMultiPacketStreamRead() { int packetSize = 514; // force small packet size so we can quickly check multi packet reads diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DateTimeTest/DateTimeTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DateTimeTest/DateTimeTest.cs index 421f374bb4..af3e5d39b4 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DateTimeTest/DateTimeTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DateTimeTest/DateTimeTest.cs @@ -55,7 +55,8 @@ public static void SQLBU503290Test() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: CREATE or ALTER PROCEDURE statement uses syntax or features that are not supported in SQL Server PDW. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void ReaderParameterTest() { string tableName = "#t_" + Guid.NewGuid().ToString().Replace('-', '_'); diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ExceptionTest/ExceptionTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ExceptionTest/ExceptionTest.cs index 6f7d9ad6cd..150e256435 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ExceptionTest/ExceptionTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ExceptionTest/ExceptionTest.cs @@ -50,7 +50,8 @@ public static void WarningTest() private static bool EmployeesTableHasFullTextIndex() { - if (DataTestUtility.TCPConnectionString == null) + // Test case not supported on Azure Synapse. + if (DataTestUtility.TCPConnectionString == null || DataTestUtility.IsAzureSynapse) return false; using (SqlConnection conn = new SqlConnection(DataTestUtility.TCPConnectionString)) @@ -64,6 +65,7 @@ private static bool EmployeesTableHasFullTextIndex() } } + // TODO Synapse: Remove dependency from Northwind database. [ConditionalFact(nameof(EmployeesTableHasFullTextIndex))] public static void WarningsBeforeRowsTest() { @@ -149,6 +151,7 @@ private static bool CheckThatExceptionsAreDistinctButHaveSameData(SqlException e return true; } + // Synapse: 110003;Invalid user or password [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))] public static void ExceptionTests() { @@ -183,7 +186,8 @@ public static void ExceptionTests() VerifyConnectionFailure(() => GenerateConnectionException(badBuilder.ConnectionString), errorMessage, (ex) => VerifyException(ex, 1, 18456, 1, 14)); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: 110003;Invalid user or password + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void VariousExceptionTests() { SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(DataTestUtility.TCPConnectionString); diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/MARSSessionPoolingTest/MARSSessionPoolingTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/MARSSessionPoolingTest/MARSSessionPoolingTest.cs index 0df83abb9f..b205ee0af2 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/MARSSessionPoolingTest/MARSSessionPoolingTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/MARSSessionPoolingTest/MARSSessionPoolingTest.cs @@ -32,21 +32,24 @@ public static class MARSSessionPoolingTest MultipleActiveResultSets = true }).ConnectionString; - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Catalog view 'dm_exec_connections' is not supported in this version. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void MarsExecuteScalar_AllFlavors() { TestMARSSessionPooling("Case: Text, ExecuteScalar", _testConnString, CommandType.Text, ExecuteType.ExecuteScalar, ReaderTestType.ReaderClose, GCType.Wait); TestMARSSessionPooling("Case: RPC, ExecuteScalar", _testConnString, CommandType.StoredProcedure, ExecuteType.ExecuteScalar, ReaderTestType.ReaderClose, GCType.Wait); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Catalog view 'dm_exec_connections' is not supported in this version. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void MarsExecuteNonQuery_AllFlavors() { TestMARSSessionPooling("Case: Text, ExecuteNonQuery", _testConnString, CommandType.Text, ExecuteType.ExecuteNonQuery, ReaderTestType.ReaderClose, GCType.Wait); TestMARSSessionPooling("Case: RPC, ExecuteNonQuery", _testConnString, CommandType.StoredProcedure, ExecuteType.ExecuteNonQuery, ReaderTestType.ReaderClose, GCType.Wait); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Catalog view 'dm_exec_connections' is not supported in this version. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void MarsExecuteReader_Text_NoGC() { TestMARSSessionPooling("Case: Text, ExecuteReader, ReaderClose", _testConnString, CommandType.Text, ExecuteType.ExecuteReader, ReaderTestType.ReaderClose, GCType.Wait); @@ -54,7 +57,8 @@ public static void MarsExecuteReader_Text_NoGC() TestMARSSessionPooling("Case: Text, ExecuteReader, ConnectionClose", _testConnString, CommandType.Text, ExecuteType.ExecuteReader, ReaderTestType.ConnectionClose, GCType.Wait); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Stored procedure sp_who does not exist or is not supported. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void MarsExecuteReader_RPC_NoGC() { TestMARSSessionPooling("Case: RPC, ExecuteReader, ReaderClose", _testConnString, CommandType.StoredProcedure, ExecuteType.ExecuteReader, ReaderTestType.ReaderClose, GCType.Wait); @@ -62,16 +66,18 @@ public static void MarsExecuteReader_RPC_NoGC() TestMARSSessionPooling("Case: RPC, ExecuteReader, ConnectionClose", _testConnString, CommandType.StoredProcedure, ExecuteType.ExecuteReader, ReaderTestType.ConnectionClose, GCType.Wait); } + // Synapse: Catalog view 'dm_exec_connections' is not supported in this version. [ActiveIssue(11167)] - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void MarsExecuteReader_Text_WithGC() { TestMARSSessionPooling("Case: Text, ExecuteReader, GC-Wait", _testConnString, CommandType.Text, ExecuteType.ExecuteReader, ReaderTestType.ReaderGC, GCType.Wait); TestMARSSessionPooling("Case: Text, ExecuteReader, GC-NoWait", _testConnString, CommandType.Text, ExecuteType.ExecuteReader, ReaderTestType.ReaderGC, GCType.NoWait); } + // Synapse: Stored procedure sp_who does not exist or is not supported. [ActiveIssue(8959)] - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void MarsExecuteReader_StoredProcedure_WithGC() { TestMARSSessionPooling("Case: RPC, ExecuteReader, GC-Wait", _testConnString, CommandType.StoredProcedure, ExecuteType.ExecuteReader, ReaderTestType.ReaderGC, GCType.Wait); diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/MARSTest/MARSTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/MARSTest/MARSTest.cs index 0bd02d35b9..4003ffec00 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/MARSTest/MARSTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/MARSTest/MARSTest.cs @@ -35,7 +35,7 @@ public static void NamedPipesMARSTest() } #if DEBUG - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void MARSAsyncTimeoutTest() { using (SqlConnection connection = new SqlConnection(_connStr)) @@ -132,33 +132,36 @@ public static void MARSSyncTimeoutTest() [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void MARSSyncBusyReaderTest() { + var query = "SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10"; + var rowCount = 10; + using (SqlConnection conn = new SqlConnection(_connStr)) { conn.Open(); - using (SqlDataReader reader1 = (new SqlCommand("select * from Orders", conn)).ExecuteReader()) + using (SqlDataReader reader1 = (new SqlCommand(query, conn)).ExecuteReader()) { int rows1 = 0; while (reader1.Read()) { rows1++; - if (rows1 == 415) + if (rows1 == rowCount / 2) break; } - Assert.True(rows1 == 415, "MARSSyncBusyReaderTest Failure, #1"); + Assert.True(rows1 == rowCount / 2, "MARSSyncBusyReaderTest Failure, #1"); - using (SqlDataReader reader2 = (new SqlCommand("select * from Orders", conn)).ExecuteReader()) + using (SqlDataReader reader2 = (new SqlCommand(query, conn)).ExecuteReader()) { int rows2 = 0; while (reader2.Read()) { rows2++; - if (rows2 == 415) + if (rows2 == rowCount / 2) break; } - Assert.True(rows2 == 415, "MARSSyncBusyReaderTest Failure, #2"); + Assert.True(rows2 == rowCount / 2, "MARSSyncBusyReaderTest Failure, #2"); - for (int i = 415; i < 830; i++) + for (int i = rowCount / 2; i < rowCount; i++) { Assert.True(reader1.Read() && reader2.Read(), "MARSSyncBusyReaderTest Failure #3"); Assert.True(reader1.GetInt32(0) == reader2.GetInt32(0), @@ -180,11 +183,11 @@ public static void MARSSyncExecuteNonQueryTest() { conn.Open(); - using (SqlCommand comm1 = new SqlCommand("select * from Orders", conn)) - using (SqlCommand comm2 = new SqlCommand("select * from Orders", conn)) - using (SqlCommand comm3 = new SqlCommand("select * from Orders", conn)) - using (SqlCommand comm4 = new SqlCommand("select * from Orders", conn)) - using (SqlCommand comm5 = new SqlCommand("select * from Orders", conn)) + using (SqlCommand comm1 = new SqlCommand("select 1", conn)) + using (SqlCommand comm2 = new SqlCommand("select 1", conn)) + using (SqlCommand comm3 = new SqlCommand("select 1", conn)) + using (SqlCommand comm4 = new SqlCommand("select 1", conn)) + using (SqlCommand comm5 = new SqlCommand("select 1", conn)) { comm1.ExecuteNonQuery(); comm2.ExecuteNonQuery(); @@ -198,50 +201,53 @@ public static void MARSSyncExecuteNonQueryTest() [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void MARSSyncExecuteReaderTest1() { + var query = "SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10"; + var rowCount = 10; + using (SqlConnection conn = new SqlConnection(_connStr)) { conn.Open(); - using (SqlDataReader reader1 = (new SqlCommand("select * from Orders", conn)).ExecuteReader()) - using (SqlDataReader reader2 = (new SqlCommand("select * from Orders", conn)).ExecuteReader()) - using (SqlDataReader reader3 = (new SqlCommand("select * from Orders", conn)).ExecuteReader()) - using (SqlDataReader reader4 = (new SqlCommand("select * from Orders", conn)).ExecuteReader()) - using (SqlDataReader reader5 = (new SqlCommand("select * from Orders", conn)).ExecuteReader()) + using (SqlDataReader reader1 = (new SqlCommand(query, conn)).ExecuteReader()) + using (SqlDataReader reader2 = (new SqlCommand(query, conn)).ExecuteReader()) + using (SqlDataReader reader3 = (new SqlCommand(query, conn)).ExecuteReader()) + using (SqlDataReader reader4 = (new SqlCommand(query, conn)).ExecuteReader()) + using (SqlDataReader reader5 = (new SqlCommand(query, conn)).ExecuteReader()) { int rows = 0; while (reader1.Read()) { rows++; } - Assert.True(rows == 830, "MARSSyncExecuteReaderTest1 failure, #1"); + Assert.True(rows == rowCount, "MARSSyncExecuteReaderTest1 failure, #1"); rows = 0; while (reader2.Read()) { rows++; } - Assert.True(rows == 830, "MARSSyncExecuteReaderTest1 failure, #2"); + Assert.True(rows == rowCount, "MARSSyncExecuteReaderTest1 failure, #2"); rows = 0; while (reader3.Read()) { rows++; } - Assert.True(rows == 830, "MARSSyncExecuteReaderTest1 failure, #3"); + Assert.True(rows == rowCount, "MARSSyncExecuteReaderTest1 failure, #3"); rows = 0; while (reader4.Read()) { rows++; } - Assert.True(rows == 830, "MARSSyncExecuteReaderTest1 failure, #4"); + Assert.True(rows == rowCount, "MARSSyncExecuteReaderTest1 failure, #4"); rows = 0; while (reader5.Read()) { rows++; } - Assert.True(rows == 830, "MARSSyncExecuteReaderTest1 failure, #5"); + Assert.True(rows == rowCount, "MARSSyncExecuteReaderTest1 failure, #5"); } } } @@ -254,17 +260,13 @@ public static void MARSSyncExecuteReaderTest2() { conn.Open(); - using (SqlDataReader reader1 = (new SqlCommand("select * from Orders", conn)).ExecuteReader()) - using (SqlDataReader reader2 = (new SqlCommand("select * from Orders", conn)).ExecuteReader()) - using (SqlDataReader reader3 = (new SqlCommand("select * from Orders", conn)).ExecuteReader()) - using (SqlDataReader reader4 = (new SqlCommand("select * from Orders", conn)).ExecuteReader()) - using (SqlDataReader reader5 = (new SqlCommand("select * from Orders", conn)).ExecuteReader()) + using (SqlDataReader reader1 = (new SqlCommand("select 1", conn)).ExecuteReader()) + using (SqlDataReader reader2 = (new SqlCommand("select 1", conn)).ExecuteReader()) + using (SqlDataReader reader3 = (new SqlCommand("select 1", conn)).ExecuteReader()) + using (SqlDataReader reader4 = (new SqlCommand("select 1", conn)).ExecuteReader()) + using (SqlDataReader reader5 = (new SqlCommand("select 1", conn)).ExecuteReader()) { - for (int i = 0; i < 830; i++) - { - Assert.True(reader1.Read() && reader2.Read() && reader3.Read() && reader4.Read() && reader5.Read(), "MARSSyncExecuteReaderTest2 Failure #1"); - } - + Assert.True(reader1.Read() && reader2.Read() && reader3.Read() && reader4.Read() && reader5.Read(), "MARSSyncExecuteReaderTest2 Failure #1"); Assert.False(reader1.Read() || reader2.Read() || reader3.Read() || reader4.Read() || reader5.Read(), "MARSSyncExecuteReaderTest2 Failure #2"); } } @@ -277,28 +279,25 @@ public static void MARSSyncExecuteReaderTest3() { conn.Open(); - using (SqlDataReader reader1 = (new SqlCommand("select * from Orders", conn)).ExecuteReader()) - using (SqlDataReader reader2 = (new SqlCommand("select * from Orders", conn)).ExecuteReader()) - using (SqlDataReader reader3 = (new SqlCommand("select * from Orders", conn)).ExecuteReader()) - using (SqlDataReader reader4 = (new SqlCommand("select * from Orders", conn)).ExecuteReader()) - using (SqlDataReader reader5 = (new SqlCommand("select * from Orders", conn)).ExecuteReader()) + using (SqlDataReader reader1 = (new SqlCommand("select 1", conn)).ExecuteReader()) + using (SqlDataReader reader2 = (new SqlCommand("select 1", conn)).ExecuteReader()) + using (SqlDataReader reader3 = (new SqlCommand("select 1", conn)).ExecuteReader()) + using (SqlDataReader reader4 = (new SqlCommand("select 1", conn)).ExecuteReader()) + using (SqlDataReader reader5 = (new SqlCommand("select 1", conn)).ExecuteReader()) { - for (int i = 0; i < 830; i++) - { - Assert.True(reader1.Read() && reader2.Read() && reader3.Read() && reader4.Read() && reader5.Read(), "MARSSyncExecuteReaderTest3 Failure #1"); - - // All reads succeeded - check values. - Assert.True(reader1.GetInt32(0) == reader2.GetInt32(0) && - reader2.GetInt32(0) == reader3.GetInt32(0) && - reader3.GetInt32(0) == reader4.GetInt32(0) && - reader4.GetInt32(0) == reader5.GetInt32(0), - "MARSSyncExecuteReaderTest3, Failure #2" + "\n" + - "reader1.GetInt32(0): " + reader1.GetInt32(0) + "\n" + - "reader2.GetInt32(0): " + reader2.GetInt32(0) + "\n" + - "reader3.GetInt32(0): " + reader3.GetInt32(0) + "\n" + - "reader4.GetInt32(0): " + reader4.GetInt32(0) + "\n" + - "reader5.GetInt32(0): " + reader5.GetInt32(0)); - } + Assert.True(reader1.Read() && reader2.Read() && reader3.Read() && reader4.Read() && reader5.Read(), "MARSSyncExecuteReaderTest3 Failure #1"); + + // All reads succeeded - check values. + Assert.True(reader1.GetInt32(0) == reader2.GetInt32(0) && + reader2.GetInt32(0) == reader3.GetInt32(0) && + reader3.GetInt32(0) == reader4.GetInt32(0) && + reader4.GetInt32(0) == reader5.GetInt32(0), + "MARSSyncExecuteReaderTest3, Failure #2" + "\n" + + "reader1.GetInt32(0): " + reader1.GetInt32(0) + "\n" + + "reader2.GetInt32(0): " + reader2.GetInt32(0) + "\n" + + "reader3.GetInt32(0): " + reader3.GetInt32(0) + "\n" + + "reader4.GetInt32(0): " + reader4.GetInt32(0) + "\n" + + "reader5.GetInt32(0): " + reader5.GetInt32(0)); Assert.False(reader1.Read() || reader2.Read() || reader3.Read() || reader4.Read() || reader5.Read(), "MARSSyncExecuteReaderTest3 Failure #3"); } @@ -312,15 +311,15 @@ public static void MARSSyncExecuteReaderTest4() { conn.Open(); - using (SqlDataReader reader1 = (new SqlCommand("select * from Orders where OrderID = 10248", conn)).ExecuteReader()) - using (SqlDataReader reader2 = (new SqlCommand("select * from Orders where OrderID = 10249", conn)).ExecuteReader()) - using (SqlDataReader reader3 = (new SqlCommand("select * from Orders where OrderID = 10250", conn)).ExecuteReader()) + using (SqlDataReader reader1 = (new SqlCommand("select 1", conn)).ExecuteReader()) + using (SqlDataReader reader2 = (new SqlCommand("select 2", conn)).ExecuteReader()) + using (SqlDataReader reader3 = (new SqlCommand("select 3", conn)).ExecuteReader()) { Assert.True(reader1.Read() && reader2.Read() && reader3.Read(), "MARSSyncExecuteReaderTest4 failure #1"); - Assert.True(reader1.GetInt32(0) == 10248 && - reader2.GetInt32(0) == 10249 && - reader3.GetInt32(0) == 10250, + Assert.True(reader1.GetInt32(0) == 1 && + reader2.GetInt32(0) == 2 && + reader3.GetInt32(0) == 3, "MARSSyncExecuteReaderTest4 failure #2"); Assert.False(reader1.Read() || reader2.Read() || reader3.Read(), "MARSSyncExecuteReaderTest4 failure #3"); @@ -331,7 +330,7 @@ public static void MARSSyncExecuteReaderTest4() [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void MARSMultiDataReaderErrTest() { - string queryString = "SELECT TOP 3 OrderID, CustomerID FROM dbo.Orders"; + string queryString = "SELECT 1"; // With MARS on, one SqlCommand cannot have multiple DataReaders using (SqlConnection conn = new SqlConnection(_connStr)) @@ -374,5 +373,3 @@ public static void MARSMultiDataReaderErrTest() } } } - - diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/MirroringTest/ConnectionOnMirroringTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/MirroringTest/ConnectionOnMirroringTest.cs index 412cac5858..93101d5d38 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/MirroringTest/ConnectionOnMirroringTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/MirroringTest/ConnectionOnMirroringTest.cs @@ -14,7 +14,8 @@ public static class ConnectionOnMirroringTest { private static ManualResetEvent workerCompletedEvent = new ManualResetEvent(false); - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))] + // Synapse: Invalid object name 'sys.database_mirroring'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestMultipleConnectionToMirroredServer() { string mirroringStateDesc; diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParallelTransactionsTest/ParallelTransactionsTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParallelTransactionsTest/ParallelTransactionsTest.cs index 000206a43b..efc99ea757 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParallelTransactionsTest/ParallelTransactionsTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParallelTransactionsTest/ParallelTransactionsTest.cs @@ -10,7 +10,8 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests public static class ParallelTransactionsTest { #region <> - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Remove dependency from Northwind database + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void BasicParallelTest_shouldThrowsUnsupported() { string connectionString = DataTestUtility.TCPConnectionString; @@ -66,7 +67,8 @@ private static void BasicParallelTest(string connectionString, string tempTableN #endregion #region <> - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Remove dependency from Northwind database + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void MultipleExecutesInSameTransactionTest_shouldThrowsUnsupported() { string connectionString = DataTestUtility.TCPConnectionString; diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/ParametersTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/ParametersTest.cs index 865fd62cab..b179b82d6a 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/ParametersTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/ParametersTest.cs @@ -103,7 +103,8 @@ public static void CodeCoverageSqlClient() DataTestUtility.AssertThrowsWrapper(() => new SqlCommand().Parameters.Remove(new SqlParameter()), "Attempted to remove an SqlParameter that is not contained by this SqlParameterCollection."); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Parse error at line: 1, column: 12: Incorrect syntax near 'IF'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void Test_Copy_SqlParameter() { using (var conn = new SqlConnection(s_connString)) @@ -153,7 +154,8 @@ public static void Test_Copy_SqlParameter() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Remove dependency on Northwind database + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void Test_SqlParameter_Constructor() { using (var conn = new SqlConnection(s_connString)) @@ -232,7 +234,8 @@ public static void Test_WithDecimalValue_ShouldReturnDecimal() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Unsupported parameter type found while parsing RPC request. The request has been terminated. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void Test_WithGuidValue_ShouldReturnGuid() { using (var conn = new SqlConnection(s_connString)) @@ -246,6 +249,7 @@ public static void Test_WithGuidValue_ShouldReturnGuid() } } + // Synapse: Parse error at line: 1, column: 8: Incorrect syntax near 'TYPE'. [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))] public static void TestParametersWithDatatablesTVPInsert() { @@ -382,7 +386,8 @@ public static void TestScaledDecimalParameter_BulkCopy(string connectionString, } } - [Theory] + // Synapse: Parse error at line: 2, column: 8: Incorrect syntax near 'TYPE'. + [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.IsNotAzureSynapse))] [ClassData(typeof(ConnectionStringsProvider))] public static void TestScaledDecimalTVP_CommandSP(string connectionString, bool truncateScaledDecimal) { diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/SqlAdapterUpdateBatch.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/SqlAdapterUpdateBatch.cs index e30f019282..90d413a66d 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/SqlAdapterUpdateBatch.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/SqlAdapterUpdateBatch.cs @@ -11,7 +11,8 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests { public class SqlAdapterUpdateBatch { - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Incorrect syntax near 'IF'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void SqlAdapterTest() { string tableName = DataTestUtility.GetUniqueNameForSqlServer("Adapter"); diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpTest.cs index 2dbb2648ac..7c4e81cfd5 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpTest.cs @@ -41,7 +41,8 @@ public class TvpTest // data value and server consts private string _connStr; - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: The statement failed. Column 'blob' has a data type that cannot participate in a columnstore index. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void TestMain() { Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); // To keep things consistent since we output dates as strings diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SplitPacketTest/SplitPacketTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SplitPacketTest/SplitPacketTest.cs index ffbd4ab7ec..4d4313a000 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SplitPacketTest/SplitPacketTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SplitPacketTest/SplitPacketTest.cs @@ -11,7 +11,7 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests { - [ActiveIssue(5538)] + [ActiveIssue(5538)] // Only testable on localhost public class SplitPacketTest { private int Port = -1; diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlBulkCopyTest/DataConversionErrorMessageTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlBulkCopyTest/DataConversionErrorMessageTest.cs index 9b56183ccf..f9d32952d0 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlBulkCopyTest/DataConversionErrorMessageTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlBulkCopyTest/DataConversionErrorMessageTest.cs @@ -101,7 +101,10 @@ public DataConversionErrorMessageTest(InitialDatabase fixture) _fixture = fixture; } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Column count in target table does not match column count specified in input. + // If BCP command, ensure format file column count matches destination table. + // If SSIS data import, check column mappings are consistent with target. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void StringToIntErrorMessageTest() { Assert.True(StringToIntTest(_fixture.Connection, _fixture.TableName, SourceType.DataTable), "Did not get any exceptions for DataTable when converting data from 'string' to 'int' datatype!"); diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlBulkCopyTest/SqlBulkCopyTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlBulkCopyTest/SqlBulkCopyTest.cs index 9c1d60e07c..6669132ae5 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlBulkCopyTest/SqlBulkCopyTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlBulkCopyTest/SqlBulkCopyTest.cs @@ -11,6 +11,7 @@ public class SqlBulkCopyTest { private string _connStr = null; private static bool IsAzureServer() => !DataTestUtility.IsNotAzureServer(); + private static bool IsNotAzureSynapse => DataTestUtility.IsNotAzureSynapse(); private static bool AreConnectionStringsSetup() => DataTestUtility.AreConnStringsSetup(); public SqlBulkCopyTest() @@ -24,7 +25,8 @@ public string AddGuid(string stringin) return stringin; } - [ConditionalFact(nameof(AreConnectionStringsSetup), nameof(IsAzureServer))] + // Synapse: Promote Transaction not supported by Azure Synapse + [ConditionalFact(nameof(AreConnectionStringsSetup), nameof(IsNotAzureSynapse), nameof(IsAzureServer))] public void AzureDistributedTransactionTest() { AzureDistributedTransaction.Test(); @@ -246,31 +248,37 @@ public void DestinationTableNameWithSpecialCharTest() DestinationTableNameWithSpecialChar.Test(_connStr, AddGuid("SqlBulkCopyTest_DestinationTableNameWithSpecialChar")); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Remove dependency on Northwind database + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void OrderHintTest() { OrderHint.Test(_connStr, AddGuid("SqlBulkCopyTest_OrderHint"), AddGuid("SqlBulkCopyTest_OrderHint2")); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Cannot create more than one clustered index on table ''. + // Drop the existing clustered index 'ClusteredIndex_fe3d8c967ac142468ec4f81ff1faaa50' before creating another. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void OrderHintAsyncTest() { OrderHintAsync.Test(_connStr, AddGuid("SqlBulkCopyTest_OrderHintAsync"), AddGuid("SqlBulkCopyTest_OrderHintAsync2")); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Remove dependency on Northwind database. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void OrderHintMissingTargetColumnTest() { OrderHintMissingTargetColumn.Test(_connStr, AddGuid("SqlBulkCopyTest_OrderHintMissingTargetColumn")); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Remove dependency on Northwind database. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void OrderHintDuplicateColumnTest() { OrderHintDuplicateColumn.Test(_connStr, AddGuid("SqlBulkCopyTest_OrderHintDuplicateColumn")); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: 111212;Operation cannot be performed within a transaction. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void OrderHintTransactionTest() { OrderHintTransaction.Test(_connStr, AddGuid("SqlBulkCopyTest_OrderHintTransaction")); diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlCommand/SqlCommandCancelTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlCommand/SqlCommandCancelTest.cs index accf28148a..601bffa42a 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlCommand/SqlCommandCancelTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlCommand/SqlCommandCancelTest.cs @@ -16,7 +16,8 @@ public static class SqlCommandCancelTest private static readonly string tcp_connStr = (new SqlConnectionStringBuilder(DataTestUtility.TCPConnectionString) { PacketSize = 512 }).ConnectionString; private static readonly string np_connStr = (new SqlConnectionStringBuilder(DataTestUtility.NPConnectionString) { PacketSize = 512 }).ConnectionString; - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Remove dependency on Northwind database + WAITFOR not supported + ';' not supported + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void PlainCancelTest() { PlainCancel(tcp_connStr); @@ -28,8 +29,9 @@ public static void PlainCancelTestNP() { PlainCancel(np_connStr); } - - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + + // Synapse: Remove dependency on Northwind database + WAITFOR not supported + ';' not supported + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void PlainMARSCancelTest() { PlainCancel((new SqlConnectionStringBuilder(tcp_connStr) { MultipleActiveResultSets = true }).ConnectionString); @@ -42,7 +44,8 @@ public static void PlainMARSCancelTestNP() PlainCancel((new SqlConnectionStringBuilder(np_connStr) { MultipleActiveResultSets = true }).ConnectionString); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Remove dependency on Northwind database + WAITFOR not supported + ';' not supported + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void PlainCancelTestAsync() { PlainCancelAsync(tcp_connStr); @@ -55,7 +58,8 @@ public static void PlainCancelTestAsyncNP() PlainCancelAsync(np_connStr); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Remove dependency from Northwind database + WAITFOR not supported + ';' not supported. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void PlainMARSCancelTestAsync() { PlainCancelAsync((new SqlConnectionStringBuilder(tcp_connStr) { MultipleActiveResultSets = true }).ConnectionString); @@ -118,7 +122,8 @@ private static void PlainCancelAsync(string connString) } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Remove dependency from Northwind database + WAITFOR not supported + ';' not supported. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))] public static void MultiThreadedCancel_NonAsync() { MultiThreadedCancel(tcp_connStr, false); @@ -131,7 +136,8 @@ public static void MultiThreadedCancel_NonAsyncNP() MultiThreadedCancel(np_connStr, false); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Remove dependency from Northwind database + WAITFOR not supported + ';' not supported. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void MultiThreadedCancel_Async() { MultiThreadedCancel(tcp_connStr, true); @@ -144,7 +150,8 @@ public static void MultiThreadedCancel_AsyncNP() MultiThreadedCancel(np_connStr, true); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: WAITFOR not supported + ';' not supported. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))] public static void TimeoutCancel() { TimeoutCancel(tcp_connStr); @@ -186,7 +193,8 @@ public static void TimeOutDuringReadNP() TimeOutDuringRead(np_connStr); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: WAITFOR not supported + ';' not supported. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void CancelDoesNotWait() { CancelDoesNotWait(tcp_connStr); @@ -199,7 +207,8 @@ public static void CancelDoesNotWaitNP() CancelDoesNotWait(np_connStr); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: WAITFOR not supported + ';' not supported. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void AsyncCancelDoesNotWait() { AsyncCancelDoesNotWait(tcp_connStr).Wait(); diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlCommand/SqlCommandSetTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlCommand/SqlCommandSetTest.cs index e6810aa025..26b11055c2 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlCommand/SqlCommandSetTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlCommand/SqlCommandSetTest.cs @@ -11,7 +11,8 @@ public class SqlCommandSetTest { private static Assembly mds = Assembly.GetAssembly(typeof(SqlConnection)); - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: The statement failed. Column 'ByteArrayColumn' has a data type that cannot participate in a columnstore index. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void TestByteArrayParameters() { string tableName = DataTestUtility.GetUniqueNameForSqlServer("CMD"); diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlStatisticsTest/SqlStatisticsTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlStatisticsTest/SqlStatisticsTest.cs index 133ac55411..f04bc38a4d 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlStatisticsTest/SqlStatisticsTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlStatisticsTest/SqlStatisticsTest.cs @@ -20,7 +20,7 @@ public static void TestRetrieveStatistics() { startTime = DateTime.Now; SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString); - string text = "SELECT TOP 2000 * from [dbo].[Order Details]"; + string text = "SELECT TOP 2000 * from [sys].[all_views]"; using (SqlCommand command = new SqlCommand(text)) { connection.StatisticsEnabled = true; diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/TransactionTest/TransactionEnlistmentTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/TransactionTest/TransactionEnlistmentTest.cs index 82b1914a1b..98a4cb755d 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/TransactionTest/TransactionEnlistmentTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/TransactionTest/TransactionEnlistmentTest.cs @@ -11,39 +11,41 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests { public class TransactionEnlistmentTest { + // TODO Synapse: Cannot find data type 'text'. [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))] public static void TestAutoEnlistment_TxScopeComplete() { RunTestSet(TestCase_AutoEnlistment_TxScopeComplete); } + // TODO Synapse: Cannot find data type 'text'. [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))] public static void TestAutoEnlistment_TxScopeNonComplete() { RunTestSet(TestCase_AutoEnlistment_TxScopeNonComplete); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Cannot find data type 'text'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestManualEnlistment_Enlist() { RunTestSet(TestCase_ManualEnlistment_Enlist); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Cannot find data type 'text'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestManualEnlistment_NonEnlist() { RunTestSet(TestCase_ManualEnlistment_NonEnlist); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Cannot find data type 'text'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestManualEnlistment_Enlist_TxScopeComplete() { RunTestSet(TestCase_ManualEnlistment_Enlist_TxScopeComplete); } - - - private static void TestCase_AutoEnlistment_TxScopeComplete() { SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(ConnectionString); @@ -166,9 +168,6 @@ private static void TestCase_ManualEnlistment_Enlist_TxScopeComplete() Assert.True(string.Equals(result.Rows[0][0], InputCol2)); } - - - private static string TestTableName; private static string ConnectionString; private const int InputCol1 = 1; diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/TransactionTest/TransactionTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/TransactionTest/TransactionTest.cs index 6f2407a01f..b223a709e9 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/TransactionTest/TransactionTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/TransactionTest/TransactionTest.cs @@ -10,7 +10,8 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests { public static class TransactionTest { - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Enforced unique constraints are not supported. To create an unenforced unique constraint you must include the NOT ENFORCED syntax as part of your statement. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestMain() { new TransactionTestWorker((new SqlConnectionStringBuilder(DataTestUtility.TCPConnectionString) { MultipleActiveResultSets = true }).ConnectionString).StartTest(); diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/SqlServerTypesTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/SqlServerTypesTest.cs index ae29f5e6c4..1d90c31261 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/SqlServerTypesTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/SqlServerTypesTest.cs @@ -16,7 +16,8 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests { public static class SqlServerTypesTest { - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 48: Incorrect syntax near 'hierarchyid'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void GetSchemaTableTest() { string db = new SqlConnectionStringBuilder(DataTestUtility.TCPConnectionString).InitialCatalog; @@ -41,8 +42,9 @@ public static void GetSchemaTableTest() } } + // Synapse: Parse error at line: 1, column: 48: Incorrect syntax near 'hierarchyid'. [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)] - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void GetValueTestThrowsExceptionOnNetCore() { using (SqlConnection conn = new SqlConnection(DataTestUtility.TCPConnectionString)) @@ -60,8 +62,9 @@ public static void GetValueTestThrowsExceptionOnNetCore() } } + // Synapse: Parse error at line: 1, column: 48: Incorrect syntax near 'hierarchyid'. [SkipOnTargetFramework(TargetFrameworkMonikers.Netcoreapp)] - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void GetValueTest() { using (SqlConnection conn = new SqlConnection(DataTestUtility.TCPConnectionString)) @@ -77,7 +80,8 @@ public static void GetValueTest() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 8: Incorrect syntax near 'hierarchyid'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestUdtZeroByte() { using (SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString)) @@ -96,13 +100,15 @@ public static void TestUdtZeroByte() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 8: Incorrect syntax near 'hierarchyid'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestUdtSqlDataReaderGetSqlBytesSequentialAccess() { TestUdtSqlDataReaderGetSqlBytes(CommandBehavior.SequentialAccess); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 8: Incorrect syntax near 'hierarchyid'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestUdtSqlDataReaderGetSqlBytes() { TestUdtSqlDataReaderGetSqlBytes(CommandBehavior.Default); @@ -139,13 +145,15 @@ private static void TestUdtSqlDataReaderGetSqlBytes(CommandBehavior behavior) } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 8: Incorrect syntax near 'hierarchyid'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestUdtSqlDataReaderGetBytesSequentialAccess() { TestUdtSqlDataReaderGetBytes(CommandBehavior.SequentialAccess); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 8: Incorrect syntax near 'hierarchyid'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestUdtSqlDataReaderGetBytes() { TestUdtSqlDataReaderGetBytes(CommandBehavior.Default); @@ -195,13 +203,15 @@ private static void TestUdtSqlDataReaderGetBytes(CommandBehavior behavior) } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 8: Incorrect syntax near 'hierarchyid'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestUdtSqlDataReaderGetStreamSequentialAccess() { TestUdtSqlDataReaderGetStream(CommandBehavior.SequentialAccess); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 8: Incorrect syntax near 'hierarchyid'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestUdtSqlDataReaderGetStream() { TestUdtSqlDataReaderGetStream(CommandBehavior.Default); @@ -259,7 +269,8 @@ private static void TestUdtSqlDataReaderGetStream(CommandBehavior behavior) } } #if netcoreapp - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 41: Incorrect syntax near 'hierarchyid'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestUdtSchemaMetadata() { using (SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString)) @@ -297,7 +308,8 @@ public static void TestUdtSchemaMetadata() } } #endif - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 8: Incorrect syntax near 'geometry'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestUdtParameterSetSqlByteValue() { const string ExpectedPointValue = "POINT (1 1)"; @@ -331,7 +343,8 @@ public static void TestUdtParameterSetSqlByteValue() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 8: Incorrect syntax near 'geometry'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestUdtParameterSetRawByteValue() { const string ExpectedPointValue = "POINT (1 1)"; diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/UdtTest2.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/UdtTest2.cs index 740793e702..f34dc2833a 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/UdtTest2.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/UdtTest2.cs @@ -12,6 +12,7 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests { [ActiveIssue(5536)] + // TODO Synapse: Remove dependency from UDTTest Database public class UdtTest2 { private string _connStr = null; diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/Utf8SupportTest/Utf8SupportTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/Utf8SupportTest/Utf8SupportTest.cs index d324c7e3ac..c6bc56d9f4 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/Utf8SupportTest/Utf8SupportTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/Utf8SupportTest/Utf8SupportTest.cs @@ -8,7 +8,8 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests { public static class Utf8SupportTest { - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsUTF8Supported))] + // Synapse: 'CONNECTIONPROPERTY' is not a recognized built-in function name. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsUTF8Supported), nameof(DataTestUtility.IsNotAzureSynapse))] public static void CheckSupportUtf8ConnectionProperty() { using (SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString)) @@ -27,5 +28,7 @@ public static void CheckSupportUtf8ConnectionProperty() } } } + + // TODO: Write tests using UTF8 collations } } diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/WeakRefTest/WeakRefTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/WeakRefTest/WeakRefTest.cs index 7505b6648d..13692fac8d 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/WeakRefTest/WeakRefTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/WeakRefTest/WeakRefTest.cs @@ -41,7 +41,8 @@ private enum TransactionTestType TransactionGCConnectionClose, } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // TODO Synapse: Remove dependency on Northwind database + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestReaderNonMars() { string connString = diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/WeakRefTestYukonSpecific/WeakRefTestYukonSpecific.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/WeakRefTestYukonSpecific/WeakRefTestYukonSpecific.cs index 504e26bf5f..5835bb9e69 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/WeakRefTestYukonSpecific/WeakRefTestYukonSpecific.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/WeakRefTestYukonSpecific/WeakRefTestYukonSpecific.cs @@ -16,8 +16,9 @@ public static class WeakRefTestYukonSpecific private const string DATABASE_NAME = "master"; private const int CONCURRENT_COMMANDS = 5; + // TODO Synapse: Remove dependency on Northwind database [ActiveIssue(6643, TestPlatforms.AnyUnix)] - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestReaderMars() { string connectionString = diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/TracingTests/DiagnosticTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/TracingTests/DiagnosticTest.cs index c95cd8c1df..7595506444 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/TracingTests/DiagnosticTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/TracingTests/DiagnosticTest.cs @@ -201,7 +201,8 @@ public void ExecuteReaderWithCommandBehaviorTest() }).Dispose(); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 27: Incorrect syntax near 'for'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void ExecuteXmlReaderTest() { RemoteExecutor.Invoke(cs => @@ -388,7 +389,8 @@ public void ExecuteReaderAsyncErrorTest() }).Dispose(); } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + // Synapse: Parse error at line: 1, column: 27: Incorrect syntax near 'for'. + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public void ExecuteXmlReaderAsyncTest() { RemoteExecutor.Invoke(cs => diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/TracingTests/EventSourceTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/TracingTests/EventSourceTest.cs index a6a1d2287c..8156dd6237 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/TracingTests/EventSourceTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/TracingTests/EventSourceTest.cs @@ -17,7 +17,7 @@ public void EventSourceTestAll() using (SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString)) { connection.Open(); - using (SqlCommand command = new SqlCommand("SELECT * From [Customers]", connection)) + using (SqlCommand command = new SqlCommand("SELECT @@VERSION", connection)) using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) diff --git a/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/Config.cs b/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/Config.cs index 611037ae92..f0e71edadb 100644 --- a/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/Config.cs +++ b/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/Config.cs @@ -31,6 +31,7 @@ public class Config public string DNSCachingConnString = null; public string DNSCachingServerCR = null; // this is for the control ring public string DNSCachingServerTR = null; // this is for the tenant ring + public bool IsAzureSynapse = false; // True for Azure Data Warehouse/Synapse public bool IsDNSCachingSupportedCR = false; // this is for the control ring public bool IsDNSCachingSupportedTR = false; // this is for the tenant ring public string EnclaveAzureDatabaseConnString = null; diff --git a/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.default.json b/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.default.json index e80b223ea9..2d1fa10a65 100644 --- a/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.default.json +++ b/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.default.json @@ -17,5 +17,6 @@ "SupportsLocalDb": false, "SupportsFileStream": false, "UseManagedSNIOnWindows": false, - "EnclaveAzureDatabaseConnString": "" + "IsAzureSynapse": false, + "EnclaveAzureDatabaseConnString": "" }