School Commit Init

This commit is contained in:
2024-08-31 12:07:21 +03:00
commit 0b130ee18c
2801 changed files with 4720552 additions and 0 deletions
@@ -0,0 +1,480 @@
if exists (select * from dbo.sysobjects where id = object_id(N'[FK_TestRunTables_Tables]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [TestRunTables] DROP CONSTRAINT FK_TestRunTables_Tables
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[FK_TestTables_Tables]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [TestTables] DROP CONSTRAINT FK_TestTables_Tables
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[FK_TestRunTables_TestRuns]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [TestRunTables] DROP CONSTRAINT FK_TestRunTables_TestRuns
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[FK_TestRunViews_TestRuns]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [TestRunViews] DROP CONSTRAINT FK_TestRunViews_TestRuns
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[FK_TestTables_Tests]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [TestTables] DROP CONSTRAINT FK_TestTables_Tests
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[FK_TestViews_Tests]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [TestViews] DROP CONSTRAINT FK_TestViews_Tests
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[FK_TestRunViews_Views]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [TestRunViews] DROP CONSTRAINT FK_TestRunViews_Views
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[FK_TestViews_Views]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [TestViews] DROP CONSTRAINT FK_TestViews_Views
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[Tables]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [Tables]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[TestRunTables]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [TestRunTables]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[TestRunViews]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [TestRunViews]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[TestRuns]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [TestRuns]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[TestTables]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [TestTables]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[TestViews]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [TestViews]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[Tests]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [Tests]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[Views]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [Views]
GO
CREATE TABLE [Tables] (
[TableID] [int] IDENTITY (1, 1) NOT NULL ,
[Name] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [TestRunTables] (
[TestRunID] [int] NOT NULL ,
[TableID] [int] NOT NULL ,
[StartAt] [datetime] NOT NULL ,
[EndAt] [datetime] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [TestRunViews] (
[TestRunID] [int] NOT NULL ,
[ViewID] [int] NOT NULL ,
[StartAt] [datetime] NOT NULL ,
[EndAt] [datetime] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [TestRuns] (
[TestRunID] [int] IDENTITY (1, 1) NOT NULL ,
[Description] [nvarchar] (2000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[StartAt] [datetime] NULL ,
[EndAt] [datetime] NULL
) ON [PRIMARY]
GO
CREATE TABLE [TestTables] (
[TestID] [int] NOT NULL ,
[TableID] [int] NOT NULL ,
[NoOfRows] [int] NOT NULL ,
[Position] [int] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [TestViews] (
[TestID] [int] NOT NULL ,
[ViewID] [int] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [Tests] (
[TestID] [int] IDENTITY (1, 1) NOT NULL ,
[Name] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [Views] (
[ViewID] [int] IDENTITY (1, 1) NOT NULL ,
[Name] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [Tables] WITH NOCHECK ADD
CONSTRAINT [PK_Tables] PRIMARY KEY CLUSTERED
(
[TableID]
) ON [PRIMARY]
GO
ALTER TABLE [TestRunTables] WITH NOCHECK ADD
CONSTRAINT [PK_TestRunTables] PRIMARY KEY CLUSTERED
(
[TestRunID],
[TableID]
) ON [PRIMARY]
GO
ALTER TABLE [TestRunViews] WITH NOCHECK ADD
CONSTRAINT [PK_TestRunViews] PRIMARY KEY CLUSTERED
(
[TestRunID],
[ViewID]
) ON [PRIMARY]
GO
ALTER TABLE [TestRuns] WITH NOCHECK ADD
CONSTRAINT [PK_TestRuns] PRIMARY KEY CLUSTERED
(
[TestRunID]
) ON [PRIMARY]
GO
ALTER TABLE [TestTables] WITH NOCHECK ADD
CONSTRAINT [PK_TestTables] PRIMARY KEY CLUSTERED
(
[TestID],
[TableID]
) ON [PRIMARY]
GO
ALTER TABLE [TestViews] WITH NOCHECK ADD
CONSTRAINT [PK_TestViews] PRIMARY KEY CLUSTERED
(
[TestID],
[ViewID]
) ON [PRIMARY]
GO
ALTER TABLE [Tests] WITH NOCHECK ADD
CONSTRAINT [PK_Tests] PRIMARY KEY CLUSTERED
(
[TestID]
) ON [PRIMARY]
GO
ALTER TABLE [Views] WITH NOCHECK ADD
CONSTRAINT [PK_Views] PRIMARY KEY CLUSTERED
(
[ViewID]
) ON [PRIMARY]
GO
ALTER TABLE [TestRunTables] ADD
CONSTRAINT [FK_TestRunTables_Tables] FOREIGN KEY
(
[TableID]
) REFERENCES [Tables] (
[TableID]
) ON DELETE CASCADE ON UPDATE CASCADE ,
CONSTRAINT [FK_TestRunTables_TestRuns] FOREIGN KEY
(
[TestRunID]
) REFERENCES [TestRuns] (
[TestRunID]
) ON DELETE CASCADE ON UPDATE CASCADE
GO
ALTER TABLE [TestRunViews] ADD
CONSTRAINT [FK_TestRunViews_TestRuns] FOREIGN KEY
(
[TestRunID]
) REFERENCES [TestRuns] (
[TestRunID]
) ON DELETE CASCADE ON UPDATE CASCADE ,
CONSTRAINT [FK_TestRunViews_Views] FOREIGN KEY
(
[ViewID]
) REFERENCES [Views] (
[ViewID]
) ON DELETE CASCADE ON UPDATE CASCADE
GO
ALTER TABLE [TestTables] ADD
CONSTRAINT [FK_TestTables_Tables] FOREIGN KEY
(
[TableID]
) REFERENCES [Tables] (
[TableID]
) ON DELETE CASCADE ON UPDATE CASCADE ,
CONSTRAINT [FK_TestTables_Tests] FOREIGN KEY
(
[TestID]
) REFERENCES [Tests] (
[TestID]
) ON DELETE CASCADE ON UPDATE CASCADE
GO
ALTER TABLE [TestViews] ADD
CONSTRAINT [FK_TestViews_Tests] FOREIGN KEY
(
[TestID]
) REFERENCES [Tests] (
[TestID]
),
CONSTRAINT [FK_TestViews_Views] FOREIGN KEY
(
[ViewID]
) REFERENCES [Views] (
[ViewID]
)
GO
@@ -0,0 +1,173 @@
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
@@ -0,0 +1,29 @@
USE "Gwent - The Witcher Card Game"
GO
CREATE OR ALTER PROCEDURE populateFactions (@rows INT) AS
WHILE @rows > 0
BEGIN
INSERT INTO Factions(name, totalMatches, totalWins, totalLosses, totalCards, totalDraws)
VALUES ('test', -1, -1, -1, -1, -1)
SET @rows = @rows - 1
END
GO
CREATE OR ALTER VIEW getNameAndTotalMatches AS
SELECT name, totalMatches
FROM Factions
GO
EXEC addTests 'test1'
EXEC addToTables 'Factions'
EXEC addToViews 'getNameAndTotalMatches'
EXEC addTestTables 'test1', 'Factions', 1000, 1
EXEC addTestViews 'test1', 'getNameAndTotalMatches'
GO
EXEC runTest 'test1'
@@ -0,0 +1,94 @@
USE "Gwent - The Witcher Card Game"
GO
CREATE OR ALTER PROCEDURE populateFactions (@rows INT) AS
WHILE @rows > 0
BEGIN
INSERT INTO Factions(name, totalMatches, totalWins, totalLosses, totalCards, totalDraws)
VALUES ('test', -1, -1, -1, -1, -1)
SET @rows = @rows - 1
END
GO
CREATE OR ALTER PROCEDURE populatePlayers (@rows INT) AS
WHILE @rows > 0
BEGIN
INSERT INTO Players(name, totalMatches, totalWins, totalLosses, totalDraws, reward_points, scraps, ores, meteorite_powder, rank)
VALUES ('test', -1, -1, -1, -1, -1, -1, -1, -1, -1)
SET @rows = @rows - 1
END
GO
CREATE OR ALTER PROCEDURE populateCardSet (@rows INT) AS
WHILE @rows > 0
BEGIN
INSERT INTO CardSet(name, image, releaseDate)
VALUES ('test', 'test', '2020-01-01')
SET @rows = @rows - 1
END
GO
CREATE OR ALTER PROCEDURE populateCards (@rows INT) AS
DECLARE @faction INT
SET @faction = (SELECT TOP 1 hmy FROM Factions)
DECLARE @cardset INT
SET @cardset = (SELECT TOP 1 hmy FROM CardSet)
WHILE @rows > 0
BEGIN
INSERT INTO Cards(name, faction, description, action, image, cost, type, power, color, cardset)
VALUES ('test', @faction, 'test', 'test', 'test', -1, 'unit', -1, 'gold', @cardset)
SET @rows = @rows - 1
END
GO
CREATE OR ALTER PROCEDURE populateCardsOwnership (@rows INT) AS
DECLARE @card INT
DECLARE @player INT
WHILE @rows > 0
BEGIN
SET @card = (SELECT hmy FROM Cards ORDER BY hmy OFFSET @rows ROWS FETCH NEXT 1 ROWS ONLY)
SET @player = (SELECT hmy FROM Players ORDER BY hmy OFFSET @rows ROWS FETCH NEXT 1 ROWS ONLY)
INSERT INTO CardsOwnership(hCard, hPlayer, nrOfCards, nrOfPremiumCards)
VALUES (@card, @player, 1, 1)
SET @rows = @rows - 1
END
GO
CREATE OR ALTER VIEW getNumberOfCardsOfEachTypeOwnByEachPlayer AS
SELECT p.name as Player, cs.Name as CardSet, Count(c.hmy) as NumberOfCards
FROM CardsOwnership co JOIN Cards c on co.hCard = c.hmy JOIN Players p on co.hPlayer = p.hmy JOIN CardSet cs on c.cardset = cs.hmy
GROUP BY p.name, cs.Name
GO
EXEC addTests 'test2'
EXEC addToTables 'Factions'
EXEC addToTables 'Players'
EXEC addToTables 'Matches'
EXEC addToTables 'CardSet'
EXEC addToTables 'Cards'
EXEC addToTables 'CardsOwnership'
EXEC addToViews 'getNumberOfCardsOfEachTypeOwnByEachPlayer'
EXEC addTestTables 'test2', 'Factions', 100, 6
EXEC addTestTables 'test2', 'Players', 1000, 5
EXEC addTestTables 'test2', 'CardSet', 10, 4
EXEC addTestTables 'test2', 'Matches', 10, 3
EXEC addTestTables 'test2', 'Cards', 1000, 2
EXEC addTestTables 'test2', 'CardsOwnership', 500, 1
EXEC addTestViews 'test2', 'getNumberOfCardsOfEachTypeOwnByEachPlayer'
GO
EXEC runTest 'test2'
@@ -0,0 +1,63 @@
USE "Gwent - The Witcher Card Game"
GO
CREATE OR ALTER PROCEDURE populateFactions (@rows INT) AS
WHILE @rows > 0
BEGIN
INSERT INTO Factions(name, totalMatches, totalWins, totalLosses, totalCards, totalDraws)
VALUES ('test', -1, -1, -1, -1, -1)
SET @rows = @rows - 1
END
GO
CREATE OR ALTER PROCEDURE populatePlayers (@rows INT) AS
WHILE @rows > 0
BEGIN
INSERT INTO Players(name, totalMatches, totalWins, totalLosses, totalDraws, reward_points, scraps, ores, meteorite_powder, rank)
VALUES ('test', -1, -1, -1, -1, -1, -1, -1, -1, -1)
SET @rows = @rows - 1
END
GO
CREATE OR ALTER PROCEDURE populateMatches (@rows INT) AS
DECLARE @player1 INT
SET @player1 = (SELECT TOP 1 hmy FROM Players)
DECLARE @player2 INT
SET @player2 = (SELECT TOP 1 hmy FROM Players WHERE hmy <> @player1)
DECLARE @faction INT
SET @faction = (SELECT TOP 1 hmy FROM Factions)
WHILE @rows > 0
BEGIN
INSERT INTO Matches(hPlayer1, hPlayer2, hPlayer1Faction, hPlayer2Faction, result)
VALUES (@player1, @player2, @faction, @faction, 1)
SET @rows = @rows - 1
END
GO
CREATE OR ALTER VIEW getMatches AS
SELECT p1.name as player1, p2.name as player2, f1.name as player1Faction, f2.name as player2Faction
FROM Matches m
JOIN Players p1 on m.hPlayer1 = p1.hmy
JOIN Players p2 on m.hPlayer2 = p2.hmy
JOIN Factions f1 on m.hPlayer1Faction = f1.hmy
JOIN Factions f2 on m.hPlayer2Faction = f2.hmy
GO
EXEC addTests 'test3'
EXEC addToTables 'Factions'
EXEC addToTables 'Players'
EXEC addToTables 'Matches'
EXEC addToViews 'getMatches'
EXEC addTestTables 'test3', 'Factions', 1000, 3
EXEC addTestTables 'test3', 'Players', 1000, 2
EXEC addTestTables 'test3', 'Matches', 1000, 1
EXEC addTestViews 'test3', 'getMatches'
GO
EXEC runTest 'test3'