From 85c4837714c9f2cb5be7a0b554eab3ad20d9e3da Mon Sep 17 00:00:00 2001 From: Graham Walker Date: Fri, 13 Jun 2025 15:15:43 -0500 Subject: [PATCH] PM-20574 fixing sql --- .../2025-06-10-00_OrganizationReport.sql | 8 +- .../2025-06-10-01_OrganizationApplication.sql | 8 +- .../2025-06-10-00_OrganizationReport.sql | 111 ++++++++++++ .../2025-06-10-01_OrganizationApplication.sql | 126 ++++++++++++++ .../2025-06-10_02_UpdateOrgDeleteByIdProc.sql | 161 ++++++++++++++++++ .../2025-06-10-00_OrganizationReport.psql | 105 ++++++++++++ ...2025-06-10-01_OrganizationApplication.psql | 120 +++++++++++++ ...2025-06-10_02_UpdateOrgDeleteByIdProc.psql | 161 ++++++++++++++++++ .../2025-06-10-00_OrganizationReport.sql | 105 ++++++++++++ .../2025-06-10-01_OrganizationApplication.sql | 120 +++++++++++++ .../2025-06-10_02_UpdateOrgDeleteByIdProc.sql | 161 ++++++++++++++++++ 11 files changed, 1172 insertions(+), 14 deletions(-) create mode 100644 util/MySqlMigrations/HelperScripts/2025-06-10-00_OrganizationReport.sql create mode 100644 util/MySqlMigrations/HelperScripts/2025-06-10-01_OrganizationApplication.sql create mode 100644 util/MySqlMigrations/HelperScripts/2025-06-10_02_UpdateOrgDeleteByIdProc.sql create mode 100644 util/PostgresMigrations/HelperScripts/2025-06-10-00_OrganizationReport.psql create mode 100644 util/PostgresMigrations/HelperScripts/2025-06-10-01_OrganizationApplication.psql create mode 100644 util/PostgresMigrations/HelperScripts/2025-06-10_02_UpdateOrgDeleteByIdProc.psql create mode 100644 util/SqliteMigrations/HelperScripts/2025-06-10-00_OrganizationReport.sql create mode 100644 util/SqliteMigrations/HelperScripts/2025-06-10-01_OrganizationApplication.sql create mode 100644 util/SqliteMigrations/HelperScripts/2025-06-10_02_UpdateOrgDeleteByIdProc.sql diff --git a/util/Migrator/DbScripts/2025-06-10-00_OrganizationReport.sql b/util/Migrator/DbScripts/2025-06-10-00_OrganizationReport.sql index dfe13253a3..f91e1a5e32 100644 --- a/util/Migrator/DbScripts/2025-06-10-00_OrganizationReport.sql +++ b/util/Migrator/DbScripts/2025-06-10-00_OrganizationReport.sql @@ -17,13 +17,7 @@ BEGIN END GO -IF OBJECT_ID('dbo.OrganizationReportView') IS NOT NULL -BEGIN - DROP VIEW [dbo].[OrganizationReportView] -END -GO - -CREATE VIEW [dbo].[OrganizationReportView] AS +CREATE OR ALTER VIEW [dbo].[OrganizationReportView] AS SELECT * FROM [dbo].[OrganizationReport]; GO diff --git a/util/Migrator/DbScripts/2025-06-10-01_OrganizationApplication.sql b/util/Migrator/DbScripts/2025-06-10-01_OrganizationApplication.sql index b16f5857b0..acf222912a 100644 --- a/util/Migrator/DbScripts/2025-06-10-01_OrganizationApplication.sql +++ b/util/Migrator/DbScripts/2025-06-10-01_OrganizationApplication.sql @@ -15,13 +15,7 @@ BEGIN END GO -IF OBJECT_ID('dbo.OrganizationApplicationView') IS NOT NULL -BEGIN - DROP VIEW [dbo].[OrganizationApplicationView]; -END -GO - -CREATE VIEW [dbo].[OrganizationApplicationView] AS +CREATE OR ALTER VIEW [dbo].[OrganizationApplicationView] AS SELECT * FROM [dbo].[OrganizationApplication]; GO diff --git a/util/MySqlMigrations/HelperScripts/2025-06-10-00_OrganizationReport.sql b/util/MySqlMigrations/HelperScripts/2025-06-10-00_OrganizationReport.sql new file mode 100644 index 0000000000..dfe13253a3 --- /dev/null +++ b/util/MySqlMigrations/HelperScripts/2025-06-10-00_OrganizationReport.sql @@ -0,0 +1,111 @@ +IF OBJECT_ID('dbo.OrganizationReport') IS NULL +BEGIN + CREATE TABLE [dbo].[OrganizationReport] + ( + [Id] UNIQUEIDENTIFIER NOT NULL, + [OrganizationId] UNIQUEIDENTIFIER NOT NULL, + [Date] DATETIME2 (7) NOT NULL, + [ReportData] NVARCHAR(MAX) NOT NULL, + [CreationDate] DATETIME2 (7) NOT NULL, + [RevisionDate] DATETIME2 (7) NOT NULL, + CONSTRAINT [PK_OrganizationReport] PRIMARY KEY CLUSTERED ([Id] ASC), + CONSTRAINT [FK_OrganizationReport_Organization] FOREIGN KEY ([OrganizationId]) REFERENCES [dbo].[Organization] ([Id]) + ); + + CREATE NONCLUSTERED INDEX [IX_OrganizationReport_OrganizationId] + ON [dbo].[OrganizationReport]([OrganizationId] ASC); +END +GO + +IF OBJECT_ID('dbo.OrganizationReportView') IS NOT NULL +BEGIN + DROP VIEW [dbo].[OrganizationReportView] +END +GO + +CREATE VIEW [dbo].[OrganizationReportView] AS + SELECT * FROM [dbo].[OrganizationReport]; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationReport_Create] + @Id UNIQUEIDENTIFIER, + @OrganizationId UNIQUEIDENTIFIER, + @Date DATETIME2(7), + @ReportData NVARCHAR(MAX), + @CreationDate DATETIME2(7), + @RevisionDate DATETIME2(7) +AS + SET NOCOUNT ON; + INSERT INTO [dbo].[OrganizationReport]( [Id],[OrganizationId],[Date],[ReportData],[CreationDate],[RevisionDate] ) + VALUES ( @Id,@OrganizationId,@Date,@ReportData,@CreationDate,@RevisionDate); +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationReport_ReadByOrganizationId] + @OrganizationId UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @OrganizationId IS NULL + THROW 50000, 'OrganizationId cannot be null', 1; + + SELECT + [Id], + [OrganizationId], + [Date], + [ReportData], + [CreationDate], + [RevisionDate] + FROM [dbo].[OrganizationReport] + WHERE [OrganizationId] = @OrganizationId; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationReport_ReadById] + @Id UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @Id IS NULL + THROW 50000, 'Id cannot be null', 1; + + SELECT + [Id], + [OrganizationId], + [Date], + [ReportData], + [CreationDate], + [RevisionDate] + FROM [dbo].[OrganizationReport] + WHERE [Id] = @Id; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationReport_Update] + @Id UNIQUEIDENTIFIER OUTPUT, + @OrganizationId UNIQUEIDENTIFIER, + @Date DATETIME2(7), + @ReportData NVARCHAR(MAX), + @RevisionDate DATETIME2(7) +AS + SET NOCOUNT ON; + UPDATE [dbo].[OrganizationReport] + SET [OrganizationId] = @OrganizationId, + [Date] = @Date, + [ReportData] = @ReportData, + [RevisionDate] = @RevisionDate + WHERE [Id] = @Id; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationReport_DeleteById] + @Id UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @Id IS NULL + THROW 50000, 'Id cannot be null', 1; + + DELETE FROM [dbo].[OrganizationReport] + WHERE [Id] = @Id; +GO + + + + diff --git a/util/MySqlMigrations/HelperScripts/2025-06-10-01_OrganizationApplication.sql b/util/MySqlMigrations/HelperScripts/2025-06-10-01_OrganizationApplication.sql new file mode 100644 index 0000000000..b16f5857b0 --- /dev/null +++ b/util/MySqlMigrations/HelperScripts/2025-06-10-01_OrganizationApplication.sql @@ -0,0 +1,126 @@ +IF OBJECT_ID('dbo.OrganizationApplication') IS NULL +BEGIN + CREATE TABLE [dbo].[OrganizationApplication] ( + [Id] UNIQUEIDENTIFIER NOT NULL, + [OrganizationId] UNIQUEIDENTIFIER NOT NULL, + [Applications] NVARCHAR(MAX) NOT NULL, + [CreationDate] DATETIME2 (7) NOT NULL, + [RevisionDate] DATETIME2 (7) NOT NULL, + CONSTRAINT [PK_OrganizationApplication] PRIMARY KEY CLUSTERED ([Id] ASC), + CONSTRAINT [FK_OrganizationApplication_Organization] FOREIGN KEY ([OrganizationId]) REFERENCES [dbo].[Organization] ([Id]) + ); + + CREATE NONCLUSTERED INDEX [IX_OrganizationApplication_OrganizationId] + ON [dbo].[OrganizationApplication]([OrganizationId] ASC); +END +GO + +IF OBJECT_ID('dbo.OrganizationApplicationView') IS NOT NULL +BEGIN + DROP VIEW [dbo].[OrganizationApplicationView]; +END +GO + +CREATE VIEW [dbo].[OrganizationApplicationView] AS + SELECT * FROM [dbo].[OrganizationApplication]; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_Create] + @Id UNIQUEIDENTIFIER, + @OrganizationId UNIQUEIDENTIFIER, + @Applications NVARCHAR(MAX), + @CreationDate DATETIME2(7), + @RevisionDate DATETIME2(7) +AS + SET NOCOUNT ON; + + INSERT INTO [dbo].[OrganizationApplication] + ( + [Id], + [OrganizationId], + [Applications], + [CreationDate], + [RevisionDate] + ) + VALUES + ( + @Id, + @OrganizationId, + @Applications, + @CreationDate, + @RevisionDate + ); +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_ReadByOrganizationId] + @OrganizationId UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @OrganizationId IS NULL + THROW 50000, 'OrganizationId cannot be null', 1; + + SELECT + [Id], + [OrganizationId], + [Applications], + [CreationDate], + [RevisionDate] + FROM [dbo].[OrganizationApplication] + WHERE [OrganizationId] = @OrganizationId; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_ReadById] + @Id UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @Id IS NULL + THROW 50000, 'Id cannot be null', 1; + + SELECT + [Id], + [OrganizationId], + [Applications], + [CreationDate], + [RevisionDate] + FROM [dbo].[OrganizationApplication] + WHERE [Id] = @Id; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_Update] + @Id UNIQUEIDENTIFIER, + @OrganizationId UNIQUEIDENTIFIER, + @Applications NVARCHAR(MAX), + @RevisionDate DATETIME2(7) +AS + SET NOCOUNT ON; + UPDATE [dbo].[OrganizationApplication] + SET + [OrganizationId] = @OrganizationId, + [Applications] = @Applications, + [RevisionDate] = @RevisionDate + WHERE [Id] = @Id; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_DeleteById] + @Id UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @Id IS NULL + THROW 50000, 'Id cannot be null', 1; + + DELETE FROM [dbo].[OrganizationApplication] + WHERE [Id] = @Id; +GO + + + + + + + + + + diff --git a/util/MySqlMigrations/HelperScripts/2025-06-10_02_UpdateOrgDeleteByIdProc.sql b/util/MySqlMigrations/HelperScripts/2025-06-10_02_UpdateOrgDeleteByIdProc.sql new file mode 100644 index 0000000000..9f311a53af --- /dev/null +++ b/util/MySqlMigrations/HelperScripts/2025-06-10_02_UpdateOrgDeleteByIdProc.sql @@ -0,0 +1,161 @@ +CREATE OR ALTER PROCEDURE [dbo].[Organization_DeleteById] + @Id UNIQUEIDENTIFIER +WITH RECOMPILE +AS +BEGIN + SET NOCOUNT ON + + EXEC [dbo].[User_BumpAccountRevisionDateByOrganizationId] @Id + + DECLARE @BatchSize INT = 100 + WHILE @BatchSize > 0 + BEGIN + BEGIN TRANSACTION Organization_DeleteById_Ciphers + + DELETE TOP(@BatchSize) + FROM + [dbo].[Cipher] + WHERE + [UserId] IS NULL + AND [OrganizationId] = @Id + + SET @BatchSize = @@ROWCOUNT + + COMMIT TRANSACTION Organization_DeleteById_Ciphers + END + + BEGIN TRANSACTION Organization_DeleteById + + DELETE + FROM + [dbo].[AuthRequest] + WHERE + [OrganizationId] = @Id + + DELETE + FROM + [dbo].[SsoUser] + WHERE + [OrganizationId] = @Id + + DELETE + FROM + [dbo].[SsoConfig] + WHERE + [OrganizationId] = @Id + + DELETE CU + FROM + [dbo].[CollectionUser] CU + INNER JOIN + [dbo].[OrganizationUser] OU ON [CU].[OrganizationUserId] = [OU].[Id] + WHERE + [OU].[OrganizationId] = @Id + + DELETE AP + FROM + [dbo].[AccessPolicy] AP + INNER JOIN + [dbo].[OrganizationUser] OU ON [AP].[OrganizationUserId] = [OU].[Id] + WHERE + [OU].[OrganizationId] = @Id + + DELETE GU + FROM + [dbo].[GroupUser] GU + INNER JOIN + [dbo].[OrganizationUser] OU ON [GU].[OrganizationUserId] = [OU].[Id] + WHERE + [OU].[OrganizationId] = @Id + + DELETE + FROM + [dbo].[OrganizationUser] + WHERE + [OrganizationId] = @Id + + DELETE + FROM + [dbo].[ProviderOrganization] + WHERE + [OrganizationId] = @Id + + EXEC [dbo].[OrganizationApiKey_OrganizationDeleted] @Id + EXEC [dbo].[OrganizationConnection_OrganizationDeleted] @Id + EXEC [dbo].[OrganizationSponsorship_OrganizationDeleted] @Id + EXEC [dbo].[OrganizationDomain_OrganizationDeleted] @Id + EXEC [dbo].[OrganizationIntegration_OrganizationDeleted] @Id + + DELETE + FROM + [dbo].[Project] + WHERE + [OrganizationId] = @Id + + DELETE + FROM + [dbo].[Secret] + WHERE + [OrganizationId] = @Id + + DELETE AK + FROM + [dbo].[ApiKey] AK + INNER JOIN + [dbo].[ServiceAccount] SA ON [AK].[ServiceAccountId] = [SA].[Id] + WHERE + [SA].[OrganizationId] = @Id + + DELETE AP + FROM + [dbo].[AccessPolicy] AP + INNER JOIN + [dbo].[ServiceAccount] SA ON [AP].[GrantedServiceAccountId] = [SA].[Id] + WHERE + [SA].[OrganizationId] = @Id + + DELETE + FROM + [dbo].[ServiceAccount] + WHERE + [OrganizationId] = @Id + + -- Delete Notification Status + DELETE + NS + FROM + [dbo].[NotificationStatus] NS + INNER JOIN + [dbo].[Notification] N ON N.[Id] = NS.[NotificationId] + WHERE + N.[OrganizationId] = @Id + + -- Delete Notification + DELETE + FROM + [dbo].[Notification] + WHERE + [OrganizationId] = @Id + + -- Delete Organization Application + DELETE + FROM + [dbo].[OrganizationApplication] + WHERE + [Id] = @Id + + -- Delete Organization Report + DELETE + FROM + [dbo].[OrganizationReport] + WHERE + [Id] = @Id + + DELETE + FROM + [dbo].[Organization] + WHERE + [Id] = @Id + COMMIT TRANSACTION Organization_DeleteById + END + GO diff --git a/util/PostgresMigrations/HelperScripts/2025-06-10-00_OrganizationReport.psql b/util/PostgresMigrations/HelperScripts/2025-06-10-00_OrganizationReport.psql new file mode 100644 index 0000000000..1152876624 --- /dev/null +++ b/util/PostgresMigrations/HelperScripts/2025-06-10-00_OrganizationReport.psql @@ -0,0 +1,105 @@ +IF OBJECT_ID('dbo.OrganizationReport') IS NULL +BEGIN + CREATE TABLE [dbo].[OrganizationReport] + ( + [Id] UNIQUEIDENTIFIER NOT NULL, + [OrganizationId] UNIQUEIDENTIFIER NOT NULL, + [Date] DATETIME2 (7) NOT NULL, + [ReportData] NVARCHAR(MAX) NOT NULL, + [CreationDate] DATETIME2 (7) NOT NULL, + [RevisionDate] DATETIME2 (7) NOT NULL, + CONSTRAINT [PK_OrganizationReport] PRIMARY KEY CLUSTERED ([Id] ASC), + CONSTRAINT [FK_OrganizationReport_Organization] FOREIGN KEY ([OrganizationId]) REFERENCES [dbo].[Organization] ([Id]) + ); + + CREATE NONCLUSTERED INDEX [IX_OrganizationReport_OrganizationId] + ON [dbo].[OrganizationReport]([OrganizationId] ASC); +END +GO + +CREATE OR ALTER VIEW[dbo].[OrganizationReportView] AS + SELECT * FROM [dbo].[OrganizationReport]; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationReport_Create] + @Id UNIQUEIDENTIFIER, + @OrganizationId UNIQUEIDENTIFIER, + @Date DATETIME2(7), + @ReportData NVARCHAR(MAX), + @CreationDate DATETIME2(7), + @RevisionDate DATETIME2(7) +AS + SET NOCOUNT ON; + INSERT INTO [dbo].[OrganizationReport]( [Id],[OrganizationId],[Date],[ReportData],[CreationDate],[RevisionDate] ) + VALUES ( @Id,@OrganizationId,@Date,@ReportData,@CreationDate,@RevisionDate); +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationReport_ReadByOrganizationId] + @OrganizationId UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @OrganizationId IS NULL + THROW 50000, 'OrganizationId cannot be null', 1; + + SELECT + [Id], + [OrganizationId], + [Date], + [ReportData], + [CreationDate], + [RevisionDate] + FROM [dbo].[OrganizationReport] + WHERE [OrganizationId] = @OrganizationId; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationReport_ReadById] + @Id UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @Id IS NULL + THROW 50000, 'Id cannot be null', 1; + + SELECT + [Id], + [OrganizationId], + [Date], + [ReportData], + [CreationDate], + [RevisionDate] + FROM [dbo].[OrganizationReport] + WHERE [Id] = @Id; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationReport_Update] + @Id UNIQUEIDENTIFIER OUTPUT, + @OrganizationId UNIQUEIDENTIFIER, + @Date DATETIME2(7), + @ReportData NVARCHAR(MAX), + @RevisionDate DATETIME2(7) +AS + SET NOCOUNT ON; + UPDATE [dbo].[OrganizationReport] + SET [OrganizationId] = @OrganizationId, + [Date] = @Date, + [ReportData] = @ReportData, + [RevisionDate] = @RevisionDate + WHERE [Id] = @Id; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationReport_DeleteById] + @Id UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @Id IS NULL + THROW 50000, 'Id cannot be null', 1; + + DELETE FROM [dbo].[OrganizationReport] + WHERE [Id] = @Id; +GO + + + + diff --git a/util/PostgresMigrations/HelperScripts/2025-06-10-01_OrganizationApplication.psql b/util/PostgresMigrations/HelperScripts/2025-06-10-01_OrganizationApplication.psql new file mode 100644 index 0000000000..00c6942eb5 --- /dev/null +++ b/util/PostgresMigrations/HelperScripts/2025-06-10-01_OrganizationApplication.psql @@ -0,0 +1,120 @@ +IF OBJECT_ID('dbo.OrganizationApplication') IS NULL +BEGIN + CREATE TABLE [dbo].[OrganizationApplication] ( + [Id] UNIQUEIDENTIFIER NOT NULL, + [OrganizationId] UNIQUEIDENTIFIER NOT NULL, + [Applications] NVARCHAR(MAX) NOT NULL, + [CreationDate] DATETIME2 (7) NOT NULL, + [RevisionDate] DATETIME2 (7) NOT NULL, + CONSTRAINT [PK_OrganizationApplication] PRIMARY KEY CLUSTERED ([Id] ASC), + CONSTRAINT [FK_OrganizationApplication_Organization] FOREIGN KEY ([OrganizationId]) REFERENCES [dbo].[Organization] ([Id]) + ); + + CREATE NONCLUSTERED INDEX [IX_OrganizationApplication_OrganizationId] + ON [dbo].[OrganizationApplication]([OrganizationId] ASC); +END +GO + +CREATE OR ALTER VIEW[dbo].[OrganizationApplicationView] AS + SELECT * FROM [dbo].[OrganizationApplication]; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_Create] + @Id UNIQUEIDENTIFIER, + @OrganizationId UNIQUEIDENTIFIER, + @Applications NVARCHAR(MAX), + @CreationDate DATETIME2(7), + @RevisionDate DATETIME2(7) +AS + SET NOCOUNT ON; + + INSERT INTO [dbo].[OrganizationApplication] + ( + [Id], + [OrganizationId], + [Applications], + [CreationDate], + [RevisionDate] + ) + VALUES + ( + @Id, + @OrganizationId, + @Applications, + @CreationDate, + @RevisionDate + ); +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_ReadByOrganizationId] + @OrganizationId UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @OrganizationId IS NULL + THROW 50000, 'OrganizationId cannot be null', 1; + + SELECT + [Id], + [OrganizationId], + [Applications], + [CreationDate], + [RevisionDate] + FROM [dbo].[OrganizationApplication] + WHERE [OrganizationId] = @OrganizationId; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_ReadById] + @Id UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @Id IS NULL + THROW 50000, 'Id cannot be null', 1; + + SELECT + [Id], + [OrganizationId], + [Applications], + [CreationDate], + [RevisionDate] + FROM [dbo].[OrganizationApplication] + WHERE [Id] = @Id; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_Update] + @Id UNIQUEIDENTIFIER, + @OrganizationId UNIQUEIDENTIFIER, + @Applications NVARCHAR(MAX), + @RevisionDate DATETIME2(7) +AS + SET NOCOUNT ON; + UPDATE [dbo].[OrganizationApplication] + SET + [OrganizationId] = @OrganizationId, + [Applications] = @Applications, + [RevisionDate] = @RevisionDate + WHERE [Id] = @Id; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_DeleteById] + @Id UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @Id IS NULL + THROW 50000, 'Id cannot be null', 1; + + DELETE FROM [dbo].[OrganizationApplication] + WHERE [Id] = @Id; +GO + + + + + + + + + + diff --git a/util/PostgresMigrations/HelperScripts/2025-06-10_02_UpdateOrgDeleteByIdProc.psql b/util/PostgresMigrations/HelperScripts/2025-06-10_02_UpdateOrgDeleteByIdProc.psql new file mode 100644 index 0000000000..9f311a53af --- /dev/null +++ b/util/PostgresMigrations/HelperScripts/2025-06-10_02_UpdateOrgDeleteByIdProc.psql @@ -0,0 +1,161 @@ +CREATE OR ALTER PROCEDURE [dbo].[Organization_DeleteById] + @Id UNIQUEIDENTIFIER +WITH RECOMPILE +AS +BEGIN + SET NOCOUNT ON + + EXEC [dbo].[User_BumpAccountRevisionDateByOrganizationId] @Id + + DECLARE @BatchSize INT = 100 + WHILE @BatchSize > 0 + BEGIN + BEGIN TRANSACTION Organization_DeleteById_Ciphers + + DELETE TOP(@BatchSize) + FROM + [dbo].[Cipher] + WHERE + [UserId] IS NULL + AND [OrganizationId] = @Id + + SET @BatchSize = @@ROWCOUNT + + COMMIT TRANSACTION Organization_DeleteById_Ciphers + END + + BEGIN TRANSACTION Organization_DeleteById + + DELETE + FROM + [dbo].[AuthRequest] + WHERE + [OrganizationId] = @Id + + DELETE + FROM + [dbo].[SsoUser] + WHERE + [OrganizationId] = @Id + + DELETE + FROM + [dbo].[SsoConfig] + WHERE + [OrganizationId] = @Id + + DELETE CU + FROM + [dbo].[CollectionUser] CU + INNER JOIN + [dbo].[OrganizationUser] OU ON [CU].[OrganizationUserId] = [OU].[Id] + WHERE + [OU].[OrganizationId] = @Id + + DELETE AP + FROM + [dbo].[AccessPolicy] AP + INNER JOIN + [dbo].[OrganizationUser] OU ON [AP].[OrganizationUserId] = [OU].[Id] + WHERE + [OU].[OrganizationId] = @Id + + DELETE GU + FROM + [dbo].[GroupUser] GU + INNER JOIN + [dbo].[OrganizationUser] OU ON [GU].[OrganizationUserId] = [OU].[Id] + WHERE + [OU].[OrganizationId] = @Id + + DELETE + FROM + [dbo].[OrganizationUser] + WHERE + [OrganizationId] = @Id + + DELETE + FROM + [dbo].[ProviderOrganization] + WHERE + [OrganizationId] = @Id + + EXEC [dbo].[OrganizationApiKey_OrganizationDeleted] @Id + EXEC [dbo].[OrganizationConnection_OrganizationDeleted] @Id + EXEC [dbo].[OrganizationSponsorship_OrganizationDeleted] @Id + EXEC [dbo].[OrganizationDomain_OrganizationDeleted] @Id + EXEC [dbo].[OrganizationIntegration_OrganizationDeleted] @Id + + DELETE + FROM + [dbo].[Project] + WHERE + [OrganizationId] = @Id + + DELETE + FROM + [dbo].[Secret] + WHERE + [OrganizationId] = @Id + + DELETE AK + FROM + [dbo].[ApiKey] AK + INNER JOIN + [dbo].[ServiceAccount] SA ON [AK].[ServiceAccountId] = [SA].[Id] + WHERE + [SA].[OrganizationId] = @Id + + DELETE AP + FROM + [dbo].[AccessPolicy] AP + INNER JOIN + [dbo].[ServiceAccount] SA ON [AP].[GrantedServiceAccountId] = [SA].[Id] + WHERE + [SA].[OrganizationId] = @Id + + DELETE + FROM + [dbo].[ServiceAccount] + WHERE + [OrganizationId] = @Id + + -- Delete Notification Status + DELETE + NS + FROM + [dbo].[NotificationStatus] NS + INNER JOIN + [dbo].[Notification] N ON N.[Id] = NS.[NotificationId] + WHERE + N.[OrganizationId] = @Id + + -- Delete Notification + DELETE + FROM + [dbo].[Notification] + WHERE + [OrganizationId] = @Id + + -- Delete Organization Application + DELETE + FROM + [dbo].[OrganizationApplication] + WHERE + [Id] = @Id + + -- Delete Organization Report + DELETE + FROM + [dbo].[OrganizationReport] + WHERE + [Id] = @Id + + DELETE + FROM + [dbo].[Organization] + WHERE + [Id] = @Id + COMMIT TRANSACTION Organization_DeleteById + END + GO diff --git a/util/SqliteMigrations/HelperScripts/2025-06-10-00_OrganizationReport.sql b/util/SqliteMigrations/HelperScripts/2025-06-10-00_OrganizationReport.sql new file mode 100644 index 0000000000..1152876624 --- /dev/null +++ b/util/SqliteMigrations/HelperScripts/2025-06-10-00_OrganizationReport.sql @@ -0,0 +1,105 @@ +IF OBJECT_ID('dbo.OrganizationReport') IS NULL +BEGIN + CREATE TABLE [dbo].[OrganizationReport] + ( + [Id] UNIQUEIDENTIFIER NOT NULL, + [OrganizationId] UNIQUEIDENTIFIER NOT NULL, + [Date] DATETIME2 (7) NOT NULL, + [ReportData] NVARCHAR(MAX) NOT NULL, + [CreationDate] DATETIME2 (7) NOT NULL, + [RevisionDate] DATETIME2 (7) NOT NULL, + CONSTRAINT [PK_OrganizationReport] PRIMARY KEY CLUSTERED ([Id] ASC), + CONSTRAINT [FK_OrganizationReport_Organization] FOREIGN KEY ([OrganizationId]) REFERENCES [dbo].[Organization] ([Id]) + ); + + CREATE NONCLUSTERED INDEX [IX_OrganizationReport_OrganizationId] + ON [dbo].[OrganizationReport]([OrganizationId] ASC); +END +GO + +CREATE OR ALTER VIEW[dbo].[OrganizationReportView] AS + SELECT * FROM [dbo].[OrganizationReport]; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationReport_Create] + @Id UNIQUEIDENTIFIER, + @OrganizationId UNIQUEIDENTIFIER, + @Date DATETIME2(7), + @ReportData NVARCHAR(MAX), + @CreationDate DATETIME2(7), + @RevisionDate DATETIME2(7) +AS + SET NOCOUNT ON; + INSERT INTO [dbo].[OrganizationReport]( [Id],[OrganizationId],[Date],[ReportData],[CreationDate],[RevisionDate] ) + VALUES ( @Id,@OrganizationId,@Date,@ReportData,@CreationDate,@RevisionDate); +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationReport_ReadByOrganizationId] + @OrganizationId UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @OrganizationId IS NULL + THROW 50000, 'OrganizationId cannot be null', 1; + + SELECT + [Id], + [OrganizationId], + [Date], + [ReportData], + [CreationDate], + [RevisionDate] + FROM [dbo].[OrganizationReport] + WHERE [OrganizationId] = @OrganizationId; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationReport_ReadById] + @Id UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @Id IS NULL + THROW 50000, 'Id cannot be null', 1; + + SELECT + [Id], + [OrganizationId], + [Date], + [ReportData], + [CreationDate], + [RevisionDate] + FROM [dbo].[OrganizationReport] + WHERE [Id] = @Id; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationReport_Update] + @Id UNIQUEIDENTIFIER OUTPUT, + @OrganizationId UNIQUEIDENTIFIER, + @Date DATETIME2(7), + @ReportData NVARCHAR(MAX), + @RevisionDate DATETIME2(7) +AS + SET NOCOUNT ON; + UPDATE [dbo].[OrganizationReport] + SET [OrganizationId] = @OrganizationId, + [Date] = @Date, + [ReportData] = @ReportData, + [RevisionDate] = @RevisionDate + WHERE [Id] = @Id; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationReport_DeleteById] + @Id UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @Id IS NULL + THROW 50000, 'Id cannot be null', 1; + + DELETE FROM [dbo].[OrganizationReport] + WHERE [Id] = @Id; +GO + + + + diff --git a/util/SqliteMigrations/HelperScripts/2025-06-10-01_OrganizationApplication.sql b/util/SqliteMigrations/HelperScripts/2025-06-10-01_OrganizationApplication.sql new file mode 100644 index 0000000000..acf222912a --- /dev/null +++ b/util/SqliteMigrations/HelperScripts/2025-06-10-01_OrganizationApplication.sql @@ -0,0 +1,120 @@ +IF OBJECT_ID('dbo.OrganizationApplication') IS NULL +BEGIN + CREATE TABLE [dbo].[OrganizationApplication] ( + [Id] UNIQUEIDENTIFIER NOT NULL, + [OrganizationId] UNIQUEIDENTIFIER NOT NULL, + [Applications] NVARCHAR(MAX) NOT NULL, + [CreationDate] DATETIME2 (7) NOT NULL, + [RevisionDate] DATETIME2 (7) NOT NULL, + CONSTRAINT [PK_OrganizationApplication] PRIMARY KEY CLUSTERED ([Id] ASC), + CONSTRAINT [FK_OrganizationApplication_Organization] FOREIGN KEY ([OrganizationId]) REFERENCES [dbo].[Organization] ([Id]) + ); + + CREATE NONCLUSTERED INDEX [IX_OrganizationApplication_OrganizationId] + ON [dbo].[OrganizationApplication]([OrganizationId] ASC); +END +GO + +CREATE OR ALTER VIEW [dbo].[OrganizationApplicationView] AS + SELECT * FROM [dbo].[OrganizationApplication]; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_Create] + @Id UNIQUEIDENTIFIER, + @OrganizationId UNIQUEIDENTIFIER, + @Applications NVARCHAR(MAX), + @CreationDate DATETIME2(7), + @RevisionDate DATETIME2(7) +AS + SET NOCOUNT ON; + + INSERT INTO [dbo].[OrganizationApplication] + ( + [Id], + [OrganizationId], + [Applications], + [CreationDate], + [RevisionDate] + ) + VALUES + ( + @Id, + @OrganizationId, + @Applications, + @CreationDate, + @RevisionDate + ); +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_ReadByOrganizationId] + @OrganizationId UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @OrganizationId IS NULL + THROW 50000, 'OrganizationId cannot be null', 1; + + SELECT + [Id], + [OrganizationId], + [Applications], + [CreationDate], + [RevisionDate] + FROM [dbo].[OrganizationApplication] + WHERE [OrganizationId] = @OrganizationId; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_ReadById] + @Id UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @Id IS NULL + THROW 50000, 'Id cannot be null', 1; + + SELECT + [Id], + [OrganizationId], + [Applications], + [CreationDate], + [RevisionDate] + FROM [dbo].[OrganizationApplication] + WHERE [Id] = @Id; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_Update] + @Id UNIQUEIDENTIFIER, + @OrganizationId UNIQUEIDENTIFIER, + @Applications NVARCHAR(MAX), + @RevisionDate DATETIME2(7) +AS + SET NOCOUNT ON; + UPDATE [dbo].[OrganizationApplication] + SET + [OrganizationId] = @OrganizationId, + [Applications] = @Applications, + [RevisionDate] = @RevisionDate + WHERE [Id] = @Id; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_DeleteById] + @Id UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @Id IS NULL + THROW 50000, 'Id cannot be null', 1; + + DELETE FROM [dbo].[OrganizationApplication] + WHERE [Id] = @Id; +GO + + + + + + + + + + diff --git a/util/SqliteMigrations/HelperScripts/2025-06-10_02_UpdateOrgDeleteByIdProc.sql b/util/SqliteMigrations/HelperScripts/2025-06-10_02_UpdateOrgDeleteByIdProc.sql new file mode 100644 index 0000000000..9f311a53af --- /dev/null +++ b/util/SqliteMigrations/HelperScripts/2025-06-10_02_UpdateOrgDeleteByIdProc.sql @@ -0,0 +1,161 @@ +CREATE OR ALTER PROCEDURE [dbo].[Organization_DeleteById] + @Id UNIQUEIDENTIFIER +WITH RECOMPILE +AS +BEGIN + SET NOCOUNT ON + + EXEC [dbo].[User_BumpAccountRevisionDateByOrganizationId] @Id + + DECLARE @BatchSize INT = 100 + WHILE @BatchSize > 0 + BEGIN + BEGIN TRANSACTION Organization_DeleteById_Ciphers + + DELETE TOP(@BatchSize) + FROM + [dbo].[Cipher] + WHERE + [UserId] IS NULL + AND [OrganizationId] = @Id + + SET @BatchSize = @@ROWCOUNT + + COMMIT TRANSACTION Organization_DeleteById_Ciphers + END + + BEGIN TRANSACTION Organization_DeleteById + + DELETE + FROM + [dbo].[AuthRequest] + WHERE + [OrganizationId] = @Id + + DELETE + FROM + [dbo].[SsoUser] + WHERE + [OrganizationId] = @Id + + DELETE + FROM + [dbo].[SsoConfig] + WHERE + [OrganizationId] = @Id + + DELETE CU + FROM + [dbo].[CollectionUser] CU + INNER JOIN + [dbo].[OrganizationUser] OU ON [CU].[OrganizationUserId] = [OU].[Id] + WHERE + [OU].[OrganizationId] = @Id + + DELETE AP + FROM + [dbo].[AccessPolicy] AP + INNER JOIN + [dbo].[OrganizationUser] OU ON [AP].[OrganizationUserId] = [OU].[Id] + WHERE + [OU].[OrganizationId] = @Id + + DELETE GU + FROM + [dbo].[GroupUser] GU + INNER JOIN + [dbo].[OrganizationUser] OU ON [GU].[OrganizationUserId] = [OU].[Id] + WHERE + [OU].[OrganizationId] = @Id + + DELETE + FROM + [dbo].[OrganizationUser] + WHERE + [OrganizationId] = @Id + + DELETE + FROM + [dbo].[ProviderOrganization] + WHERE + [OrganizationId] = @Id + + EXEC [dbo].[OrganizationApiKey_OrganizationDeleted] @Id + EXEC [dbo].[OrganizationConnection_OrganizationDeleted] @Id + EXEC [dbo].[OrganizationSponsorship_OrganizationDeleted] @Id + EXEC [dbo].[OrganizationDomain_OrganizationDeleted] @Id + EXEC [dbo].[OrganizationIntegration_OrganizationDeleted] @Id + + DELETE + FROM + [dbo].[Project] + WHERE + [OrganizationId] = @Id + + DELETE + FROM + [dbo].[Secret] + WHERE + [OrganizationId] = @Id + + DELETE AK + FROM + [dbo].[ApiKey] AK + INNER JOIN + [dbo].[ServiceAccount] SA ON [AK].[ServiceAccountId] = [SA].[Id] + WHERE + [SA].[OrganizationId] = @Id + + DELETE AP + FROM + [dbo].[AccessPolicy] AP + INNER JOIN + [dbo].[ServiceAccount] SA ON [AP].[GrantedServiceAccountId] = [SA].[Id] + WHERE + [SA].[OrganizationId] = @Id + + DELETE + FROM + [dbo].[ServiceAccount] + WHERE + [OrganizationId] = @Id + + -- Delete Notification Status + DELETE + NS + FROM + [dbo].[NotificationStatus] NS + INNER JOIN + [dbo].[Notification] N ON N.[Id] = NS.[NotificationId] + WHERE + N.[OrganizationId] = @Id + + -- Delete Notification + DELETE + FROM + [dbo].[Notification] + WHERE + [OrganizationId] = @Id + + -- Delete Organization Application + DELETE + FROM + [dbo].[OrganizationApplication] + WHERE + [Id] = @Id + + -- Delete Organization Report + DELETE + FROM + [dbo].[OrganizationReport] + WHERE + [Id] = @Id + + DELETE + FROM + [dbo].[Organization] + WHERE + [Id] = @Id + COMMIT TRANSACTION Organization_DeleteById + END + GO