Files
2024-08-31 12:07:21 +03:00

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