Skip to content

Commit 1a2fa4c

Browse files
author
Matthias Vill
committed
Assert multiple result-sets in tSQLt.AssertResultSetsHaveSameMetaData
1 parent 946fc4e commit 1a2fa4c

File tree

2 files changed

+62
-11
lines changed

2 files changed

+62
-11
lines changed

Tests/AssertResultSetsHaveSameMetaDataTests.class.sql

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,3 +195,42 @@ BEGIN
195195
END;
196196
GO
197197

198+
CREATE PROC tSQLt_test_AssertResultSetsHaveSameMetaData.[test AssertResultSetsHaveSameMetaData does not fail for multiple identical single column result sets]
199+
AS
200+
BEGIN
201+
EXEC tSQLt.AssertResultSetsHaveSameMetaData
202+
'SELECT CAST(1 AS INT) A; SELECT CAST(1.02 AS DECIMAL(10,2)) A',
203+
'SELECT CAST(3 AS INT) A; SELECT CAST(3.05 AS DECIMAL(10,2)) A';
204+
EXEC tSQLt.AssertResultSetsHaveSameMetaData
205+
'SELECT CAST(1.02 AS DECIMAL(10,2)) A; SELECT CAST(''ABC'' AS VARCHAR(15)) A',
206+
'SELECT CAST(3.05 AS DECIMAL(10,2)) A; SELECT CAST(''XYZ'' AS VARCHAR(15)) A';
207+
EXEC tSQLt.AssertResultSetsHaveSameMetaData
208+
'SELECT CAST(1 AS INT) A; SELECT CAST(''ABC'' AS VARCHAR(15)) A; SELECT CAST(1.02 AS DECIMAL(10,2)) A',
209+
'SELECT CAST(3 AS INT) A; SELECT CAST(''XYZ'' AS VARCHAR(15)) A; SELECT CAST(3.05 AS DECIMAL(10,2)) A';
210+
EXEC tSQLt.AssertResultSetsHaveSameMetaData
211+
'SELECT NULL A; SELECT NULL B; SELECT NULL C; SELECT NULL D',
212+
'SELECT NULL A; SELECT NULL B; SELECT NULL C; SELECT NULL D';
213+
END;
214+
GO
215+
216+
CREATE PROC tSQLt_test_AssertResultSetsHaveSameMetaData.[test AssertResultSetsHaveSameMetaData fails for multiple differing single column result sets]
217+
AS
218+
BEGIN
219+
EXEC tSQLt_testutil.assertFailCalled
220+
'EXEC tSQLt.AssertResultSetsHaveSameMetaData
221+
''SELECT CAST(1 AS INT) A; SELECT CAST(1 AS INT) A'',
222+
''SELECT CAST(1 AS INT) A; SELECT CAST(3 AS BIGINT) A'';',
223+
'Expected tSQLt.Fail called when AssertResultSetsHaveSameMetaData called with differing 2nd resultsets [INT and BIGINT]';
224+
EXEC tSQLt_testutil.assertFailCalled
225+
'EXEC tSQLt.AssertResultSetsHaveSameMetaData
226+
''SELECT CAST(1 AS INT) A; SELECT CAST(3 AS BIGINT) A; SELECT CAST(1.02 AS DECIMAL(10,2)) A'',
227+
''SELECT CAST(1 AS INT) A; SELECT CAST(3 AS BIGINT) A; SELECT CAST(3.05 AS DECIMAL(10,9)) A'';',
228+
'Expected tSQLt.Fail called when AssertResultSetsHaveSameMetaData called with differing 3rd resultsets [DECIMAL(10,2) and DECIMAL(10,9)]';
229+
EXEC tSQLt_testutil.assertFailCalled
230+
'EXEC tSQLt.AssertResultSetsHaveSameMetaData
231+
''SELECT CAST(''''ABC'''' AS VARCHAR(15)) A; SELECT CAST(3 AS BIGINT) A; SELECT CAST(1.02 AS DECIMAL(10,2)) A'',
232+
''SELECT CAST(''''XYZ'''' AS VARCHAR(23)) A; SELECT CAST(3 AS BIGINT) A; SELECT CAST(1.02 AS DECIMAL(10,2)) A'';',
233+
'Expected tSQLt.Fail called when AssertResultSetsHaveSameMetaData called with differing 1st resultsets [VARCHAR(15) and VARCHAR(23)]';
234+
END;
235+
GO
236+

tSQLtCLR/tSQLtCLR/MetaDataEqualityAsserter.cs

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
using System.Data.Sql;
44
using System.Data.SqlTypes;
55
using System.Data.SqlClient;
6-
6+
using System.Text;
77
using Microsoft.SqlServer.Server;
88

99
namespace tSQLtCLR
@@ -35,15 +35,23 @@ public void AssertResultSetsHaveSameMetaData(SqlString expectedCommand, SqlStrin
3535
private String createSchemaStringFromCommand(SqlString command)
3636
{
3737
SqlDataReader reader = null;
38+
int resultSet = 0;
39+
StringBuilder schemaString = new StringBuilder();
3840

3941
try
4042
{
4143
reader = testDatabaseFacade.executeCommand(command);
42-
reader.Read();
43-
DataTable schema = attemptToGetSchemaTable(command, reader);
44-
throwExceptionIfSchemaIsEmpty(command, schema);
4544

46-
return buildSchemaString(schema);
45+
do
46+
{
47+
resultSet++;
48+
reader.Read();
49+
DataTable schema = attemptToGetSchemaTable(command, reader);
50+
throwExceptionIfSchemaIsEmpty(command, schema);
51+
buildSchemaString(schema, resultSet, schemaString);
52+
} while (reader.NextResult());
53+
54+
return schemaString.ToString();
4755
}
4856
finally
4957
{
@@ -80,26 +88,30 @@ private static void throwExceptionIfSchemaIsEmpty(SqlString command, DataTable s
8088
}
8189
}
8290

83-
private static String buildSchemaString(DataTable schema)
91+
private static void buildSchemaString(DataTable schema, int resultSet, StringBuilder schemaString)
8492
{
85-
String schemaString = "";
93+
if (resultSet > 1)
94+
{
95+
schemaString.AppendLine();
96+
}
97+
98+
schemaString.Append(resultSet).Append(": ");
8699

87100
foreach (DataRow row in schema.Rows)
88101
{
89102
if (row["IsHidden"].ToString() != "True")
90103
{
91-
schemaString += "[";
104+
schemaString.Append("[");
92105
foreach (DataColumn column in schema.Columns)
93106
{
94107
if (columnPropertyIsValidForMetaDataComparison(column))
95108
{
96-
schemaString += "{" + column.ColumnName + ":" + row[column.ColumnName] + "}";
109+
schemaString.Append("{").Append(column.ColumnName).Append(":").Append(row[column.ColumnName]).Append("}");
97110
}
98111
}
99-
schemaString += "]";
112+
schemaString.Append("]");
100113
}
101114
}
102-
return schemaString;
103115
}
104116

105117
private static bool columnPropertyIsValidForMetaDataComparison(DataColumn column)

0 commit comments

Comments
 (0)