174 lines
5.9 KiB
Transact-SQL
174 lines
5.9 KiB
Transact-SQL
USE "Gwent - The Witcher Card Game"
|
|
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE addToTables (@tableName VARCHAR(255)) AS
|
|
IF @tableName IN (SELECT Name FROM Tables)
|
|
BEGIN
|
|
PRINT 'Table already present in Tables'
|
|
RETURN
|
|
END
|
|
IF @tableName NOT IN (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES)
|
|
BEGIN
|
|
PRINT 'Table doesn''t exists'
|
|
RETURN
|
|
END
|
|
INSERT INTO Tables (Name) VALUES (@tableName)
|
|
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE addToViews (@viewName VARCHAR(255)) AS
|
|
IF @viewName IN (SELECT Name FROM Views)
|
|
BEGIN
|
|
PRINT 'View already present in Views'
|
|
RETURN
|
|
END
|
|
IF @viewName NOT IN (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS)
|
|
BEGIN
|
|
PRINT 'View doesn''t exists'
|
|
RETURN
|
|
END
|
|
INSERT INTO Views (Name) VALUES (@viewName)
|
|
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE addTests (@testName VARCHAR(255)) AS
|
|
IF @testName IN (SELECT Name FROM Tests)
|
|
BEGIN
|
|
PRINT 'Test already present in Tests'
|
|
RETURN
|
|
END
|
|
INSERT INTO Tests (Name) VALUES (@testName)
|
|
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE addTestTables (@testName VARCHAR(255), @tableName VARCHAR(255), @rows INT, @position INT) AS
|
|
IF @tableName NOT IN (SELECT Name FROM Tables)
|
|
BEGIN
|
|
PRINT 'Table not present in Tables'
|
|
RETURN
|
|
END
|
|
IF @testName NOT IN (SELECT Name FROM Tests)
|
|
BEGIN
|
|
PRINT 'Test not present in Tests'
|
|
RETURN
|
|
END
|
|
IF EXISTS(
|
|
SELECT 1 FROM TestTables tt JOIN Tests t on tt.TestID = t.TestID
|
|
WHERE t.Name = @testName and tt.Position = @position
|
|
)
|
|
BEGIN
|
|
PRINT 'Position already exists in TestTables for current test'
|
|
RETURN
|
|
END
|
|
INSERT INTO TestTables (TableID, TestID, NoOfRows, Position) VALUES
|
|
(
|
|
(SELECT TableID from Tables WHERE Name = @tableName),
|
|
(SELECT TestID from Tests WHERE Name = @testName),
|
|
@rows,
|
|
@position
|
|
)
|
|
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE addTestViews (@testName VARCHAR(255), @viewName VARCHAR(255)) AS
|
|
IF @viewName NOT IN (SELECT Name FROM Views)
|
|
BEGIN
|
|
PRINT 'View not present in Views'
|
|
RETURN
|
|
END
|
|
IF @testName NOT IN (SELECT Name FROM Tests)
|
|
BEGIN
|
|
PRINT 'Test not present in Tests'
|
|
RETURN
|
|
END
|
|
INSERT INTO TestViews (ViewID, TestID) VALUES
|
|
(
|
|
(SELECT ViewID from Views WHERE Name = @viewName),
|
|
(SELECT TestID from Tests WHERE Name = @testName)
|
|
)
|
|
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE runTest (@testName VARCHAR(255)) AS
|
|
DECLARE @startTime DATETIME
|
|
DECLARE @endTime DATETIME
|
|
DECLARE @insertStartTime DATETIME
|
|
DECLARE @insertEndTime DATETIME
|
|
DECLARE @selectStartTime DATETIME
|
|
DECLARE @selectEndTime DATETIME
|
|
DECLARE @table VARCHAR(255)
|
|
DECLARE @view VARCHAR(255)
|
|
DECLARE @noOfTables INT
|
|
DECLARE @noOfViews INT
|
|
DECLARE @offset INT
|
|
DECLARE @rows INT
|
|
DECLARE @testRunID INT
|
|
DECLARE @command VARCHAR(255)
|
|
INSERT INTO TestRuns (Description) VALUES
|
|
(
|
|
'Test run for ' + @testName
|
|
)
|
|
SET @testRunID =(SELECT MAX(TestRunID) FROM TestRuns)
|
|
|
|
SET @offset = 0
|
|
SET @noOfTables = (SELECT COUNT(*) FROM TestTables tt JOIN Tests t on tt.TestID = t.TestID WHERE t.Name = @testName)
|
|
SET @noOfViews = (SELECT COUNT(*) FROM TestViews tv JOIN Tests t on tv.TestID = t.TestID WHERE t.Name = @testName)
|
|
IF @testName NOT IN (SELECT Name FROM Tests)
|
|
BEGIN
|
|
PRINT 'Test not present in Tests'
|
|
RETURN
|
|
END
|
|
|
|
SET @startTime = GETDATE()
|
|
WHILE @offset < @noOfTables
|
|
BEGIN
|
|
SET @table = (SELECT tab.Name FROM TestTables tt JOIN Tests t on tt.TestID = t.TestID JOIN Tables tab on tt.TableID = tab.TableID WHERE t.Name = @testName ORDER BY tt.Position OFFSET @offset ROWS FETCH NEXT 1 ROWS ONLY)
|
|
EXEC ('delete from ' + @table)
|
|
SET @offset = @offset + 1
|
|
END
|
|
SET @offset = 0
|
|
|
|
WHILE @offset < @noOfTables
|
|
BEGIN
|
|
SET @table = (SELECT tab.Name FROM TestTables tt JOIN Tests t on tt.TestID = t.TestID JOIN Tables tab on tt.TableID = tab.TableID WHERE t.Name = @testName ORDER BY tt.Position DESC OFFSET @offset ROWS FETCH NEXT 1 ROWS ONLY)
|
|
SET @rows = (SELECT NoOfRows FROM TestTables tt JOIN Tests t on tt.TestID = t.TestID JOIN Tables tab on tt.TableID = tab.TableID WHERE t.Name = @testName ORDER BY tt.Position DESC OFFSET @offset ROWS FETCH NEXT 1 ROWS ONLY)
|
|
SET @insertStartTime = GETDATE()
|
|
SET @command = 'populate' + @table
|
|
EXEC @command @rows
|
|
SET @insertEndTime = GETDATE()
|
|
INSERT INTO TestRunTables (TestRunID, TableID, StartAt, EndAt) VALUES
|
|
(
|
|
@testRunID,
|
|
(SELECT TableID FROM Tables WHERE Name = @table),
|
|
@insertStartTime,
|
|
@insertEndTime
|
|
)
|
|
SET @offset = @offset + 1
|
|
END
|
|
SET @offset = 0
|
|
WHILE @offset < @noOfViews
|
|
BEGIN
|
|
SET @view = (SELECT v.Name FROM TestViews tv JOIN Tests t on tv.TestID = t.TestID JOIN Views v on tv.ViewID = v.ViewID WHERE t.Name = @testName ORDER BY tv.ViewID OFFSET @offset ROWS FETCH NEXT 1 ROWS ONLY)
|
|
SET @selectStartTime = GETDATE()
|
|
EXEC ('select * from ' + @view)
|
|
SET @selectEndTime = GETDATE()
|
|
INSERT INTO TestRunViews (TestRunID, ViewID, StartAt, EndAt) VALUES
|
|
(
|
|
@testRunID,
|
|
(SELECT ViewID FROM Views WHERE Name = @view),
|
|
@selectStartTime,
|
|
@selectEndTime
|
|
)
|
|
SET @offset = @offset + 1
|
|
END
|
|
SET @endTime = GETDATE()
|
|
UPDATE TestRuns SET StartAt = @startTime, EndAt = @endTime WHERE TestRunID = @testRunID
|
|
|
|
|
|
SELECT * FROM TestRuns
|
|
SELECT * FROM TestRunTables
|
|
SELECT * FROM TestRunViews
|
|
|
|
|