diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/Microsoft.Data.SqlClient.ManualTests.csproj b/src/Microsoft.Data.SqlClient/tests/ManualTests/Microsoft.Data.SqlClient.ManualTests.csproj
index 7ae352c028..8a81560710 100644
--- a/src/Microsoft.Data.SqlClient/tests/ManualTests/Microsoft.Data.SqlClient.ManualTests.csproj
+++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/Microsoft.Data.SqlClient.ManualTests.csproj
@@ -277,22 +277,6 @@
PreserveNewest
TvpColumnBoundaries_ReleaseMode_Azure.bsl
-
- PreserveNewest
- TvpQueryHints_DebugMode.bsl
-
-
- PreserveNewest
- TvpQueryHints_DebugMode_Azure.bsl
-
-
- PreserveNewest
- TvpQueryHints_ReleaseMode.bsl
-
-
- PreserveNewest
- TvpQueryHints_ReleaseMode_Azure.bsl
-
PreserveNewest
SqlVariantParameter_DebugMode.bsl
diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpQueryHintsTests.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpQueryHintsTests.cs
index 512026f0a5..62df3f2c27 100644
--- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpQueryHintsTests.cs
+++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpQueryHintsTests.cs
@@ -3,138 +3,286 @@
// See the LICENSE file in the project root for more information.
using System;
-using System.Globalization;
-using System.IO;
-using System.Text;
-using System.Threading;
+using System.Collections.Generic;
+using System.Data;
+using Microsoft.Data.SqlClient.Server;
using Xunit;
namespace Microsoft.Data.SqlClient.ManualTesting.Tests
{
///
/// Tests for TVP query hints (sort order, uniqueness, default columns).
- /// These tests run independently with their own baseline comparison.
///
- [Collection("ParameterBaselineTests")]
- public class TvpQueryHintsTests
+ public sealed class TvpQueryHintsTests : IDisposable
{
- [Trait("Category", "flaky")]
- [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))]
- public void TvpQueryHintsTest()
+ private readonly SqlConnection _conn;
+ private readonly SqlCommand _cmd;
+ private readonly SqlParameter _param;
+ private readonly string _procName;
+ private readonly string _typeName;
+
+ public TvpQueryHintsTests()
{
- Assert.True(RunTestAndCompareWithBaseline());
+ Guid randomizer = Guid.NewGuid();
+ _typeName = string.Format("dbo.[QHint_{0}]", randomizer);
+ _procName = string.Format("dbo.[QHint_Proc_{0}]", randomizer);
+ string createTypeSql = string.Format(
+ "CREATE TYPE {0} AS TABLE("
+ + " c1 Int DEFAULT -1,"
+ + " c2 NVarChar(40) DEFAULT N'DEFUALT',"
+ + " c3 DateTime DEFAULT '1/1/2006',"
+ + " c4 Int DEFAULT -1)",
+ _typeName);
+ string createProcSql = string.Format(
+ "CREATE PROC {0}(@tvp {1} READONLY) AS SELECT TOP(2) * FROM @tvp ORDER BY c1", _procName, _typeName);
+
+ _conn = new SqlConnection(DataTestUtility.TCPConnectionString);
+ _conn.Open();
+
+ _cmd = new SqlCommand(createTypeSql, _conn);
+ _cmd.ExecuteNonQuery();
+
+ _cmd.CommandText = createProcSql;
+ _cmd.ExecuteNonQuery();
+
+ _cmd.CommandText = _procName;
+ _cmd.CommandType = CommandType.StoredProcedure;
+ _param = _cmd.Parameters.Add("@tvp", SqlDbType.Structured);
}
- private bool RunTestAndCompareWithBaseline()
+ public void Dispose()
{
- CultureInfo previousCulture = Thread.CurrentThread.CurrentCulture;
- Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
- try
- {
- string outputPath = "TvpQueryHints.out";
- string baselinePath;
-#if DEBUG
- if (DataTestUtility.IsNotAzureServer() || DataTestUtility.IsManagedInstance)
- {
- baselinePath = "TvpQueryHints_DebugMode.bsl";
- }
- else
- {
- baselinePath = "TvpQueryHints_DebugMode_Azure.bsl";
- }
-#else
- if (DataTestUtility.IsNotAzureServer() || DataTestUtility.IsManagedInstance)
- {
- baselinePath = "TvpQueryHints_ReleaseMode.bsl";
- }
- else
+ string dropSql = string.Format("DROP PROC {0}; DROP TYPE {1}", _procName, _typeName);
+ using SqlCommand cmd = new(dropSql, _conn);
+ cmd.ExecuteNonQuery();
+ _conn.Dispose();
+ }
+
+ [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))]
+ public void SortOrderSimple()
+ {
+ // Arrange
+ List rows = new();
+
+ SqlMetaData[] columnMetadata = new SqlMetaData[]
{
- baselinePath = "TvpQueryHints_ReleaseMode_Azure.bsl";
- }
-#endif
+ new SqlMetaData("", SqlDbType.Int, false, true, SortOrder.Ascending, 0),
+ new SqlMetaData("", SqlDbType.NVarChar, 40, false, true, SortOrder.Descending, 1),
+ new SqlMetaData("", SqlDbType.DateTime, false, true, SortOrder.Ascending, 2),
+ new SqlMetaData("", SqlDbType.Int, false, true, SortOrder.Descending, 3),
+ };
- var fstream = new FileStream(outputPath, FileMode.Create, FileAccess.Write, FileShare.Read);
- var swriter = new StreamWriter(fstream, Encoding.UTF8);
- var twriter = new TvpTest.CarriageReturnLineFeedReplacer(swriter);
- Console.SetOut(twriter);
+ AddRow(rows, columnMetadata, 0, "Z-value", DateTime.Parse("03/01/2000"), 5);
+ AddRow(rows, columnMetadata, 1, "Y-value", DateTime.Parse("02/01/2000"), 6);
+ AddRow(rows, columnMetadata, 1, "X-value", DateTime.Parse("01/01/2000"), 7);
+ AddRow(rows, columnMetadata, 1, "X-value", DateTime.Parse("04/01/2000"), 8);
+ AddRow(rows, columnMetadata, 1, "X-value", DateTime.Parse("04/01/2000"), 4);
- // Run Test - TvpTest instance is needed to access QueryHintsTest
- var tvpTest = new TvpTest();
- tvpTest.QueryHintsTest();
+ _param.Value = rows;
- Console.Out.Flush();
- Console.Out.Dispose();
+ // Act
+ List results = ExecuteAndGetResults(_cmd);
- // Recover the standard output stream
- StreamWriter standardOutput = new(Console.OpenStandardOutput());
- standardOutput.AutoFlush = true;
- Console.SetOut(standardOutput);
+ // Assert
+ Assert.Equal(2, results.Count);
+ Assert.Equal(0, results[0].C1);
+ Assert.Equal("Z-value", results[0].C2);
+ Assert.Equal(new DateTime(2000, 3, 1), results[0].C3);
+ Assert.Equal(5, results[0].C4);
+ Assert.Equal(1, results[1].C1);
+ Assert.Equal("X-value", results[1].C2);
+ Assert.Equal(new DateTime(2000, 1, 1), results[1].C3);
+ Assert.Equal(7, results[1].C4);
+ }
- // Compare output file
- var comparisonResult = FindDiffFromBaseline(baselinePath, outputPath);
+ [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))]
+ public void SortOrderMixed()
+ {
+ // Arrange
+ List rows = new();
- if (string.IsNullOrEmpty(comparisonResult))
+ SqlMetaData[] columnMetadata = new SqlMetaData[]
{
- return true;
- }
+ new SqlMetaData("", SqlDbType.Int, false, true, SortOrder.Descending, 3),
+ new SqlMetaData("", SqlDbType.NVarChar, 40, false, true, SortOrder.Descending, 0),
+ new SqlMetaData("", SqlDbType.DateTime, false, true, SortOrder.Ascending, 2),
+ new SqlMetaData("", SqlDbType.Int, false, true, SortOrder.Ascending, 1),
+ };
- Console.WriteLine("TvpQueryHintsTest Failed!");
- Console.WriteLine("Please compare baseline: {0} with output: {1}", Path.GetFullPath(baselinePath), Path.GetFullPath(outputPath));
- Console.WriteLine("Comparison Results:");
- Console.WriteLine(comparisonResult);
- return false;
- }
- finally
- {
- Thread.CurrentThread.CurrentCulture = previousCulture;
- }
+ AddRow(rows, columnMetadata, 6, "Z-value", DateTime.Parse("01/01/2000"), 1);
+ AddRow(rows, columnMetadata, 6, "Z-value", DateTime.Parse("01/01/2000"), 2);
+ AddRow(rows, columnMetadata, 6, "Y-value", DateTime.Parse("01/01/2000"), 3);
+ AddRow(rows, columnMetadata, 6, "Y-value", DateTime.Parse("02/01/2000"), 3);
+ AddRow(rows, columnMetadata, 5, "X-value", DateTime.Parse("03/01/2000"), 3);
+ AddRow(rows, columnMetadata, 4, "X-value", DateTime.Parse("01/01/2000"), 3);
+
+ _param.Value = rows;
+
+ // Act
+ List results = ExecuteAndGetResults(_cmd);
+
+ // Assert
+ Assert.Equal(2, results.Count);
+ Assert.Equal(4, results[0].C1);
+ Assert.Equal("X-value", results[0].C2);
+ Assert.Equal(new DateTime(2000, 1, 1), results[0].C3);
+ Assert.Equal(3, results[0].C4);
+ Assert.Equal(5, results[1].C1);
+ Assert.Equal("X-value", results[1].C2);
+ Assert.Equal(new DateTime(2000, 3, 1), results[1].C3);
+ Assert.Equal(3, results[1].C4);
}
- private static string FindDiffFromBaseline(string baselinePath, string outputPath)
+ [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))]
+ public void DefaultColumnOuterSubset()
{
- var expectedLines = File.ReadAllLines(baselinePath);
- var outputLines = File.ReadAllLines(outputPath);
+ // Arrange
+ List rows = new();
+
+ SqlMetaData[] columnMetadata = new SqlMetaData[]
+ {
+ new SqlMetaData("", SqlDbType.Int, true, false, SortOrder.Unspecified, -1),
+ new SqlMetaData("", SqlDbType.NVarChar, 40, false, false, SortOrder.Unspecified, -1),
+ new SqlMetaData("", SqlDbType.DateTime, false, false, SortOrder.Unspecified, -1),
+ new SqlMetaData("", SqlDbType.Int, true, false, SortOrder.Unspecified, -1),
+ };
+
+ AddRow(rows, columnMetadata, 6, "Z-value", DateTime.Parse("01/01/2000"), 1);
+ AddRow(rows, columnMetadata, 6, "Z-value", DateTime.Parse("01/01/2000"), 2);
+ AddRow(rows, columnMetadata, 6, "Y-value", DateTime.Parse("01/01/2000"), 3);
+ AddRow(rows, columnMetadata, 6, "Y-value", DateTime.Parse("02/01/2000"), 3);
+ AddRow(rows, columnMetadata, 5, "X-value", DateTime.Parse("03/01/2000"), 3);
+ AddRow(rows, columnMetadata, 4, "X-value", DateTime.Parse("01/01/2000"), 3);
+
+ _param.Value = rows;
+
+ // Act
+ List results = ExecuteAndGetResults(_cmd);
- var comparisonSb = new StringBuilder();
+ // Assert
+ Assert.Equal(2, results.Count);
+ Assert.Equal(-1, results[0].C1);
+ Assert.Equal("Y-value", results[0].C2);
+ Assert.Equal(new DateTime(2000, 1, 1), results[0].C3);
+ Assert.Equal(-1, results[0].C4);
+ Assert.Equal(-1, results[1].C1);
+ Assert.Equal("Z-value", results[1].C2);
+ Assert.Equal(new DateTime(2000, 1, 1), results[1].C3);
+ Assert.Equal(-1, results[1].C4);
+ }
- var expectedLength = expectedLines.Length;
- var outputLength = outputLines.Length;
- var findDiffLength = Math.Min(expectedLength, outputLength);
+ [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))]
+ public void DefaultColumnMiddleSubset()
+ {
+ // Arrange
+ List rows = new();
- for (var lineNo = 0; lineNo < findDiffLength; lineNo++)
+ SqlMetaData[] columnMetadata = new SqlMetaData[]
{
- if (!expectedLines[lineNo].Equals(outputLines[lineNo]))
- {
- comparisonSb.AppendFormat("** DIFF at line {0} \n", lineNo);
- comparisonSb.AppendFormat("A : {0} \n", outputLines[lineNo]);
- comparisonSb.AppendFormat("E : {0} \n", expectedLines[lineNo]);
- }
- }
+ new SqlMetaData("", SqlDbType.Int, false, false, SortOrder.Unspecified, -1),
+ new SqlMetaData("", SqlDbType.NVarChar, 40, true, false, SortOrder.Unspecified, -1),
+ new SqlMetaData("", SqlDbType.DateTime, true, false, SortOrder.Unspecified, -1),
+ new SqlMetaData("", SqlDbType.Int, false, false, SortOrder.Unspecified, -1),
+ };
+
+ AddRow(rows, columnMetadata, 6, "Z-value", DateTime.Parse("01/01/2000"), 1);
+ AddRow(rows, columnMetadata, 6, "Z-value", DateTime.Parse("01/01/2000"), 2);
+ AddRow(rows, columnMetadata, 6, "Y-value", DateTime.Parse("01/01/2000"), 3);
+ AddRow(rows, columnMetadata, 6, "Y-value", DateTime.Parse("02/01/2000"), 3);
+ AddRow(rows, columnMetadata, 5, "X-value", DateTime.Parse("03/01/2000"), 3);
+ AddRow(rows, columnMetadata, 4, "X-value", DateTime.Parse("01/01/2000"), 3);
+
+ _param.Value = rows;
+
+ // Act
+ List results = ExecuteAndGetResults(_cmd);
+
+ // Assert
+ Assert.Equal(2, results.Count);
+ Assert.Equal(4, results[0].C1);
+ Assert.Equal("DEFUALT", results[0].C2);
+ Assert.Equal(new DateTime(2006, 1, 1), results[0].C3);
+ Assert.Equal(3, results[0].C4);
+ Assert.Equal(5, results[1].C1);
+ Assert.Equal("DEFUALT", results[1].C2);
+ Assert.Equal(new DateTime(2006, 1, 1), results[1].C3);
+ Assert.Equal(3, results[1].C4);
+ }
+
+ [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))]
+ public void DefaultColumnAll()
+ {
+ // Arrange
+ List rows = new();
- var startIndex = findDiffLength - 1;
- if (startIndex < 0)
+ SqlMetaData[] columnMetadata = new SqlMetaData[]
{
- startIndex = 0;
- }
+ new SqlMetaData("", SqlDbType.Int, true, false, SortOrder.Unspecified, -1),
+ new SqlMetaData("", SqlDbType.NVarChar, 40, true, false, SortOrder.Unspecified, -1),
+ new SqlMetaData("", SqlDbType.DateTime, true, false, SortOrder.Unspecified, -1),
+ new SqlMetaData("", SqlDbType.Int, true, false, SortOrder.Unspecified, -1),
+ };
+
+ AddRow(rows, columnMetadata, 6, "Z-value", DateTime.Parse("01/01/2000"), 1);
+ AddRow(rows, columnMetadata, 6, "Z-value", DateTime.Parse("01/01/2000"), 2);
+ AddRow(rows, columnMetadata, 6, "Y-value", DateTime.Parse("01/01/2000"), 3);
+ AddRow(rows, columnMetadata, 6, "Y-value", DateTime.Parse("02/01/2000"), 3);
+ AddRow(rows, columnMetadata, 5, "X-value", DateTime.Parse("03/01/2000"), 3);
+ AddRow(rows, columnMetadata, 4, "X-value", DateTime.Parse("01/01/2000"), 3);
+
+ _param.Value = rows;
+
+ // Act
+ List results = ExecuteAndGetResults(_cmd);
- if (findDiffLength < expectedLength)
+ // Assert
+ Assert.Equal(2, results.Count);
+ Assert.Equal(-1, results[0].C1);
+ Assert.Equal("DEFUALT", results[0].C2);
+ Assert.Equal(new DateTime(2006, 1, 1), results[0].C3);
+ Assert.Equal(-1, results[0].C4);
+ Assert.Equal(-1, results[1].C1);
+ Assert.Equal("DEFUALT", results[1].C2);
+ Assert.Equal(new DateTime(2006, 1, 1), results[1].C3);
+ Assert.Equal(-1, results[1].C4);
+ }
+
+ private static void AddRow(List rows, SqlMetaData[] metadata, params object[] values)
+ {
+ SqlDataRecord record = new(metadata);
+ record.SetValues(values);
+ rows.Add(record);
+ }
+
+ private static List ExecuteAndGetResults(SqlCommand cmd)
+ {
+ List results = new();
+ using SqlDataReader rdr = cmd.ExecuteReader();
+ while (rdr.Read())
{
- comparisonSb.AppendFormat("** MISSING \n");
- for (var lineNo = startIndex; lineNo < expectedLength; lineNo++)
- {
- comparisonSb.AppendFormat("{0} : {1}", lineNo, expectedLines[lineNo]);
- }
+ results.Add(new QueryHintResult(
+ rdr.GetInt32(0),
+ rdr.GetString(1),
+ rdr.GetDateTime(2),
+ rdr.GetInt32(3)));
}
- if (findDiffLength < outputLength)
+ return results;
+ }
+
+ private sealed class QueryHintResult
+ {
+ public int C1 { get; }
+ public string C2 { get; }
+ public DateTime C3 { get; }
+ public int C4 { get; }
+
+ public QueryHintResult(int c1, string c2, DateTime c3, int c4)
{
- comparisonSb.AppendFormat("** EXTRA \n");
- for (var lineNo = startIndex; lineNo < outputLength; lineNo++)
- {
- comparisonSb.AppendFormat("{0} : {1}", lineNo, outputLines[lineNo]);
- }
+ C1 = c1;
+ C2 = c2;
+ C3 = c3;
+ C4 = c4;
}
-
- return comparisonSb.ToString();
}
}
}
diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpQueryHints_DebugMode.bsl b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpQueryHints_DebugMode.bsl
deleted file mode 100644
index e72190c064..0000000000
--- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpQueryHints_DebugMode.bsl
+++ /dev/null
@@ -1,30 +0,0 @@
-------- Sort order + uniqueness #1: simple -------
--------------
-0 Z-value 3/1/2000 12:00:00 AM 5
-1 X-value 1/1/2000 12:00:00 AM 7
-
--------------
-------- Sort order + uniqueness #2: mixed order -------
--------------
-4 X-value 1/1/2000 12:00:00 AM 3
-5 X-value 3/1/2000 12:00:00 AM 3
-
--------------
-------- default column #1: outer subset -------
--------------
--1 Y-value 1/1/2000 12:00:00 AM -1
--1 Z-value 1/1/2000 12:00:00 AM -1
-
--------------
-------- default column #1: middle subset -------
--------------
-4 DEFUALT 1/1/2006 12:00:00 AM 3
-5 DEFUALT 1/1/2006 12:00:00 AM 3
-
--------------
-------- default column #1: all -------
--------------
--1 DEFUALT 1/1/2006 12:00:00 AM -1
--1 DEFUALT 1/1/2006 12:00:00 AM -1
-
--------------
diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpQueryHints_DebugMode_Azure.bsl b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpQueryHints_DebugMode_Azure.bsl
deleted file mode 100644
index e72190c064..0000000000
--- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpQueryHints_DebugMode_Azure.bsl
+++ /dev/null
@@ -1,30 +0,0 @@
-------- Sort order + uniqueness #1: simple -------
--------------
-0 Z-value 3/1/2000 12:00:00 AM 5
-1 X-value 1/1/2000 12:00:00 AM 7
-
--------------
-------- Sort order + uniqueness #2: mixed order -------
--------------
-4 X-value 1/1/2000 12:00:00 AM 3
-5 X-value 3/1/2000 12:00:00 AM 3
-
--------------
-------- default column #1: outer subset -------
--------------
--1 Y-value 1/1/2000 12:00:00 AM -1
--1 Z-value 1/1/2000 12:00:00 AM -1
-
--------------
-------- default column #1: middle subset -------
--------------
-4 DEFUALT 1/1/2006 12:00:00 AM 3
-5 DEFUALT 1/1/2006 12:00:00 AM 3
-
--------------
-------- default column #1: all -------
--------------
--1 DEFUALT 1/1/2006 12:00:00 AM -1
--1 DEFUALT 1/1/2006 12:00:00 AM -1
-
--------------
diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpQueryHints_ReleaseMode.bsl b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpQueryHints_ReleaseMode.bsl
deleted file mode 100644
index e72190c064..0000000000
--- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpQueryHints_ReleaseMode.bsl
+++ /dev/null
@@ -1,30 +0,0 @@
-------- Sort order + uniqueness #1: simple -------
--------------
-0 Z-value 3/1/2000 12:00:00 AM 5
-1 X-value 1/1/2000 12:00:00 AM 7
-
--------------
-------- Sort order + uniqueness #2: mixed order -------
--------------
-4 X-value 1/1/2000 12:00:00 AM 3
-5 X-value 3/1/2000 12:00:00 AM 3
-
--------------
-------- default column #1: outer subset -------
--------------
--1 Y-value 1/1/2000 12:00:00 AM -1
--1 Z-value 1/1/2000 12:00:00 AM -1
-
--------------
-------- default column #1: middle subset -------
--------------
-4 DEFUALT 1/1/2006 12:00:00 AM 3
-5 DEFUALT 1/1/2006 12:00:00 AM 3
-
--------------
-------- default column #1: all -------
--------------
--1 DEFUALT 1/1/2006 12:00:00 AM -1
--1 DEFUALT 1/1/2006 12:00:00 AM -1
-
--------------
diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpQueryHints_ReleaseMode_Azure.bsl b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpQueryHints_ReleaseMode_Azure.bsl
deleted file mode 100644
index e72190c064..0000000000
--- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpQueryHints_ReleaseMode_Azure.bsl
+++ /dev/null
@@ -1,30 +0,0 @@
-------- Sort order + uniqueness #1: simple -------
--------------
-0 Z-value 3/1/2000 12:00:00 AM 5
-1 X-value 1/1/2000 12:00:00 AM 7
-
--------------
-------- Sort order + uniqueness #2: mixed order -------
--------------
-4 X-value 1/1/2000 12:00:00 AM 3
-5 X-value 3/1/2000 12:00:00 AM 3
-
--------------
-------- default column #1: outer subset -------
--------------
--1 Y-value 1/1/2000 12:00:00 AM -1
--1 Z-value 1/1/2000 12:00:00 AM -1
-
--------------
-------- default column #1: middle subset -------
--------------
-4 DEFUALT 1/1/2006 12:00:00 AM 3
-5 DEFUALT 1/1/2006 12:00:00 AM 3
-
--------------
-------- default column #1: all -------
--------------
--1 DEFUALT 1/1/2006 12:00:00 AM -1
--1 DEFUALT 1/1/2006 12:00:00 AM -1
-
--------------
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 5c788be58a..5c0459b687 100644
--- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpTest.cs
+++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpTest.cs
@@ -338,244 +338,6 @@ private void TestTVPPermutations(SteStructuredTypeBoundaries bounds, bool runOnl
}
}
- internal void QueryHintsTest()
- {
- using SqlConnection conn = new(_connStr);
- conn.Open();
-
- Guid randomizer = Guid.NewGuid();
- string typeName = string.Format("dbo.[QHint_{0}]", randomizer);
- string procName = string.Format("dbo.[QHint_Proc_{0}]", randomizer);
- string createTypeSql = string.Format(
- "CREATE TYPE {0} AS TABLE("
- + " c1 Int DEFAULT -1,"
- + " c2 NVarChar(40) DEFAULT N'DEFUALT',"
- + " c3 DateTime DEFAULT '1/1/2006',"
- + " c4 Int DEFAULT -1)",
- typeName);
- string createProcSql = string.Format(
- "CREATE PROC {0}(@tvp {1} READONLY) AS SELECT TOP(2) * FROM @tvp ORDER BY c1", procName, typeName);
- string dropSql = string.Format("DROP PROC {0}; DROP TYPE {1}", procName, typeName);
-
- try
- {
- SqlCommand cmd = new(createTypeSql, conn);
- cmd.ExecuteNonQuery();
-
- cmd.CommandText = createProcSql;
- cmd.ExecuteNonQuery();
-
- cmd.CommandText = procName;
- cmd.CommandType = CommandType.StoredProcedure;
- SqlParameter param = cmd.Parameters.Add("@tvp", SqlDbType.Structured);
-
- SqlMetaData[] columnMetadata;
- List rows = new();
- SqlDataRecord record;
-
- Console.WriteLine("------- Sort order + uniqueness #1: simple -------");
- columnMetadata = new SqlMetaData[] {
- new SqlMetaData("", SqlDbType.Int, false, true, SortOrder.Ascending, 0),
- new SqlMetaData("", SqlDbType.NVarChar, 40, false, true, SortOrder.Descending, 1),
- new SqlMetaData("", SqlDbType.DateTime, false, true, SortOrder.Ascending, 2),
- new SqlMetaData("", SqlDbType.Int, false, true, SortOrder.Descending, 3),
- };
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(0, "Z-value", DateTime.Parse("03/01/2000"), 5);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(1, "Y-value", DateTime.Parse("02/01/2000"), 6);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(1, "X-value", DateTime.Parse("01/01/2000"), 7);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(1, "X-value", DateTime.Parse("04/01/2000"), 8);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(1, "X-value", DateTime.Parse("04/01/2000"), 4);
- rows.Add(record);
-
- param.Value = rows;
- using (SqlDataReader rdr = cmd.ExecuteReader())
- {
- WriteReader(rdr);
- }
- rows.Clear();
-
- Console.WriteLine("------- Sort order + uniqueness #2: mixed order -------");
- columnMetadata = new SqlMetaData[] {
- new SqlMetaData("", SqlDbType.Int, false, true, SortOrder.Descending, 3),
- new SqlMetaData("", SqlDbType.NVarChar, 40, false, true, SortOrder.Descending, 0),
- new SqlMetaData("", SqlDbType.DateTime, false, true, SortOrder.Ascending, 2),
- new SqlMetaData("", SqlDbType.Int, false, true, SortOrder.Ascending, 1),
- };
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(6, "Z-value", DateTime.Parse("01/01/2000"), 1);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(6, "Z-value", DateTime.Parse("01/01/2000"), 2);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(6, "Y-value", DateTime.Parse("01/01/2000"), 3);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(6, "Y-value", DateTime.Parse("02/01/2000"), 3);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(5, "X-value", DateTime.Parse("03/01/2000"), 3);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(4, "X-value", DateTime.Parse("01/01/2000"), 3);
- rows.Add(record);
-
- param.Value = rows;
- using (SqlDataReader rdr = cmd.ExecuteReader())
- {
- WriteReader(rdr);
- }
- rows.Clear();
-
- Console.WriteLine("------- default column #1: outer subset -------");
- columnMetadata = new SqlMetaData[] {
- new SqlMetaData("", SqlDbType.Int, true, false, SortOrder.Unspecified, -1),
- new SqlMetaData("", SqlDbType.NVarChar, 40, false, false, SortOrder.Unspecified, -1),
- new SqlMetaData("", SqlDbType.DateTime, false, false, SortOrder.Unspecified, -1),
- new SqlMetaData("", SqlDbType.Int, true, false, SortOrder.Unspecified, -1),
- };
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(6, "Z-value", DateTime.Parse("01/01/2000"), 1);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(6, "Z-value", DateTime.Parse("01/01/2000"), 2);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(6, "Y-value", DateTime.Parse("01/01/2000"), 3);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(6, "Y-value", DateTime.Parse("02/01/2000"), 3);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(5, "X-value", DateTime.Parse("03/01/2000"), 3);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(4, "X-value", DateTime.Parse("01/01/2000"), 3);
- rows.Add(record);
-
- param.Value = rows;
- using (SqlDataReader rdr = cmd.ExecuteReader())
- {
- WriteReader(rdr);
- }
- rows.Clear();
-
- Console.WriteLine("------- default column #1: middle subset -------");
- columnMetadata = new SqlMetaData[] {
- new SqlMetaData("", SqlDbType.Int, false, false, SortOrder.Unspecified, -1),
- new SqlMetaData("", SqlDbType.NVarChar, 40, true, false, SortOrder.Unspecified, -1),
- new SqlMetaData("", SqlDbType.DateTime, true, false, SortOrder.Unspecified, -1),
- new SqlMetaData("", SqlDbType.Int, false, false, SortOrder.Unspecified, -1),
- };
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(6, "Z-value", DateTime.Parse("01/01/2000"), 1);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(6, "Z-value", DateTime.Parse("01/01/2000"), 2);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(6, "Y-value", DateTime.Parse("01/01/2000"), 3);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(6, "Y-value", DateTime.Parse("02/01/2000"), 3);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(5, "X-value", DateTime.Parse("03/01/2000"), 3);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(4, "X-value", DateTime.Parse("01/01/2000"), 3);
- rows.Add(record);
-
- param.Value = rows;
- using (SqlDataReader rdr = cmd.ExecuteReader())
- {
- WriteReader(rdr);
- }
- rows.Clear();
-
- Console.WriteLine("------- default column #1: all -------");
- columnMetadata = new SqlMetaData[] {
- new SqlMetaData("", SqlDbType.Int, true, false, SortOrder.Unspecified, -1),
- new SqlMetaData("", SqlDbType.NVarChar, 40, true, false, SortOrder.Unspecified, -1),
- new SqlMetaData("", SqlDbType.DateTime, true, false, SortOrder.Unspecified, -1),
- new SqlMetaData("", SqlDbType.Int, true, false, SortOrder.Unspecified, -1),
- };
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(6, "Z-value", DateTime.Parse("01/01/2000"), 1);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(6, "Z-value", DateTime.Parse("01/01/2000"), 2);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(6, "Y-value", DateTime.Parse("01/01/2000"), 3);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(6, "Y-value", DateTime.Parse("02/01/2000"), 3);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(5, "X-value", DateTime.Parse("03/01/2000"), 3);
- rows.Add(record);
-
- record = new SqlDataRecord(columnMetadata);
- record.SetValues(4, "X-value", DateTime.Parse("01/01/2000"), 3);
- rows.Add(record);
-
- param.Value = rows;
- using (SqlDataReader rdr = cmd.ExecuteReader())
- {
- WriteReader(rdr);
- }
- rows.Clear();
-
- }
- catch (Exception e)
- {
- Console.WriteLine(e.Message);
- }
- finally
- {
- SqlCommand cmd = new(dropSql, conn);
- cmd.ExecuteNonQuery();
- }
- }
-
private static async Task RunPacketNumberWraparound(
WraparoundRowEnumerator enumerator,
CancellationToken cancellationToken)