From 3ce3c241f61c600aa7b8d32cd202bacf8f00ee6c Mon Sep 17 00:00:00 2001 From: Martin Isaksen Date: Tue, 23 Jan 2018 11:45:21 -0700 Subject: [PATCH 1/2] Added new table and procs to keep track of trigger object ids created during testing. This is to help SQL Cover report on trigger coverage. --- Source/BuildOrder.txt | 5 +++- Source/Run_Methods.sql | 22 ++++++++++++++++- Source/Source.ssmssqlproj | 20 ++++++++++++---- ...tSQLt.Private_CleanTemporaryObject.ssp.sql | 10 ++++++++ Source/tSQLt.Private_Init.ssp.sql | 1 + Source/tSQLt.SaveTemporaryObjectId.ssp.sql | 24 +++++++++++++++++++ Source/tSQLt.TemporaryObject.tbl.sql | 8 +++++++ ...rivate_CleanTemporaryObjectTests.class.sql | 15 ++++++++++++ Tests/SaveTemporaryObjectIdTests.class.sql | 19 +++++++++++++++ 9 files changed, 118 insertions(+), 6 deletions(-) create mode 100644 Source/tSQLt.Private_CleanTemporaryObject.ssp.sql create mode 100644 Source/tSQLt.SaveTemporaryObjectId.ssp.sql create mode 100644 Source/tSQLt.TemporaryObject.tbl.sql create mode 100644 Tests/Private_CleanTemporaryObjectTests.class.sql create mode 100644 Tests/SaveTemporaryObjectIdTests.class.sql diff --git a/Source/BuildOrder.txt b/Source/BuildOrder.txt index fb97a1066..1341d9b77 100644 --- a/Source/BuildOrder.txt +++ b/Source/BuildOrder.txt @@ -31,7 +31,10 @@ tSQLt.Private_RenameObjectToUniqueNameUsingObjectId.ssp.sql tSQLt.RemoveObject.ssp.sql tSQLt.RemoveObjectIfExists.ssp.sql tSQLt.Private_CleanTestResult.ssp.sql +tSQLt.Private_CleanTemporaryObject.ssp.sql tSQLt.Private_Init.ssp.sql +tSQLt.TemporaryObject.tbl.sql +tSQLt.SaveTemporaryObjectId.ssp.sql Run_Methods.sql tSQLt.ExpectException.ssp.sql tSQLt.ExpectNoException.ssp.sql @@ -78,4 +81,4 @@ tSQLt.AssertEqualsTableSchema.ssp.sql tSQLt.AssertStringTable.udt.sql tSQLt.AssertStringIn.ssp.sql tSQLt.Reset.ssp.sql -tSQLt._Footer.sql +tSQLt._Footer.sql \ No newline at end of file diff --git a/Source/Run_Methods.sql b/Source/Run_Methods.sql index f11f1b489..ea8b04bed 100644 --- a/Source/Run_Methods.sql +++ b/Source/Run_Methods.sql @@ -49,6 +49,9 @@ BEGIN DECLARE @TranName CHAR(32); EXEC tSQLt.GetNewTranName @TranName OUT; DECLARE @TestResultId INT; DECLARE @PreExecTrancount INT; + DECLARE @TempObjectId INT; + DECLARE @OrgObjectId INT; + DECLARE @FullObjectName NVARCHAR(MAX); DECLARE @VerboseMsg NVARCHAR(MAX); DECLARE @Verbose BIT; @@ -193,6 +196,18 @@ BEGIN END; END CATCH + SELECT @FullObjectName = QUOTENAME(SCHEMA_NAME(O3.schema_id))+'.'+QUOTENAME(O3.name), + @TempObjectId = O5.object_id, + @OrgObjectId = O4.object_id + FROM tSQLt.Private_RenamedObjectLog AS PROL + INNER JOIN sys.objects AS O ON O.object_id = PROL.ObjectId + INNER JOIN sys.schemas AS S ON S.schema_id = O.schema_id + INNER JOIN sys.objects AS O2 ON QUOTENAME(O2.name) = PROL.OriginalName AND O2.schema_id = S.schema_id + INNER JOIN sys.objects AS O5 ON O5.parent_object_id = O2.object_id + INNER JOIN sys.objects AS O3 ON O3.object_id = O5.object_id + INNER JOIN sys.objects AS O4 ON O4.parent_object_id = PROL.ObjectId + WHERE O4.type = 'TR'; + BEGIN TRY ROLLBACK TRAN @TranName; END TRY @@ -233,7 +248,12 @@ BEGIN 'Error', 'TestResult entry is missing; Original outcome: ' + @Result + ', ' + @Msg; END - + + IF @TempObjectId IS NOT NULL + AND @FullObjectName NOT LIKE '%tSQLt_tempobject_%' + BEGIN + EXEC tSQLt.SaveTemporaryObjectId @TempObjectId, @OrgObjectId; + END COMMIT; diff --git a/Source/Source.ssmssqlproj b/Source/Source.ssmssqlproj index ed043c2a4..ede600280 100644 --- a/Source/Source.ssmssqlproj +++ b/Source/Source.ssmssqlproj @@ -3,8 +3,8 @@ - - 2015-07-26T23:07:57.2567069-04:00 + + 2015-07-26T21:07:57.2567069-06:00 SQL Dev_2005 @@ -15,8 +15,8 @@ NotSpecified Microsoft SQL Server Management Studio - Query - - 2014-07-30T13:44:05.3611369-04:00 + + 2014-07-30T11:44:05.3611369-06:00 SQL Dev_tSQLt @@ -205,6 +205,12 @@ tSQLt.Private_Bin2Hex.sfn.sql + + + + + tSQLt.Private_CleanTemporaryObject.ssp.sql + 8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True Dev_tSQLt @@ -481,6 +487,12 @@ tSQLt.Reset.ssp.sql + + + + + tSQLt.SaveTemporaryObjectId.ssp.sql + 8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True Dev_tSQLt diff --git a/Source/tSQLt.Private_CleanTemporaryObject.ssp.sql b/Source/tSQLt.Private_CleanTemporaryObject.ssp.sql new file mode 100644 index 000000000..e28c1730c --- /dev/null +++ b/Source/tSQLt.Private_CleanTemporaryObject.ssp.sql @@ -0,0 +1,10 @@ +IF OBJECT_ID('tSQLt.Private_CleanTemporaryObject') IS NOT NULL DROP PROCEDURE tSQLt.Private_CleanTemporaryObject; +GO +---Build+ +CREATE PROCEDURE tSQLt.Private_CleanTemporaryObject +AS +BEGIN + DELETE FROM tSQLt.TemporaryObject; +END +---Build- +GO \ No newline at end of file diff --git a/Source/tSQLt.Private_Init.ssp.sql b/Source/tSQLt.Private_Init.ssp.sql index 2c247541f..369660b70 100644 --- a/Source/tSQLt.Private_Init.ssp.sql +++ b/Source/tSQLt.Private_Init.ssp.sql @@ -6,6 +6,7 @@ CREATE PROCEDURE tSQLt.Private_Init AS BEGIN EXEC tSQLt.Private_CleanTestResult; + EXEC tSQLt.Private_CleanTemporaryObject; DECLARE @enable BIT; SET @enable = 1; DECLARE @version_match BIT;SET @version_match = 0; diff --git a/Source/tSQLt.SaveTemporaryObjectId.ssp.sql b/Source/tSQLt.SaveTemporaryObjectId.ssp.sql new file mode 100644 index 000000000..e15aed452 --- /dev/null +++ b/Source/tSQLt.SaveTemporaryObjectId.ssp.sql @@ -0,0 +1,24 @@ +IF OBJECT_ID('tSQLt.SaveTemporaryObjectId') IS NOT NULL DROP PROCEDURE tSQLt.SaveTemporaryObjectId; +GO +---Build+ +CREATE PROCEDURE tSQLt.SaveTemporaryObjectId + @TempObjectId INT + ,@OrgObjectId INT +AS +BEGIN + IF NOT EXISTS (SELECT * FROM tSQLt.TemporaryObject WHERE TempObjectId = @TempObjectId) + BEGIN + INSERT INTO tSQLt.TemporaryObject + ( + TempObjectId + ,OrgObjectId + ) + VALUES + ( + @TempObjectId + ,@OrgObjectId + ); + END +END +---Build- +GO \ No newline at end of file diff --git a/Source/tSQLt.TemporaryObject.tbl.sql b/Source/tSQLt.TemporaryObject.tbl.sql new file mode 100644 index 000000000..906cb9967 --- /dev/null +++ b/Source/tSQLt.TemporaryObject.tbl.sql @@ -0,0 +1,8 @@ +IF OBJECT_ID('tSQLt.TemporaryObject') IS NOT NULL DROP TABLE tSQLt.TemporaryObject; +---Build+ +CREATE TABLE tSQLt.TemporaryObject +( + TempObjectId INT + ,OrgObjectId INT +); +---Build- \ No newline at end of file diff --git a/Tests/Private_CleanTemporaryObjectTests.class.sql b/Tests/Private_CleanTemporaryObjectTests.class.sql new file mode 100644 index 000000000..ee09f37b0 --- /dev/null +++ b/Tests/Private_CleanTemporaryObjectTests.class.sql @@ -0,0 +1,15 @@ +EXEC tSQLt.NewTestClass 'Private_CleanTemporaryObjectTests'; +GO +CREATE PROC Private_CleanTemporaryObjectTests.[test all TemporaryObject data is removed] +AS +BEGIN + EXEC tSQLt.FakeTable @Tablename = N'tSQLt.Private_CleanTemporaryObject'; + + INSERT INTO tSQLt.Private_CleanTemporaryObject (TempObjectId, OrgObjectId) + VALUES (1,1),(2,2); + + EXEC tSQLt.Private_CleanTemporaryObject; + + EXEC tSQLt.AssertEmptyTable @TableName = N'tSQLt.Private_CleanTemporaryObject'; +END; +GO \ No newline at end of file diff --git a/Tests/SaveTemporaryObjectIdTests.class.sql b/Tests/SaveTemporaryObjectIdTests.class.sql new file mode 100644 index 000000000..e565e1d18 --- /dev/null +++ b/Tests/SaveTemporaryObjectIdTests.class.sql @@ -0,0 +1,19 @@ +EXEC tSQLt.NewTestClass 'SaveTemporaryObjectIdTests'; +GO +CREATE PROC SaveTemporaryObjectIdTests.[test row is inserted if it does not exist] +AS +BEGIN + EXEC tSQLt.FakeTable @TableName = N'tSQLt.TemporaryObject'; + + CREATE TABLE #Expected (TempObjectId INT, OrgObjectId INT); + CREATE TABLE #Actual (TempObjectId INT, OrgObjectId INT); + + INSERT INTO #Expected ( TempObjectId ,OrgObjectId ) + VALUES ( 1, 1); + + EXEC tSQLt.SaveTemporaryObjectId @TempObjectId = 1, @OrgObjectId = 1; + + EXEC tSQLt.AssertEqualsTable @Expected = '#Expected', @Actual = '#Actual'; + +END; +GO \ No newline at end of file From 99474df83948f68005b2224ed422458ef4d146a2 Mon Sep 17 00:00:00 2001 From: Martin Isaksen Date: Tue, 23 Jan 2018 11:57:29 -0700 Subject: [PATCH 2/2] Corrected connections and added all files to project file. --- Source/Source.ssmssqlproj | 10 ++++++++-- Tests/Tests.ssmssqlproj | 12 ++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/Source/Source.ssmssqlproj b/Source/Source.ssmssqlproj index ede600280..52ffc8205 100644 --- a/Source/Source.ssmssqlproj +++ b/Source/Source.ssmssqlproj @@ -3,7 +3,7 @@ - + 2015-07-26T21:07:57.2567069-06:00 SQL Dev_2005 @@ -15,7 +15,7 @@ NotSpecified Microsoft SQL Server Management Studio - Query - + 2014-07-30T11:44:05.3611369-06:00 SQL Dev_tSQLt @@ -517,6 +517,12 @@ tSQLt.TableToText.ssp.sql + + 8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True + Dev_tSQLt + + tSQLt.TemporaryObject.tbl.sql + 8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True Dev_tSQLt diff --git a/Tests/Tests.ssmssqlproj b/Tests/Tests.ssmssqlproj index fbd9eac4f..0a36423c4 100644 --- a/Tests/Tests.ssmssqlproj +++ b/Tests/Tests.ssmssqlproj @@ -145,6 +145,12 @@ NewTestClassTests.class.sql + + 8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True + Dev_tSQLt + + Private_CleanTemporaryObject.class.sql + 8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True Dev_tSQLt @@ -211,6 +217,12 @@ Run_Methods_Tests.class.sql + + 8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True + Dev_tSQLt + + SaveTemporaryObjectIdTests.class.sql + 8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True Dev_tSQLt