diff --git a/Complete migrations (up to v13)/PostgreSql/Audit.sql b/Complete migrations (up to v12)/PostgreSql/Audit.sql similarity index 99% rename from Complete migrations (up to v13)/PostgreSql/Audit.sql rename to Complete migrations (up to v12)/PostgreSql/Audit.sql index e75d8d5..c3cdc46 100644 --- a/Complete migrations (up to v13)/PostgreSql/Audit.sql +++ b/Complete migrations (up to v12)/PostgreSql/Audit.sql @@ -28,7 +28,7 @@ CREATE TABLE "AuditEntries" ( CREATE INDEX "IX_AuditEntries_When" ON "AuditEntries" ("When"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20181220155915_InitalPostgreSqlAuditDbMigration', '10.0.8'); +VALUES ('20181220155915_InitalPostgreSqlAuditDbMigration', '10.0.11'); COMMIT; diff --git a/Complete migrations (up to v13)/PostgreSql/Configuration.sql b/Complete migrations (up to v12)/PostgreSql/Configuration.sql similarity index 98% rename from Complete migrations (up to v13)/PostgreSql/Configuration.sql rename to Complete migrations (up to v12)/PostgreSql/Configuration.sql index e881932..753c3b7 100644 --- a/Complete migrations (up to v13)/PostgreSql/Configuration.sql +++ b/Complete migrations (up to v12)/PostgreSql/Configuration.sql @@ -227,13 +227,13 @@ CREATE INDEX "IX_IdentityClaims_IdentityResourceId" ON "IdentityClaims" ("Identi CREATE UNIQUE INDEX "IX_IdentityResources_Name" ON "IdentityResources" ("Name"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20171026082702_InitialPostgreSqlConfigurationDbMigration', '10.0.8'); +VALUES ('20171026082702_InitialPostgreSqlConfigurationDbMigration', '10.0.11'); COMMIT; START TRANSACTION; INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20171122163837_UserSearchOptimizationConfigurationDbMigration', '10.0.8'); +VALUES ('20171122163837_UserSearchOptimizationConfigurationDbMigration', '10.0.11'); COMMIT; @@ -302,13 +302,13 @@ CREATE INDEX "IX_ApiProperties_ApiResourceId" ON "ApiProperties" ("ApiResourceId CREATE INDEX "IX_IdentityProperties_IdentityResourceId" ON "IdentityProperties" ("IdentityResourceId"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20181112154834_IdentityServer2.3PostgreSqlConfigurationDbMigration', '10.0.8'); +VALUES ('20181112154834_IdentityServer2.3PostgreSqlConfigurationDbMigration', '10.0.11'); COMMIT; START TRANSACTION; INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20200702113308_UpdateIdColumnsPostgreSqlConfigurationDbMigration', '10.0.8'); +VALUES ('20200702113308_UpdateIdColumnsPostgreSqlConfigurationDbMigration', '10.0.11'); COMMIT; @@ -560,7 +560,7 @@ DROP TABLE "IdentityClaims"; DROP TABLE "IdentityProperties"; INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20200702113402_V3toV4PostgreSqlConfigurationDbMigration', '10.0.8'); +VALUES ('20200702113402_V3toV4PostgreSqlConfigurationDbMigration', '10.0.11'); COMMIT; @@ -568,7 +568,7 @@ START TRANSACTION; ALTER TABLE "ApiResources" ADD "RequireResourceIndicator" boolean NOT NULL DEFAULT FALSE; INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20210106163812_DuendePostgreSqlConfigurationMigration', '10.0.8'); +VALUES ('20210106163812_DuendePostgreSqlConfigurationMigration', '10.0.11'); COMMIT; @@ -584,7 +584,7 @@ CREATE TABLE "IdentityProviders" ( ); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20210602105114_IdentityProvidersPostgreSqlConfigurationMigration', '10.0.8'); +VALUES ('20210602105114_IdentityProvidersPostgreSqlConfigurationMigration', '10.0.11'); COMMIT; @@ -700,7 +700,7 @@ CREATE UNIQUE INDEX "IX_ApiResourceProperties_ApiResourceId_Key" ON "ApiResource CREATE UNIQUE INDEX "IX_ApiResourceClaims_ApiResourceId_Type" ON "ApiResourceClaims" ("ApiResourceId", "Type"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20220104130806_DuendeV6PostgreSqlConfigurationMigration', '10.0.8'); +VALUES ('20220104130806_DuendeV6PostgreSqlConfigurationMigration', '10.0.11'); COMMIT; @@ -708,7 +708,7 @@ START TRANSACTION; ALTER TABLE "Clients" ADD "CoordinateLifetimeWithUserSession" boolean; INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20220608093254_Duende61ConfigurationUpdate', '10.0.8'); +VALUES ('20220608093254_Duende61ConfigurationUpdate', '10.0.11'); COMMIT; @@ -722,7 +722,7 @@ ALTER TABLE "Clients" ADD "InitiateLoginUri" character varying(2000); ALTER TABLE "Clients" ADD "RequireDPoP" boolean NOT NULL DEFAULT FALSE; INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20230620154509_Duende63ConfigurationUpdate', '10.0.8'); +VALUES ('20230620154509_Duende63ConfigurationUpdate', '10.0.11'); COMMIT; @@ -732,7 +732,7 @@ ALTER TABLE "Clients" ADD "PushedAuthorizationLifetime" integer; ALTER TABLE "Clients" ADD "RequirePushedAuthorization" boolean NOT NULL DEFAULT FALSE; INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20240105112808_DuendeV7PostgreSqlConfigurationMigration', '10.0.8'); +VALUES ('20240105112808_DuendeV7PostgreSqlConfigurationMigration', '10.0.11'); COMMIT; diff --git a/Complete migrations (up to v13)/PostgreSql/ExtendedConfiguration.sql b/Complete migrations (up to v12)/PostgreSql/ExtendedConfiguration.sql similarity index 88% rename from Complete migrations (up to v13)/PostgreSql/ExtendedConfiguration.sql rename to Complete migrations (up to v12)/PostgreSql/ExtendedConfiguration.sql index dc95862..d97a739 100644 --- a/Complete migrations (up to v13)/PostgreSql/ExtendedConfiguration.sql +++ b/Complete migrations (up to v12)/PostgreSql/ExtendedConfiguration.sql @@ -1,4 +1,6 @@ -CREATE TABLE IF NOT EXISTS "__EFMigrationsHistory" ( +-- This set of migrations are dependent on Configuration tables from IdentityServer already existing run ./Configuration.sql script first + +CREATE TABLE IF NOT EXISTS "__EFMigrationsHistory" ( "MigrationId" character varying(150) NOT NULL, "ProductVersion" character varying(32) NOT NULL, CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY ("MigrationId") @@ -46,13 +48,13 @@ CREATE UNIQUE INDEX "IdentityNameIndex" ON "ExtendedIdentityResources" ("Identit CREATE UNIQUE INDEX "IdentityResourceNameIndex" ON "ExtendedIdentityResources" ("NormalizedName"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20171026082855_InitialPostgreSqlExtendedConfigurationDbMigration', '10.0.8'); +VALUES ('20171026082855_InitialPostgreSqlExtendedConfigurationDbMigration', '10.0.11'); COMMIT; START TRANSACTION; INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20171122163921_UserSearchOptimizationExtendedConfigurationDbMigration', '10.0.8'); +VALUES ('20171122163921_UserSearchOptimizationExtendedConfigurationDbMigration', '10.0.11'); COMMIT; @@ -64,7 +66,7 @@ CREATE TABLE "ConfigurationEntries" ( ); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20180724143733_ConfigurationEntries', '10.0.8'); +VALUES ('20180724143733_ConfigurationEntries', '10.0.11'); COMMIT; @@ -85,7 +87,7 @@ UPDATE "IdentityResources" WHERE "IdentityResources"."Name" = "ExtendedIdentityResources"."IdentityResourceName"; INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20181205165028_ExtendedDataMigration2.3', '10.0.8'); +VALUES ('20181205165028_ExtendedDataMigration2.3', '10.0.11'); COMMIT; @@ -93,7 +95,7 @@ START TRANSACTION; ALTER TABLE "ExtendedClients" ADD "ClientType" integer; INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20190401105052_ClientType', '10.0.8'); +VALUES ('20190401105052_ClientType', '10.0.11'); COMMIT; diff --git a/Complete migrations (up to v13)/PostgreSql/Identity.sql b/Complete migrations (up to v12)/PostgreSql/Identity.sql similarity index 97% rename from Complete migrations (up to v13)/PostgreSql/Identity.sql rename to Complete migrations (up to v12)/PostgreSql/Identity.sql index 48365ad..c6ccd60 100644 --- a/Complete migrations (up to v13)/PostgreSql/Identity.sql +++ b/Complete migrations (up to v12)/PostgreSql/Identity.sql @@ -118,7 +118,7 @@ CREATE INDEX "EmailIndex" ON "AspNetUsers" ("NormalizedEmail"); CREATE UNIQUE INDEX "UserNameIndex" ON "AspNetUsers" ("NormalizedUserName"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20171026081544_InitialPostgreSqlIdentityDbMigration', '10.0.8'); +VALUES ('20171026081544_InitialPostgreSqlIdentityDbMigration', '10.0.11'); COMMIT; @@ -136,7 +136,7 @@ CREATE INDEX "CountIndex" ON "AspNetUsers" ("IsBlocked", "IsDeleted"); CREATE INDEX "CountIndexReversed" ON "AspNetUsers" ("IsDeleted", "IsBlocked"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20171122162832_UserSearchOptimizationMigration', '10.0.8'); +VALUES ('20171122162832_UserSearchOptimizationMigration', '10.0.11'); COMMIT; @@ -149,7 +149,7 @@ CREATE TABLE "EnumClaimTypeAllowedValues" ( ); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20210430142540_EnumeratedClaimTypeMigration', '10.0.8'); +VALUES ('20210430142540_EnumeratedClaimTypeMigration', '10.0.11'); COMMIT; @@ -157,7 +157,7 @@ START TRANSACTION; ALTER TABLE "AspNetClaimTypes" ADD "DisplayName" text; INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20220112114931_ClaimTypeDisplayNameMigration', '10.0.8'); +VALUES ('20220112114931_ClaimTypeDisplayNameMigration', '10.0.11'); COMMIT; diff --git a/Complete migrations (up to v13)/PostgreSql/Operational.sql b/Complete migrations (up to v12)/PostgreSql/Operational.sql similarity index 97% rename from Complete migrations (up to v13)/PostgreSql/Operational.sql rename to Complete migrations (up to v12)/PostgreSql/Operational.sql index 342b846..99fc875 100644 --- a/Complete migrations (up to v13)/PostgreSql/Operational.sql +++ b/Complete migrations (up to v12)/PostgreSql/Operational.sql @@ -19,13 +19,13 @@ CREATE TABLE "PersistedGrants" ( CREATE INDEX "IX_PersistedGrants_SubjectId_ClientId_Type" ON "PersistedGrants" ("SubjectId", "ClientId", "Type"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20171026082436_InitialPostgreSqlOperationalDbMigration', '10.0.8'); +VALUES ('20171026082436_InitialPostgreSqlOperationalDbMigration', '10.0.11'); COMMIT; START TRANSACTION; INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20171122163955_UserSearchOptimizationOperationalDbMigration', '10.0.8'); +VALUES ('20171122163955_UserSearchOptimizationOperationalDbMigration', '10.0.11'); COMMIT; @@ -46,7 +46,7 @@ CREATE UNIQUE INDEX "IX_DeviceCodes_DeviceCode" ON "DeviceCodes" ("DeviceCode"); CREATE UNIQUE INDEX "IX_DeviceCodes_UserCode" ON "DeviceCodes" ("UserCode"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20181112154906_IdentityServer2.3PostgreSqlOperationalDbMigration', '10.0.8'); +VALUES ('20181112154906_IdentityServer2.3PostgreSqlOperationalDbMigration', '10.0.11'); COMMIT; @@ -77,7 +77,7 @@ ALTER TABLE "PersistedGrants" CREATE INDEX "IX_PersistedGrants_SubjectId_SessionId_Type" ON "PersistedGrants" ("SubjectId", "SessionId", "Type"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20200702113344_V3toV4PostgreSqlOperationalDbMigration', '10.0.8'); +VALUES ('20200702113344_V3toV4PostgreSqlOperationalDbMigration', '10.0.11'); COMMIT; @@ -97,7 +97,7 @@ CREATE TABLE "Keys" ( CREATE INDEX "IX_Keys_Use" ON "Keys" ("Use"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20210106150433_DuendePostgreSqlOperationalMigration', '10.0.8'); +VALUES ('20210106150433_DuendePostgreSqlOperationalMigration', '10.0.11'); COMMIT; @@ -105,7 +105,7 @@ START TRANSACTION; CREATE INDEX "IX_PersistedGrants_ConsumedTime" ON "PersistedGrants" ("ConsumedTime"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20210602110147_PersistedGrantConsumeTimePostgreSqlOperationalMigration', '10.0.8'); +VALUES ('20210602110147_PersistedGrantConsumeTimePostgreSqlOperationalMigration', '10.0.11'); COMMIT; @@ -157,7 +157,7 @@ CREATE INDEX "IX_ServerSideSessions_SessionId" ON "ServerSideSessions" ("Session CREATE INDEX "IX_ServerSideSessions_SubjectId" ON "ServerSideSessions" ("SubjectId"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20220608092054_Duende61Update', '10.0.8'); +VALUES ('20220608092054_Duende61Update', '10.0.11'); COMMIT; @@ -173,7 +173,7 @@ CREATE TABLE "PushedAuthorizationRequests" ( ); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20240108113635_DuendeV7PostgreSqlOperationalMigration', '10.0.8'); +VALUES ('20240108113635_DuendeV7PostgreSqlOperationalMigration', '10.0.11'); COMMIT; @@ -192,7 +192,7 @@ CREATE INDEX "IX_PushedAuthorizationRequests_ExpiresAtUtc" ON "PushedAuthorizati CREATE UNIQUE INDEX "IX_PushedAuthorizationRequests_ReferenceValueHash" ON "PushedAuthorizationRequests" ("ReferenceValueHash"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20250121150607_DuendeV7.1PostgreSqlOperationalMigration', '10.0.8'); +VALUES ('20250121150607_DuendeV7.1PostgreSqlOperationalMigration', '10.0.11'); COMMIT; diff --git a/Complete migrations (up to v13)/PostgreSql/SamlArtifact.sql b/Complete migrations (up to v12)/PostgreSql/SamlArtifact.sql similarity index 98% rename from Complete migrations (up to v13)/PostgreSql/SamlArtifact.sql rename to Complete migrations (up to v12)/PostgreSql/SamlArtifact.sql index 2d9f8a3..f083ea1 100644 --- a/Complete migrations (up to v13)/PostgreSql/SamlArtifact.sql +++ b/Complete migrations (up to v12)/PostgreSql/SamlArtifact.sql @@ -18,7 +18,7 @@ CREATE TABLE "SamlArtifacts" ( CREATE INDEX "IX_SamlArtifacts_Expiration" ON "SamlArtifacts" ("Expiration"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20220114164545_PostgreSqlSamlArtifactInitialMigration', '10.0.8'); +VALUES ('20220114164545_PostgreSqlSamlArtifactInitialMigration', '10.0.11'); COMMIT; diff --git a/Complete migrations (up to v13)/PostgreSql/SamlConfiguration.sql b/Complete migrations (up to v12)/PostgreSql/SamlConfiguration.sql similarity index 95% rename from Complete migrations (up to v13)/PostgreSql/SamlConfiguration.sql rename to Complete migrations (up to v12)/PostgreSql/SamlConfiguration.sql index 9b5f8b2..5190169 100644 --- a/Complete migrations (up to v13)/PostgreSql/SamlConfiguration.sql +++ b/Complete migrations (up to v12)/PostgreSql/SamlConfiguration.sql @@ -65,7 +65,7 @@ CREATE INDEX "IX_ServiceProviderSignCertificates_ServiceProviderId" ON "ServiceP CREATE INDEX "IX_ServiceProviderSingleLogoutServices_ServiceProviderId" ON "ServiceProviderSingleLogoutServices" ("ServiceProviderId"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20190305133319_PostgreSqlSaml2PInitial', '10.0.8'); +VALUES ('20190305133319_PostgreSqlSaml2PInitial', '10.0.11'); COMMIT; @@ -73,7 +73,7 @@ START TRANSACTION; ALTER TABLE "ServiceProviders" ADD "AllowIdpInitiatedSso" boolean NOT NULL DEFAULT FALSE; INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20200225104719_Added AllowIdpInitiatedSso', '10.0.8'); +VALUES ('20200225104719_Added AllowIdpInitiatedSso', '10.0.11'); COMMIT; @@ -83,7 +83,7 @@ ALTER TABLE "ServiceProviders" ADD "RequireAuthenticationRequestsSigned" boolean ALTER TABLE "ServiceProviders" RENAME COLUMN "RequireSamlRequestDestination" TO "RequireSamlMessageDestination"; INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20200914074950_RskSamlV3', '10.0.8'); +VALUES ('20200914074950_RskSamlV3', '10.0.11'); COMMIT; @@ -110,7 +110,7 @@ CREATE TABLE "ServiceProviderArtifactResolutionServices" ( CREATE INDEX "IX_ServiceProviderArtifactResolutionServices_ServiceProviderId" ON "ServiceProviderArtifactResolutionServices" ("ServiceProviderId"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20220128115407_RskSamlPackageUpdate', '10.0.8'); +VALUES ('20220128115407_RskSamlPackageUpdate', '10.0.11'); COMMIT; diff --git a/Complete migrations (up to v13)/PostgreSql/WsFederationConfiguration.sql b/Complete migrations (up to v12)/PostgreSql/WsFederationConfiguration.sql similarity index 94% rename from Complete migrations (up to v13)/PostgreSql/WsFederationConfiguration.sql rename to Complete migrations (up to v12)/PostgreSql/WsFederationConfiguration.sql index f4bfb3a..6fdde25 100644 --- a/Complete migrations (up to v13)/PostgreSql/WsFederationConfiguration.sql +++ b/Complete migrations (up to v12)/PostgreSql/WsFederationConfiguration.sql @@ -29,7 +29,7 @@ CREATE UNIQUE INDEX "IX_RelyingParties_Realm" ON "RelyingParties" ("Realm"); CREATE INDEX "IX_RelyingPartyClaimMappings_RelyingPartyId" ON "RelyingPartyClaimMappings" ("RelyingPartyId"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20190305133422_PostgreSqlWsfederationInitial', '10.0.8'); +VALUES ('20190305133422_PostgreSqlWsfederationInitial', '10.0.11'); COMMIT; diff --git a/Complete migrations (up to v13)/SqlServer/Audit.sql b/Complete migrations (up to v12)/SqlServer/Audit.sql similarity index 99% rename from Complete migrations (up to v13)/SqlServer/Audit.sql rename to Complete migrations (up to v12)/SqlServer/Audit.sql index 13be29c..2722f12 100644 --- a/Complete migrations (up to v13)/SqlServer/Audit.sql +++ b/Complete migrations (up to v12)/SqlServer/Audit.sql @@ -32,7 +32,7 @@ CREATE TABLE [AuditEntries] ( CREATE INDEX [IX_AuditEntries_When] ON [AuditEntries] ([When]); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20181220155759_InitalSqlServerAuditDbMigration', N'10.0.8'); +VALUES (N'20181220155759_InitalSqlServerAuditDbMigration', N'10.0.11'); COMMIT; GO diff --git a/Complete migrations (up to v13)/SqlServer/Configuration.sql b/Complete migrations (up to v12)/SqlServer/Configuration.sql similarity index 98% rename from Complete migrations (up to v13)/SqlServer/Configuration.sql rename to Complete migrations (up to v12)/SqlServer/Configuration.sql index 7cb6b6e..e335ca6 100644 --- a/Complete migrations (up to v13)/SqlServer/Configuration.sql +++ b/Complete migrations (up to v12)/SqlServer/Configuration.sql @@ -231,14 +231,14 @@ CREATE INDEX [IX_IdentityClaims_IdentityResourceId] ON [IdentityClaims] ([Identi CREATE UNIQUE INDEX [IX_IdentityResources_Name] ON [IdentityResources] ([Name]); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20171026080114_InitialSqlServerConfigurationDbMigration', N'10.0.8'); +VALUES (N'20171026080114_InitialSqlServerConfigurationDbMigration', N'10.0.11'); COMMIT; GO BEGIN TRANSACTION; INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20171122163636_UserSearchOptimizationConfigurationDbMigration', N'10.0.8'); +VALUES (N'20171122163636_UserSearchOptimizationConfigurationDbMigration', N'10.0.11'); COMMIT; GO @@ -331,7 +331,7 @@ CREATE INDEX [IX_ApiProperties_ApiResourceId] ON [ApiProperties] ([ApiResourceId CREATE INDEX [IX_IdentityProperties_IdentityResourceId] ON [IdentityProperties] ([IdentityResourceId]); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20181109163923_IdentityServer2.3SqlServerConfigurationDbMigration', N'10.0.8'); +VALUES (N'20181109163923_IdentityServer2.3SqlServerConfigurationDbMigration', N'10.0.11'); COMMIT; GO @@ -558,20 +558,18 @@ FROM ApiScopes -- ApiResources ALTER TABLE ApiResources - ADD AllowedAccessTokenSigningAlgorithms NVARCHAR (100) - NULL - + ADD AllowedAccessTokenSigningAlgorithms NVARCHAR (100) NULL; + ALTER TABLE ApiResources - ADD ShowInDiscoveryDocument BIT - NULL + ADD ShowInDiscoveryDocument BIT NULL; +GO - -UPDATE ApiResources SET ShowInDiscoveryDocument = 0 +UPDATE ApiResources SET ShowInDiscoveryDocument = 0; ALTER TABLE ApiResources - ALTER COLUMN ShowInDiscoveryDocument BIT NOT NULL - + ALTER COLUMN ShowInDiscoveryDocument BIT NOT NULL; +GO -- ApiScopeClaims @@ -603,7 +601,7 @@ DROP INDEX IX_ApiScopes_ApiResourceId ALTER TABLE ApiScopes ADD [Enabled] BIT NULL - +GO UPDATE ApiScopes SET [Enabled] = 1 @@ -613,7 +611,7 @@ ALTER TABLE ApiScopes ALTER TABLE ApiScopes ALTER COLUMN Enabled BIT NOT NULL; - +GO -- Clients @@ -623,13 +621,14 @@ ALTER TABLE Clients ALTER TABLE Clients ADD RequireRequestObject BIT NULL +GO UPDATE Clients SET RequireRequestObject = 0 ALTER TABLE Clients ALTER COLUMN RequireRequestObject BIT NOT NULL - +GO -- Delete Old Tables @@ -642,7 +641,7 @@ DROP TABLE IdentityProperties COMMIT TRANSACTION INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20200702075849_V3toV4SqlServerConfigurationDbMigration', N'10.0.8'); +VALUES (N'20200702075849_V3toV4SqlServerConfigurationDbMigration', N'10.0.11'); COMMIT; GO @@ -651,7 +650,7 @@ BEGIN TRANSACTION; ALTER TABLE [ApiResources] ADD [RequireResourceIndicator] bit NOT NULL DEFAULT CAST(0 AS bit); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20210106132452_DuendeSqlServerConfigurationMigration', N'10.0.8'); +VALUES (N'20210106132452_DuendeSqlServerConfigurationMigration', N'10.0.11'); COMMIT; GO @@ -668,7 +667,7 @@ CREATE TABLE [IdentityProviders] ( ); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20210602104947_IdentityProvidersSqlServerConfigurationMigration', N'10.0.8'); +VALUES (N'20210602104947_IdentityProvidersSqlServerConfigurationMigration', N'10.0.11'); COMMIT; GO @@ -773,7 +772,7 @@ CREATE UNIQUE INDEX [IX_ApiResourceProperties_ApiResourceId_Key] ON [ApiResource CREATE UNIQUE INDEX [IX_ApiResourceClaims_ApiResourceId_Type] ON [ApiResourceClaims] ([ApiResourceId], [Type]); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20220104130635_DuendeV6SqlServerConfigurationMigration', N'10.0.8'); +VALUES (N'20220104130635_DuendeV6SqlServerConfigurationMigration', N'10.0.11'); COMMIT; GO @@ -782,7 +781,7 @@ BEGIN TRANSACTION; ALTER TABLE [Clients] ADD [CoordinateLifetimeWithUserSession] bit NULL; INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20220608093217_Duende61ConfigurationUpdate', N'10.0.8'); +VALUES (N'20220608093217_Duende61ConfigurationUpdate', N'10.0.11'); COMMIT; GO @@ -797,7 +796,7 @@ ALTER TABLE [Clients] ADD [InitiateLoginUri] nvarchar(2000) NULL; ALTER TABLE [Clients] ADD [RequireDPoP] bit NOT NULL DEFAULT CAST(0 AS bit); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20230620153729_Duende63ConfigurationUpdate', N'10.0.8'); +VALUES (N'20230620153729_Duende63ConfigurationUpdate', N'10.0.11'); COMMIT; GO @@ -808,7 +807,7 @@ ALTER TABLE [Clients] ADD [PushedAuthorizationLifetime] int NULL; ALTER TABLE [Clients] ADD [RequirePushedAuthorization] bit NOT NULL DEFAULT CAST(0 AS bit); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20240104155203_DuendeV7SqlServerConfigurationMigration', N'10.0.8'); +VALUES (N'20240104155203_DuendeV7SqlServerConfigurationMigration', N'10.0.11'); COMMIT; GO diff --git a/Complete migrations (up to v13)/SqlServer/ExtendedConfiguration.sql b/Complete migrations (up to v12)/SqlServer/ExtendedConfiguration.sql similarity index 88% rename from Complete migrations (up to v13)/SqlServer/ExtendedConfiguration.sql rename to Complete migrations (up to v12)/SqlServer/ExtendedConfiguration.sql index 9876a7d..cc84382 100644 --- a/Complete migrations (up to v13)/SqlServer/ExtendedConfiguration.sql +++ b/Complete migrations (up to v12)/SqlServer/ExtendedConfiguration.sql @@ -1,4 +1,6 @@ -IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL +-- This set of migrations are dependent on Configuration tables from IdentityServer already existing run ./Configuration.sql script first + +IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL BEGIN CREATE TABLE [__EFMigrationsHistory] ( [MigrationId] nvarchar(150) NOT NULL, @@ -50,14 +52,14 @@ CREATE UNIQUE INDEX [IdentityNameIndex] ON [ExtendedIdentityResources] ([Identit CREATE UNIQUE INDEX [IdentityResourceNameIndex] ON [ExtendedIdentityResources] ([NormalizedName]); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20171026080835_InitialSqlServerExtendedConfigurationDbMigration', N'10.0.8'); +VALUES (N'20171026080835_InitialSqlServerExtendedConfigurationDbMigration', N'10.0.11'); COMMIT; GO BEGIN TRANSACTION; INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20171122163718_UserSearchOptimizationExtendedConfigurationDbMigration', N'10.0.8'); +VALUES (N'20171122163718_UserSearchOptimizationExtendedConfigurationDbMigration', N'10.0.11'); COMMIT; GO @@ -70,7 +72,7 @@ CREATE TABLE [ConfigurationEntries] ( ); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20180626100745_ConfigurationEntries', N'10.0.8'); +VALUES (N'20180626100745_ConfigurationEntries', N'10.0.11'); COMMIT; GO @@ -92,7 +94,7 @@ UPDATE IdentityResources WHERE IdentityResources.Name = e.IdentityResourceName INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20181205163055_ExtendedDataMigration2.3', N'10.0.8'); +VALUES (N'20181205163055_ExtendedDataMigration2.3', N'10.0.11'); COMMIT; GO @@ -101,7 +103,7 @@ BEGIN TRANSACTION; ALTER TABLE [ExtendedClients] ADD [ClientType] int NULL; INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20190401104724_ClientType', N'10.0.8'); +VALUES (N'20190401104724_ClientType', N'10.0.11'); COMMIT; GO diff --git a/Complete migrations (up to v12)/SqlServer/Identity.sql b/Complete migrations (up to v12)/SqlServer/Identity.sql new file mode 100644 index 0000000..6328159 --- /dev/null +++ b/Complete migrations (up to v12)/SqlServer/Identity.sql @@ -0,0 +1,5778 @@ +SET XACT_ABORT ON; +GO + +IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL +BEGIN + CREATE TABLE [__EFMigrationsHistory] ( + [MigrationId] nvarchar(150) NOT NULL, + [ProductVersion] nvarchar(32) NOT NULL, + CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId]) + ); +END; +GO + +BEGIN TRANSACTION; +CREATE TABLE [AspNetClaimTypes] ( + [Id] nvarchar(450) NOT NULL, + [ConcurrencyStamp] nvarchar(max) NULL, + [Description] nvarchar(max) NULL, + [Name] nvarchar(256) NOT NULL, + [NormalizedName] nvarchar(256) NULL, + [Required] bit NOT NULL, + [Reserved] bit NOT NULL, + [Rule] nvarchar(max) NULL, + [RuleValidationFailureDescription] nvarchar(max) NULL, + [UserEditable] bit NOT NULL DEFAULT CAST(0 AS bit), + [ValueType] int NOT NULL, + CONSTRAINT [PK_AspNetClaimTypes] PRIMARY KEY ([Id]), + CONSTRAINT [AK_AspNetClaimTypes_Name] UNIQUE ([Name]) +); + +CREATE TABLE [AspNetRoles] ( + [Id] nvarchar(450) NOT NULL, + [ConcurrencyStamp] nvarchar(max) NULL, + [Description] nvarchar(max) NULL, + [Name] nvarchar(256) NULL, + [NormalizedName] nvarchar(256) NULL, + [Reserved] bit NOT NULL, + CONSTRAINT [PK_AspNetRoles] PRIMARY KEY ([Id]) +); + +CREATE TABLE [AspNetUsers] ( + [Id] nvarchar(450) NOT NULL, + [AccessFailedCount] int NOT NULL, + [ConcurrencyStamp] nvarchar(max) NULL, + [Email] nvarchar(256) NULL, + [EmailConfirmed] bit NOT NULL, + [FirstName] nvarchar(max) NULL, + [IsBlocked] bit NOT NULL, + [IsDeleted] bit NOT NULL, + [LastName] nvarchar(max) NULL, + [LockoutEnabled] bit NOT NULL, + [LockoutEnd] datetimeoffset NULL, + [NormalizedEmail] nvarchar(256) NULL, + [NormalizedUserName] nvarchar(256) NULL, + [PasswordHash] nvarchar(max) NULL, + [PhoneNumber] nvarchar(max) NULL, + [PhoneNumberConfirmed] bit NOT NULL, + [SecurityStamp] nvarchar(max) NULL, + [TwoFactorEnabled] bit NOT NULL, + [UserName] nvarchar(256) NULL, + CONSTRAINT [PK_AspNetUsers] PRIMARY KEY NONCLUSTERED ([Id]) +); + +CREATE TABLE [AspNetRoleClaims] ( + [Id] int NOT NULL IDENTITY, + [ClaimType] nvarchar(max) NULL, + [ClaimValue] nvarchar(max) NULL, + [RoleId] nvarchar(450) NOT NULL, + CONSTRAINT [PK_AspNetRoleClaims] PRIMARY KEY ([Id]), + CONSTRAINT [FK_AspNetRoleClaims_AspNetRoles_RoleId] FOREIGN KEY ([RoleId]) REFERENCES [AspNetRoles] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [AspNetUserClaims] ( + [Id] int NOT NULL IDENTITY, + [ClaimType] nvarchar(256) NOT NULL, + [ClaimValue] nvarchar(max) NULL, + [UserId] nvarchar(450) NOT NULL, + CONSTRAINT [PK_AspNetUserClaims] PRIMARY KEY ([Id]), + CONSTRAINT [FK_AspNetUserClaims_AspNetClaimTypes_ClaimType] FOREIGN KEY ([ClaimType]) REFERENCES [AspNetClaimTypes] ([Name]) ON DELETE CASCADE, + CONSTRAINT [FK_AspNetUserClaims_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [AspNetUserLogins] ( + [LoginProvider] nvarchar(450) NOT NULL, + [ProviderKey] nvarchar(450) NOT NULL, + [ProviderDisplayName] nvarchar(max) NULL, + [UserId] nvarchar(450) NOT NULL, + CONSTRAINT [PK_AspNetUserLogins] PRIMARY KEY ([LoginProvider], [ProviderKey]), + CONSTRAINT [FK_AspNetUserLogins_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [AspNetUserRoles] ( + [UserId] nvarchar(450) NOT NULL, + [RoleId] nvarchar(450) NOT NULL, + CONSTRAINT [PK_AspNetUserRoles] PRIMARY KEY ([UserId], [RoleId]), + CONSTRAINT [FK_AspNetUserRoles_AspNetRoles_RoleId] FOREIGN KEY ([RoleId]) REFERENCES [AspNetRoles] ([Id]) ON DELETE CASCADE, + CONSTRAINT [FK_AspNetUserRoles_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [AspNetUserTokens] ( + [UserId] nvarchar(450) NOT NULL, + [LoginProvider] nvarchar(450) NOT NULL, + [Name] nvarchar(450) NOT NULL, + [Value] nvarchar(max) NULL, + CONSTRAINT [PK_AspNetUserTokens] PRIMARY KEY ([UserId], [LoginProvider], [Name]), + CONSTRAINT [FK_AspNetUserTokens_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE +); + +CREATE UNIQUE INDEX [ClaimTypeNameIndex] ON [AspNetClaimTypes] ([NormalizedName]) WHERE [NormalizedName] IS NOT NULL; + +CREATE INDEX [IX_AspNetRoleClaims_RoleId] ON [AspNetRoleClaims] ([RoleId]); + +CREATE UNIQUE INDEX [RoleNameIndex] ON [AspNetRoles] ([NormalizedName]) WHERE [NormalizedName] IS NOT NULL; + +CREATE INDEX [IX_AspNetUserClaims_ClaimType] ON [AspNetUserClaims] ([ClaimType]); + +CREATE INDEX [IX_AspNetUserClaims_UserId] ON [AspNetUserClaims] ([UserId]); + +CREATE INDEX [IX_AspNetUserLogins_UserId] ON [AspNetUserLogins] ([UserId]); + +CREATE INDEX [IX_AspNetUserRoles_RoleId] ON [AspNetUserRoles] ([RoleId]); + +CREATE INDEX [EmailIndex] ON [AspNetUsers] ([NormalizedEmail]); + +CREATE UNIQUE CLUSTERED INDEX [UserNameIndex] ON [AspNetUsers] ([NormalizedUserName]); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20171026080706_InitialSqlServerIdentityDbMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +ALTER TABLE [AspNetUsers] ADD [NormalizedFirstName] nvarchar(256) NULL; + +ALTER TABLE [AspNetUsers] ADD [NormalizedLastName] nvarchar(256) NULL; +GO + +CREATE INDEX [FirstNameIndex] ON [AspNetUsers] ([NormalizedFirstName]); + +CREATE INDEX [LastNameIndex] ON [AspNetUsers] ([NormalizedLastName]); + +CREATE INDEX [CountIndex] ON [AspNetUsers] ([IsBlocked], [IsDeleted]); + +CREATE INDEX [CountIndexReversed] ON [AspNetUsers] ([IsDeleted], [IsBlocked]); + +GO + +CREATE PROCEDURE [FindAllUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm) + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY +END + +GO + +CREATE PROCEDURE [FindActiveUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm) AND + ([IsBlocked] = 0 AND [IsDeleted] = 0) + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm)AND + ([IsBlocked] = 0 AND [IsDeleted] = 0) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY +END + +GO + +CREATE PROCEDURE [FindActiveOrBlockedWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm) AND + [IsDeleted] = 0 + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm)AND + [IsDeleted] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY +END + +GO + +CREATE PROCEDURE [FindActiveOrDeletedUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm) AND + [IsBlocked] = 0 + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm)AND + [IsBlocked] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY +END + +GO + +CREATE PROCEDURE [FindBlockedOrDeletedWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm) AND + ([IsDeleted] = 1 OR [IsBlocked] = 1) + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm)AND + ([IsDeleted] = 1 OR [IsBlocked] = 1) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY +END + +GO + +CREATE PROCEDURE [FindBlockedUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm) AND + [IsBlocked] = 1 + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm)AND + [IsBlocked] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY +END + +GO + +CREATE PROCEDURE [FindDeletedUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm) AND + [IsDeleted] = 1 + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm)AND + [IsDeleted] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY +END + +GO + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20171122162730_UserSearchOptimizationMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +DECLARE @SchemaName NVARCHAR(256); +SET @SchemaName = SCHEMA_NAME(); + +DECLARE @CreateViewSql NVARCHAR(MAX); +SET @CreateViewSql = 'CREATE VIEW [' + @SchemaName + '].[ActiveUsers] +WITH SCHEMABINDING +AS +SELECT Id, Email, FirstName, LastName, UserName, NormalizedFirstName, NormalizedLastName, NormalizedUserName, NormalizedEmail +FROM ' + @SchemaName + '.AspNetUsers +WHERE (IsBlocked = 0) AND (IsDeleted = 0)'; +EXEC sp_executesql @CreateViewSql; +GO + + +DECLARE @SchemaName NVARCHAR(256); +SET @SchemaName = SCHEMA_NAME(); +DECLARE @CreateIndexSql NVARCHAR(MAX); +SET @CreateIndexSql = 'CREATE UNIQUE CLUSTERED INDEX [ClusteredIndex-20190723-131653] ON [' + @SchemaName + '].[ActiveUsers] +( + [NormalizedFirstName] ASC, + [NormalizedLastName] ASC, + [NormalizedUserName] ASC, + [NormalizedEmail] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]'; +EXEC sp_executesql @CreateIndexSql; +GO + + +DECLARE @SchemaName NVARCHAR(256); +SET @SchemaName = SCHEMA_NAME(); + +EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane1', @value=N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00] +Begin DesignProperties = + Begin PaneConfigurations = + Begin PaneConfiguration = 0 + NumPanes = 4 + Configuration = "(H (1[40] 4[20] 2[20] 3) )" + End + Begin PaneConfiguration = 1 + NumPanes = 3 + Configuration = "(H (1 [50] 4 [25] 3))" + End + Begin PaneConfiguration = 2 + NumPanes = 3 + Configuration = "(H (1 [50] 2 [25] 3))" + End + Begin PaneConfiguration = 3 + NumPanes = 3 + Configuration = "(H (4 [30] 2 [40] 3))" + End + Begin PaneConfiguration = 4 + NumPanes = 2 + Configuration = "(H (1 [56] 3))" + End + Begin PaneConfiguration = 5 + NumPanes = 2 + Configuration = "(H (2 [66] 3))" + End + Begin PaneConfiguration = 6 + NumPanes = 2 + Configuration = "(H (4 [50] 3))" + End + Begin PaneConfiguration = 7 + NumPanes = 1 + Configuration = "(V (3))" + End + Begin PaneConfiguration = 8 + NumPanes = 3 + Configuration = "(H (1[56] 4[18] 2) )" + End + Begin PaneConfiguration = 9 + NumPanes = 2 + Configuration = "(H (1 [75] 4))" + End + Begin PaneConfiguration = 10 + NumPanes = 2 + Configuration = "(H (1[66] 2) )" + End + Begin PaneConfiguration = 11 + NumPanes = 2 + Configuration = "(H (4 [60] 2))" + End + Begin PaneConfiguration = 12 + NumPanes = 1 + Configuration = "(H (1) )" + End + Begin PaneConfiguration = 13 + NumPanes = 1 + Configuration = "(V (4))" + End + Begin PaneConfiguration = 14 + NumPanes = 1 + Configuration = "(V (2))" + End + ActivePaneConfig = 0 + End + Begin DiagramPane = + Begin Origin = + Top = 0 + Left = 0 + End + Begin Tables = + Begin Table = "AspNetUsers" + Begin Extent = + Top = 6 + Left = 38 + Bottom = 136 + Right = 262 + End + DisplayFlags = 280 + TopColumn = 0 + End + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + End + Begin CriteriaPane = + Begin ColumnWidths = 11 + Column = 1440 + Alias = 900 + Table = 1170 + Output = 720 + Append = 1400 + NewValue = 1170 + SortType = 1350 + SortOrder = 1410 + GroupBy = 1350 + Filter = 1350 + Or = 1350 + Or = 1350 + Or = 1350 + End + End +End +' , @level0type=N'SCHEMA',@level0name=@SchemaName, @level1type=N'VIEW',@level1name=N'ActiveUsers' +GO + + +DECLARE @SchemaName NVARCHAR(256); +SET @SchemaName = SCHEMA_NAME(); + +EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPaneCount', @value=1 , @level0type=N'SCHEMA',@level0name=@SchemaName, @level1type=N'VIEW',@level1name=N'ActiveUsers' + +GO + +CREATE PROCEDURE [FindActiveByRoleWithCount] + @RoleId nvarchar(450), + @SearchTerm nvarchar(256) = null, + @PageNumber int, + @PageSize int +AS +BEGIN +/* Searchs for all Active (IsBlocked = 0 && IsDeleted = 0) Users within a role */ +/* If @SearchTerm is given it will search for LIKE on Email, Username, firstname and lastname */ +/* If no @SearchTerm is given it will return all Active Users in that Role */ + SET NOCOUNT ON; + + IF @SearchTerm IS null + BEGIN + -- Select Count of all users within role + SELECT Count(*) + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + + --Select all users in role with SearchTerm + SELECT u.Id, + u.[Email], + u.[FirstName], + u.[LastName], + u.[UserName] + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + ORDER BY u.[UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE --IF @SearchTerm is not Null + BEGIN + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + --Select Count With Search + SELECT Count(*) + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + AND + ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm) + + --Select all users in role with Search + SELECT u.Id, + u.[Email], + u.[FirstName], + u.[LastName], + u.[UserName] + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + AND + ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm) + ORDER BY u.[UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE PROCEDURE FindActiveUsersInRoleAndAllActiveUsersWithCount + @RoleId nvarchar(450), + @SearchTerm nvarchar(256) = null, + @PageNumber int, + @PageSize int +AS +BEGIN +/* Searchs for all Active (IsBlocked = 0 && IsDeleted = 0) Users and if they are in the role */ +/* If @SearchTerm is given it will search for LIKE on Email, Username, firstname and lastname */ +/* If no @SearchTerm is given it will return all Active Users in that Role */ + SET NOCOUNT ON; + + + IF @SearchTerm IS null + BEGIN + -- Select Count of all users within role + SELECT Count(*) + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + + --Get All UserRole Entries with RoleID + + ;WITH UserRoles_CTE + AS + ( + SELECT ur.[RoleId], + ur.[UserId] + FROM [AspNetUserRoles] ur + WHERE ur.[RoleId] = @RoleId + ) + SELECT u.Id, + u.[Email], + u.[FirstName], + u.[LastName], + u.[UserName], + CASE WHEN ur.[RoleId] IS NULL THEN CONVERT(bit, 0) ELSE CONVERT(bit, 1) END AS IsInRole + FROM UserRoles_CTE ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + ORDER BY u.[UserName] + + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE -- IF @SearchTerm is not Null + BEGIN + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + --Select Count With Search + SELECT Count(*) + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE [NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm + + --Select users in result with Search + ;WITH UserRoles_CTE + AS + ( + SELECT ur.[RoleId], + ur.[UserId] + FROM [AspNetUserRoles] ur + WHERE ur.[RoleId] = @RoleId + + ) + SELECT u.Id, + u.[Email], + u.[FirstName], + u.[LastName], + u.[UserName], + CASE WHEN ur.[RoleId] IS NULL THEN CONVERT(bit, 0) ELSE CONVERT(bit, 1) END AS IsInRole + FROM UserRoles_CTE ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + AND + [NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm + ORDER BY u.[UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END +GO + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20190723135545_RoleSearchOptimizationMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; + +GO + +CREATE OR ALTER PROCEDURE [FindAllUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower); + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindActiveUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsBlocked] = 0 AND [IsDeleted] = 0; + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + ([IsBlocked] = 0 AND [IsDeleted] = 0) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + ([IsBlocked] = 0 AND [IsDeleted] = 0) + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + ([IsBlocked] = 0 AND [IsDeleted] = 0) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindActiveOrBlockedWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsDeleted] = 0; + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsDeleted] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName + AND [NormalizedLastName] LIKE @LastName) AND [IsDeleted] = 0 + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + [IsDeleted] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindActiveOrDeletedUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%'; + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsBlocked] = 0; + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsBlocked] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName + AND [NormalizedLastName] LIKE @LastName) + AND [IsBlocked] = 0 + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) + AND [IsBlocked] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindBlockedOrDeletedWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + ([IsDeleted] = 1 OR [IsBlocked] = 1); + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + ([IsDeleted] = 1 OR [IsBlocked] = 1) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName)AND + ([IsDeleted] = 1 OR [IsBlocked] = 1) + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + ([IsDeleted] = 1 OR [IsBlocked] = 1) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindBlockedUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsBlocked] = 1; + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsBlocked] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName)AND + [IsBlocked] = 1 + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + [IsBlocked] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindDeletedUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsDeleted] = 1; + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsDeleted] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName)AND + [IsDeleted] = 1 + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + [IsDeleted] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20200706104335_UserSearchOptimizationUpdateMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; + +GO + +CREATE OR ALTER PROCEDURE [FindActiveByRoleWithCount] + @RoleId nvarchar(450), + @SearchTerm nvarchar(256) = null, + @PageNumber int, + @PageSize int +AS +BEGIN +/* Searchs for all Active (IsBlocked = 0 && IsDeleted = 0) Users within a role */ +/* If @SearchTerm is given it will search for LIKE on Email, Username, firstname and lastname */ +/* If no @SearchTerm is given it will return all Active Users in that Role */ + SET NOCOUNT ON; + + IF @SearchTerm IS null + BEGIN + -- Select Count of all users within role + SELECT Count(*) + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + + --Select all users in role with SearchTerm + SELECT u.Id, + u.[Email], + u.[FirstName], + u.[LastName], + u.[UserName] + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + ORDER BY u.[UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE --IF @SearchTerm is not Null + BEGIN + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + --Select Count With Search + SELECT Count(*) + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + AND + ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower); + + --Select all users in role with Search + SELECT u.Id, + u.[Email], + u.[FirstName], + u.[LastName], + u.[UserName] + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + AND + ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) + ORDER BY u.[UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT Count(*) + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + AND + ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) + + --Select all users in role with Search + SELECT u.Id, + u.[Email], + u.[FirstName], + u.[LastName], + u.[UserName] + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + AND + ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) + ORDER BY u.[UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + + END +END + +GO + +CREATE OR ALTER PROCEDURE FindActiveUsersInRoleAndAllActiveUsersWithCount + @RoleId nvarchar(450), + @SearchTerm nvarchar(256) = null, + @PageNumber int, + @PageSize int +AS +BEGIN +/* Searchs for all Active (IsBlocked = 0 && IsDeleted = 0) Users and if they are in the role */ +/* If @SearchTerm is given it will search for LIKE on Email, Username, firstname and lastname */ +/* If no @SearchTerm is given it will return all Active Users in that Role */ + SET NOCOUNT ON; + + + IF @SearchTerm IS null + BEGIN + -- Select Count of all users within role + SELECT Count(*) + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + + --Get All UserRole Entries with RoleID + + ;WITH UserRoles_CTE + AS + ( + SELECT ur.[RoleId], + ur.[UserId] + FROM [AspNetUserRoles] ur + WHERE ur.[RoleId] = @RoleId + ) + SELECT u.Id, + u.[Email], + u.[FirstName], + u.[LastName], + u.[UserName], + CASE WHEN ur.[RoleId] IS NULL THEN CONVERT(bit, 0) ELSE CONVERT(bit, 1) END AS IsInRole + FROM UserRoles_CTE ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + ORDER BY u.[UserName] + + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE -- IF @SearchTerm is not Null + BEGIN + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + --Select Count With Search + SELECT Count(*) + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE [NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower + + --Select users in result with Search + ;WITH UserRoles_CTE + AS + ( + SELECT ur.[RoleId], + ur.[UserId] + FROM [AspNetUserRoles] ur + WHERE ur.[RoleId] = @RoleId + + ) + SELECT u.Id, + u.[Email], + u.[FirstName], + u.[LastName], + u.[UserName], + CASE WHEN ur.[RoleId] IS NULL THEN CONVERT(bit, 0) ELSE CONVERT(bit, 1) END AS IsInRole + FROM UserRoles_CTE ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + AND + [NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower + ORDER BY u.[UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT Count(*) + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) + + --Select users in result with Search + ;WITH UserRoles_CTE + AS + ( + SELECT ur.[RoleId], + ur.[UserId] + FROM [AspNetUserRoles] ur + WHERE ur.[RoleId] = @RoleId + + ) + SELECT u.Id, + u.[Email], + u.[FirstName], + u.[LastName], + u.[UserName], + CASE WHEN ur.[RoleId] IS NULL THEN CONVERT(bit, 0) ELSE CONVERT(bit, 1) END AS IsInRole + FROM UserRoles_CTE ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) + ORDER BY u.[UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + END +END + +GO + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20200706104406_RoleSearchOptimizationUpdateMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +CREATE TABLE [EnumClaimTypeAllowedValues] ( + [ClaimTypeId] nvarchar(450) NOT NULL, + [Value] nvarchar(450) NOT NULL, + CONSTRAINT [PK_EnumClaimTypeAllowedValues] PRIMARY KEY ([ClaimTypeId], [Value]), + CONSTRAINT [FK_EnumClaimTypeAllowedValues_AspNetClaimTypes_ClaimTypeId] FOREIGN KEY ([ClaimTypeId]) REFERENCES [AspNetClaimTypes] ([Id]) ON DELETE CASCADE +); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20210430141851_EnumeratedClaimTypeMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +GO + +CREATE OR ALTER PROCEDURE [FindAllUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower); + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindActiveUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsBlocked] = 0 AND [IsDeleted] = 0; + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + ([IsBlocked] = 0 AND [IsDeleted] = 0) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + ([IsBlocked] = 0 AND [IsDeleted] = 0) + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + ([IsBlocked] = 0 AND [IsDeleted] = 0) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindActiveOrBlockedWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsDeleted] = 0; + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsDeleted] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName + AND [NormalizedLastName] LIKE @LastName) AND [IsDeleted] = 0 + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + [IsDeleted] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindActiveOrDeletedUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%'; + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsBlocked] = 0; + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsBlocked] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName + AND [NormalizedLastName] LIKE @LastName) + AND [IsBlocked] = 0 + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) + AND [IsBlocked] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindBlockedOrDeletedWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + ([IsDeleted] = 1 OR [IsBlocked] = 1); + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + ([IsDeleted] = 1 OR [IsBlocked] = 1) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName)AND + ([IsDeleted] = 1 OR [IsBlocked] = 1) + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + ([IsDeleted] = 1 OR [IsBlocked] = 1) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindBlockedUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsBlocked] = 1; + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsBlocked] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName)AND + [IsBlocked] = 1 + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + [IsBlocked] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindDeletedUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsDeleted] = 1; + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower) AND + [IsDeleted] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName)AND + [IsDeleted] = 1 + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + [IsDeleted] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20211209115717_AddingIdToStoredProceduresMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +ALTER TABLE [AspNetClaimTypes] ADD [DisplayName] nvarchar(max) NULL; + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20220110161021_ClaimTypeDisplayNameMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; + +GO + +CREATE OR ALTER PROCEDURE [FindAllUsersWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + + IF(@NameSplitCount = 0) + BEGIN + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + + SELECT Count(*) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [AspNetUsers].[Id] LIKE @SearchTermLower OR + CTE_ClaimSearch.[UserId] IS NOT NULL); + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + + SELECT [AspNetUsers].[Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON + CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [AspNetUsers].[Id] LIKE @SearchTermLower OR + CTE_ClaimSearch.[UserId] IS NOT NULL) + + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindActiveUsersWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + + SELECT Count(*) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + CTE_ClaimSearch.[UserId] IS NOT NULL) AND + [IsBlocked] = 0 AND [IsDeleted] = 0; + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + CTE_ClaimSearch.[UserId] IS NOT NULL) AND + ([IsBlocked] = 0 AND [IsDeleted] = 0) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + ([IsBlocked] = 0 AND [IsDeleted] = 0) + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + ([IsBlocked] = 0 AND [IsDeleted] = 0) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindActiveOrBlockedWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT Count(*) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + CTE_ClaimSearch.[UserId] IS NOT NULL) AND + [IsDeleted] = 0; + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + CTE_ClaimSearch.[UserId] IS NOT NULL) AND + [IsDeleted] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName + AND [NormalizedLastName] LIKE @LastName) AND [IsDeleted] = 0 + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + [IsDeleted] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindActiveOrDeletedUsersWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%'; + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + + SELECT Count(*) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + CTE_ClaimSearch.[UserId] IS NOT NULL) AND + [IsBlocked] = 0; + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + CTE_ClaimSearch.[UserId] IS NOT NULL) AND + [IsBlocked] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName + AND [NormalizedLastName] LIKE @LastName) + AND [IsBlocked] = 0 + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) + AND [IsBlocked] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindBlockedOrDeletedWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT Count(*) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + CTE_ClaimSearch.[UserId] IS NOT NULL) AND + ([IsDeleted] = 1 OR [IsBlocked] = 1); + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + CTE_ClaimSearch.[UserId] IS NOT NULL) AND + ([IsDeleted] = 1 OR [IsBlocked] = 1) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName)AND + ([IsDeleted] = 1 OR [IsBlocked] = 1) + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + ([IsDeleted] = 1 OR [IsBlocked] = 1) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindBlockedUsersWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT Count(*) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + CTE_ClaimSearch.[UserId] IS NOT NULL) AND + [IsBlocked] = 1; + + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + CTE_ClaimSearch.[UserId] IS NOT NULL) AND + [IsBlocked] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName)AND + [IsBlocked] = 1 + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + [IsBlocked] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindDeletedUsersWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount = 0) + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + + SELECT Count(*) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + CTE_ClaimSearch.[UserId] IS NOT NULL) AND + [IsDeleted] = 1; + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + CTE_ClaimSearch.[UserId] IS NOT NULL) AND + [IsDeleted] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE + BEGIN + DECLARE @FirstName nvarchar(256); + DECLARE @FirstNameCount int; + DECLARE @LastName nvarchar(256); + + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + + SELECT COUNT(*) + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName)AND + [IsDeleted] = 1 + + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedFirstName] LIKE @FirstName AND + [NormalizedLastName] LIKE @LastName) AND + [IsDeleted] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20220225154308_ClaimValueSearchMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +GO + +CREATE OR ALTER PROCEDURE [FindActiveOrBlockedWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ) AND + [IsDeleted] = 0; + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ) AND + [IsDeleted] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindActiveOrBlockedWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT Count(*) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsDeleted] = 0; + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsDeleted] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindActiveOrDeletedUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%'; + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ) AND + [IsBlocked] = 0; + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ) AND + [IsBlocked] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindActiveOrDeletedUsersWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%'; + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + + SELECT Count(*) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsBlocked] = 0; + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsBlocked] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindActiveByRoleWithCount] + @RoleId nvarchar(450), + @SearchTerm nvarchar(256) = null, + @PageNumber int, + @PageSize int +AS +BEGIN +-- Search for all Active (IsBlocked = 0 && IsDeleted = 0) Users within a role +-- If @SearchTerm is given it will search for LIKE on Email, Username, firstname and lastname +-- If no @SearchTerm is given it will return all Active Users in that Role + SET NOCOUNT ON; + + IF @SearchTerm IS null + BEGIN + -- Select Count of all users within role + SELECT Count(*) + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + + --Select all users in role with SearchTerm + SELECT u.Id, + u.[Email], + u.[FirstName], + u.[LastName], + u.[UserName] + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + ORDER BY u.[UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE --IF @SearchTerm is not Null + BEGIN + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + --Select Count With Search + SELECT Count(*) + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + AND ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ); + --Select all users in role with Search + SELECT u.Id, + u.[Email], + u.[FirstName], + u.[LastName], + u.[UserName] + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) AND + ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ) + ORDER BY u.[UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + END +END + +GO + +CREATE OR ALTER PROCEDURE FindActiveUsersInRoleAndAllActiveUsersWithCount + @RoleId nvarchar(450), + @SearchTerm nvarchar(256) = null, + @PageNumber int, + @PageSize int +AS +BEGIN +-- Search for all Active (IsBlocked = 0 && IsDeleted = 0) Users and if they are in the role +-- If @SearchTerm is given it will search for LIKE on Email, Username, firstname and lastname +-- If no @SearchTerm is given it will return all Active Users in that Role + SET NOCOUNT ON; + + + IF @SearchTerm IS null + BEGIN + -- Select Count of all users within role + SELECT Count(*) + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + + --Get All UserRole Entries with RoleID + + ;WITH UserRoles_CTE + AS + ( + SELECT ur.[RoleId], + ur.[UserId] + FROM [AspNetUserRoles] ur + WHERE ur.[RoleId] = @RoleId + ) + SELECT u.Id, + u.[Email], + u.[FirstName], + u.[LastName], + u.[UserName], + CASE WHEN ur.[RoleId] IS NULL THEN CONVERT(bit, 0) ELSE CONVERT(bit, 1) END AS IsInRole + FROM UserRoles_CTE ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + ORDER BY u.[UserName] + + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + ELSE -- IF @SearchTerm is not Null + BEGIN + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + --Select Count With Search + SELECT Count(*) + FROM [AspNetUserRoles] ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE [NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + --Select users in result with Search + ;WITH UserRoles_CTE + AS ( + SELECT ur.[RoleId], + ur.[UserId] + FROM [AspNetUserRoles] ur + WHERE ur.[RoleId] = @RoleId + ) + SELECT u.Id, + u.[Email], + u.[FirstName], + u.[LastName], + u.[UserName], + CASE WHEN ur.[RoleId] IS NULL THEN CONVERT(bit, 0) ELSE CONVERT(bit, 1) END AS IsInRole + FROM UserRoles_CTE ur + RIGHT JOIN [ActiveUsers] u + ON u.Id = ur.UserId + WHERE (ur.[RoleId] = @RoleId) + AND + [NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ORDER BY u.[UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindActiveUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ) AND + [IsBlocked] = 0 AND [IsDeleted] = 0; + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ) AND + ([IsBlocked] = 0 AND [IsDeleted] = 0) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindActiveUsersWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT Count(*) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsBlocked] = 0 AND [IsDeleted] = 0; + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + ([IsBlocked] = 0 AND [IsDeleted] = 0) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindAllUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ); + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindAllUsersWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT Count(*) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [AspNetUsers].[Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ); + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + + SELECT [AspNetUsers].[Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON + CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [AspNetUsers].[Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindBlockedOrDeletedWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ) AND + ([IsDeleted] = 1 OR [IsBlocked] = 1); + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ) AND + ([IsDeleted] = 1 OR [IsBlocked] = 1) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindBlockedOrDeletedWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT Count(*) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + ([IsDeleted] = 1 OR [IsBlocked] = 1); + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + ([IsDeleted] = 1 OR [IsBlocked] = 1) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindBlockedUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ) AND + [IsBlocked] = 1; + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ) AND + [IsBlocked] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindBlockedUsersWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT Count(*) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsBlocked] = 1; + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsBlocked] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindDeletedUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + SELECT Count(*) + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ) AND + [IsDeleted] = 1; + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) + ) AND + [IsDeleted] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindDeletedUsersWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT Count(*) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsDeleted] = 1; + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsDeleted] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20230901102018_ClaimValueSearchBugFixes', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +GO + +CREATE OR ALTER PROCEDURE [FindActiveOrBlockedWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT Count(DISTINCT [AspNetUsers].[Id]) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsDeleted] = 0; + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT DISTINCT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsDeleted] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindActiveOrDeletedUsersWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%'; + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + + SELECT Count(DISTINCT [AspNetUsers].[Id]) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsBlocked] = 0; + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT DISTINCT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsBlocked] = 0 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindActiveUsersWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT Count(DISTINCT [AspNetUsers].[Id]) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsBlocked] = 0 AND [IsDeleted] = 0; + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT DISTINCT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + ([IsBlocked] = 0 AND [IsDeleted] = 0) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindAllUsersWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT Count(DISTINCT [AspNetUsers].[Id]) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [AspNetUsers].[Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ); + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT DISTINCT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + + SELECT [AspNetUsers].[Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON + CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [AspNetUsers].[Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindBlockedOrDeletedWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT Count(DISTINCT [AspNetUsers].[Id]) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + ([IsDeleted] = 1 OR [IsBlocked] = 1); + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT DISTINCT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + ([IsDeleted] = 1 OR [IsBlocked] = 1) + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindBlockedUsersWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT Count(DISTINCT [AspNetUsers].[Id]) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsBlocked] = 1; + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT DISTINCT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsBlocked] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +CREATE OR ALTER PROCEDURE [FindDeletedUsersWithCountWithClaimValueSearch] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @SearchTermLower nvarchar(256); + SET @SearchTermLower = LOWER(@SearchTerm) + N'%' + SET @SearchTerm = UPPER(@SearchTerm) + N'%' + + DECLARE @NameSplitCount int; + DECLARE @FirstName nvarchar(256); + DECLARE @LastName nvarchar(256); + + SET @NameSplitCount = (SELECT LEN(@SearchTerm) - LEN(REPLACE(@SearchTerm, ' ', ''))) + + IF(@NameSplitCount > 0) + BEGIN + SET @FirstName = left(@SearchTerm, charindex(' ', @SearchTerm) - 1) + N'%' + SET @LastName = substring(@SearchTerm, charindex(' ', @SearchTerm) + 1, len(@SearchTerm)) + END + + BEGIN + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT Count(DISTINCT [AspNetUsers].[Id]) + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsDeleted] = 1; + + WITH CTE_ClaimSearch(UserId, ClaimValue) AS ( + SELECT DISTINCT [AspNetUserClaims].[UserId], [AspNetUserClaims].[ClaimValue] + FROM [AspNetUserClaims] + WHERE [AspNetUserClaims].[ClaimValue] LIKE @SearchTermLower + ) + SELECT [Id], + [AccessFailedCount], + [ConcurrencyStamp], + [Email], + [EmailConfirmed], + [FirstName], + [IsBlocked], + [IsDeleted], + [LastName], + [LockoutEnabled], + [LockoutEnd], + [NormalizedEmail], + [NormalizedFirstName], + [NormalizedLastName], + [NormalizedUserName], + [PasswordHash], + [PhoneNumber], + [PhoneNumberConfirmed], + [SecurityStamp], + [TwoFactorEnabled], + [UserName] + FROM [AspNetUsers] + LEFT JOIN CTE_ClaimSearch ON CTE_ClaimSearch.[UserId] = [AspNetUsers].[Id] + WHERE ([NormalizedUserName] LIKE @SearchTerm OR + [NormalizedEmail] LIKE @SearchTerm OR + [NormalizedFirstName] LIKE @SearchTerm OR + [NormalizedLastName] LIKE @SearchTerm OR + [PhoneNumber] LIKE @SearchTerm OR + [Id] LIKE @SearchTermLower OR + (@NameSplitCount > 0 AND [NormalizedFirstName] LIKE @FirstName AND [NormalizedLastName] LIKE @LastName) OR + CTE_ClaimSearch.[UserId] IS NOT NULL + ) AND + [IsDeleted] = 1 + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY + END +END + +GO + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20250126152936_ClaimValueSearchRepeatedResultsBugFix', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +-- ActiveOrBlocked +DROP PROCEDURE [FindActiveOrBlockedWithCount]; +DROP PROCEDURE [FindActiveOrBlockedWithCountWithClaimValueSearch]; +-- ActiveOrDeleted +DROP PROCEDURE [FindActiveOrDeletedUsersWithCount]; +DROP PROCEDURE [FindActiveOrDeletedUsersWithCountWithClaimValueSearch]; +-- Active +DROP PROCEDURE [FindActiveUsersWithCount]; +DROP PROCEDURE [FindActiveUsersWithCountWithClaimValueSearch]; +-- All +DROP PROCEDURE [FindAllUsersWithCount]; +DROP PROCEDURE [FindAllUsersWithCountWithClaimValueSearch]; +-- BlockedOrDeleted +DROP PROCEDURE [FindBlockedOrDeletedWithCount]; +DROP PROCEDURE [FindBlockedOrDeletedWithCountWithClaimValueSearch]; +-- Blocked +DROP PROCEDURE [FindBlockedUsersWithCount]; +DROP PROCEDURE [FindBlockedUsersWithCountWithClaimValueSearch]; +-- Deleted +DROP PROCEDURE [FindDeletedUsersWithCount]; +DROP PROCEDURE [FindDeletedUsersWithCountWithClaimValueSearch]; +-- Active ByRole +DROP PROCEDURE [FindActiveByRoleWithCount]; +DROP PROCEDURE [FindActiveUsersInRoleAndAllActiveUsersWithCount]; + + +GO +CREATE OR ALTER PROCEDURE [FindUsersWithCount] + @SearchTerm nvarchar(256), + @PageNumber int, + @PageSize int, + @StateFilter nvarchar(256), + @IncludeClaims int +AS +BEGIN + SET NOCOUNT ON; + + ------------------------------------------------------- + -- 1. SETUP & INPUT CLEANING + ------------------------------------------------------- + DECLARE @SearchTermPrefix nvarchar(258) = UPPER(@SearchTerm) + N'%'; + DECLARE @SpacePos int = CHARINDEX(' ', @SearchTerm); + DECLARE @FirstName nvarchar(258); + DECLARE @LastName nvarchar(258); + DECLARE @SearchTermLower nvarchar(258); + + IF @SpacePos > 0 + BEGIN + SET @FirstName = UPPER(LEFT(@SearchTerm, @SpacePos - 1)) + N'%'; + SET @LastName = UPPER(SUBSTRING(@SearchTerm, @SpacePos + 1, LEN(@SearchTerm))) + N'%'; + END + + IF @IncludeClaims > 0 + SET @SearchTermLower = LOWER(@SearchTerm) + N'%'; + + CREATE TABLE #SearchResults + ( + [Id] nvarchar(450) NOT NULL PRIMARY KEY, + [UserName] nvarchar(256) NULL + ); + + ------------------------------------------------------- + -- 2. BUILD STATE FILTER + ------------------------------------------------------- + -- NOTE: @StateFilter is validated against a closed set of + -- known values — no raw user input is concatenated. + DECLARE @CurrentSchema nvarchar(520) = QUOTENAME(OBJECT_SCHEMA_NAME(@@PROCID)); + + DECLARE @StateFilterSql nvarchar(256) = N''; + IF @StateFilter = 'Active' + SET @StateFilterSql = N'AND v.[IsBlocked] = 0 AND v.[IsDeleted] = 0'; + ELSE IF @StateFilter = 'Blocked' + SET @StateFilterSql = N'AND v.[IsBlocked] = 1'; + ELSE IF @StateFilter = 'Deleted' + SET @StateFilterSql = N'AND v.[IsDeleted] = 1'; + ELSE IF @StateFilter = 'ActiveOrBlocked' + SET @StateFilterSql = N'AND v.[IsDeleted] = 0'; + ELSE IF @StateFilter = 'ActiveOrDeleted' + SET @StateFilterSql = N'AND v.[IsBlocked] = 0'; + ELSE IF @StateFilter = 'BlockedOrDeleted' + SET @StateFilterSql = N'AND (v.[IsDeleted] = 1 OR v.[IsBlocked] = 1)'; + + ------------------------------------------------------- + -- 3. THE SEARCH (RUNS EXACTLY ONCE) + ------------------------------------------------------- + DECLARE @Sql nvarchar(max); + + IF @IncludeClaims > 0 + BEGIN + SET @Sql = N' + INSERT INTO #SearchResults ([Id], [UserName]) + SELECT v.[Id], v.[UserName] + FROM ' + @CurrentSchema + N'.[AspNetUsers] v + WHERE ( + v.[NormalizedUserName] LIKE @p_SearchTermPrefix + OR v.[NormalizedEmail] LIKE @p_SearchTermPrefix + OR v.[NormalizedFirstName] LIKE @p_SearchTermPrefix + OR v.[NormalizedLastName] LIKE @p_SearchTermPrefix + OR v.[Id] LIKE @p_SearchTermPrefix + OR (@p_SpacePos > 0 + AND v.[NormalizedFirstName] LIKE @p_FirstName + AND v.[NormalizedLastName] LIKE @p_LastName) + OR EXISTS ( + SELECT 1 + FROM ' + @CurrentSchema + N'.[AspNetUserClaims] c + WHERE c.[UserId] = v.[Id] + AND c.[ClaimValue] LIKE @p_SearchTermLower + ) + ) ' + @StateFilterSql + N' + OPTION (RECOMPILE);'; + END + ELSE + BEGIN + SET @Sql = N' + INSERT INTO #SearchResults ([Id], [UserName]) + SELECT v.[Id], v.[UserName] + FROM ' + @CurrentSchema + N'.[AspNetUsers] v + WHERE ( + v.[NormalizedUserName] LIKE @p_SearchTermPrefix + OR v.[NormalizedEmail] LIKE @p_SearchTermPrefix + OR v.[NormalizedFirstName] LIKE @p_SearchTermPrefix + OR v.[NormalizedLastName] LIKE @p_SearchTermPrefix + OR v.[Id] LIKE @p_SearchTermPrefix + OR (@p_SpacePos > 0 + AND v.[NormalizedFirstName] LIKE @p_FirstName + AND v.[NormalizedLastName] LIKE @p_LastName) + ) ' + @StateFilterSql + N' + OPTION (RECOMPILE);'; + END + + EXEC sp_executesql @Sql, + N'@p_SearchTermPrefix nvarchar(258), @p_SpacePos int, @p_FirstName nvarchar(258), @p_LastName nvarchar(258), @p_SearchTermLower nvarchar(258)', + @p_SearchTermPrefix = @SearchTermPrefix, + @p_SpacePos = @SpacePos, + @p_FirstName = @FirstName, + @p_LastName = @LastName, + @p_SearchTermLower = @SearchTermLower; + + ------------------------------------------------------- + -- 4. RESULT SET 1: THE COUNT + ------------------------------------------------------- + SELECT COUNT_BIG(*) FROM #SearchResults; + + ------------------------------------------------------- + -- 5. RESULT SET 2: THE DATA + ------------------------------------------------------- + SELECT u.[Id], + u.[AccessFailedCount], + u.[ConcurrencyStamp], + u.[Email], + u.[EmailConfirmed], + u.[FirstName], + u.[IsBlocked], + u.[IsDeleted], + u.[LastName], + u.[LockoutEnabled], + u.[LockoutEnd], + u.[NormalizedEmail], + u.[NormalizedFirstName], + u.[NormalizedLastName], + u.[NormalizedUserName], + u.[PasswordHash], + u.[PhoneNumber], + u.[PhoneNumberConfirmed], + u.[SecurityStamp], + u.[TwoFactorEnabled], + u.[UserName] + FROM #SearchResults t + INNER JOIN [AspNetUsers] u ON t.[Id] = u.[Id] + ORDER BY t.[UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY; + + DROP TABLE #SearchResults; +END + +GO +CREATE OR ALTER PROCEDURE [FindActiveByRoleWithCount] + @RoleId nvarchar(450), + @SearchTerm nvarchar(256) = NULL, + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + ------------------------------------------------------- + -- 1. SETUP & INPUT CLEANING + ------------------------------------------------------- + DECLARE @SearchTermPrefix nvarchar(258); + DECLARE @FirstName nvarchar(258); + DECLARE @LastName nvarchar(258); + DECLARE @SpacePos int = 0; + + IF @SearchTerm IS NOT NULL + BEGIN + SET @SearchTermPrefix = UPPER(@SearchTerm) + '%'; + SET @SpacePos = CHARINDEX(' ', @SearchTerm); + + IF @SpacePos > 0 + BEGIN + SET @FirstName = UPPER(LEFT(@SearchTerm, @SpacePos - 1)) + '%'; + SET @LastName = UPPER(SUBSTRING(@SearchTerm, @SpacePos + 1, LEN(@SearchTerm))) + '%'; + END + END + + -- Temp table holds all columns needed for both result sets + -- No second join required + CREATE TABLE #FilteredUsersInRole + ( + [Id] nvarchar(450) NOT NULL, + [Email] nvarchar(256) NULL, + [FirstName] nvarchar(256) NULL, + [LastName] nvarchar(256) NULL, + [UserName] nvarchar(256) NULL + ); + + ------------------------------------------------------- + -- 2. THE SEARCH (RUNS EXACTLY ONCE) + ------------------------------------------------------- + IF @SearchTerm IS NULL + BEGIN + INSERT INTO #FilteredUsersInRole ([Id], [Email], [FirstName], [LastName], [UserName]) + SELECT u.[Id], u.[Email], u.[FirstName], u.[LastName], u.[UserName] + FROM [AspNetUserRoles] ur + INNER JOIN [ActiveUsers] u + ON u.[Id] = ur.[UserId] + WHERE ur.[RoleId] = @RoleId + OPTION (RECOMPILE); + END + ELSE + BEGIN + INSERT INTO #FilteredUsersInRole ([Id], [Email], [FirstName], [LastName], [UserName]) + SELECT u.[Id], u.[Email], u.[FirstName], u.[LastName], u.[UserName] + FROM [AspNetUserRoles] ur + INNER JOIN [ActiveUsers] u + ON u.[Id] = ur.[UserId] + WHERE ur.[RoleId] = @RoleId + AND ( [NormalizedUserName] LIKE @SearchTermPrefix + OR [NormalizedEmail] LIKE @SearchTermPrefix + OR [NormalizedFirstName] LIKE @SearchTermPrefix + OR [NormalizedLastName] LIKE @SearchTermPrefix + OR [Id] LIKE @SearchTermPrefix + OR (@SpacePos > 0 + AND [NormalizedFirstName] LIKE @FirstName + AND [NormalizedLastName] LIKE @LastName)) + OPTION (RECOMPILE); + END + + ------------------------------------------------------- + -- 3. INDEX FOR PAGING SORT + ------------------------------------------------------- + -- Speeds up the ORDER BY + OFFSET/FETCH on large result sets + CREATE NONCLUSTERED INDEX IX_Tmp_UserName + ON #FilteredUsersInRole ([UserName]) + INCLUDE ([Id], [Email], [FirstName], [LastName]); + + ------------------------------------------------------- + -- 4. RESULT SET 1: THE COUNT + ------------------------------------------------------- + SELECT COUNT_BIG(*) FROM #FilteredUsersInRole; + + ------------------------------------------------------- + -- 5. RESULT SET 2: THE DATA (no second join) + ------------------------------------------------------- + SELECT [Id], + [Email], + [FirstName], + [LastName], + [UserName] + FROM #FilteredUsersInRole + ORDER BY [UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY; + + -- Cleanup (auto-dropped at end of session, but explicit is clearer) + DROP TABLE #FilteredUsersInRole; +END + +GO +CREATE OR ALTER PROCEDURE [FindActiveWithIsInRoleAndCount] + @RoleId nvarchar(450), + @SearchTerm nvarchar(256) = NULL, + @PageNumber int, + @PageSize int +AS +BEGIN + SET NOCOUNT ON; + + ------------------------------------------------------- + -- 1. SETUP & INPUT CLEANING + ------------------------------------------------------- + DECLARE @SearchTermPrefix nvarchar(258); + DECLARE @FirstName nvarchar(258); + DECLARE @LastName nvarchar(258); + DECLARE @SpacePos int = 0; + + IF @SearchTerm IS NOT NULL + BEGIN + SET @SearchTermPrefix = UPPER(@SearchTerm) + '%'; + SET @SpacePos = CHARINDEX(' ', @SearchTerm); + + IF @SpacePos > 0 + BEGIN + SET @FirstName = UPPER(LEFT(@SearchTerm, @SpacePos - 1)) + '%'; + SET @LastName = UPPER(SUBSTRING(@SearchTerm, @SpacePos + 1, LEN(@SearchTerm))) + '%'; + END + END + + ------------------------------------------------------- + -- 2. FILTERED USERS (RUNS EXACTLY ONCE) + ------------------------------------------------------- + CREATE TABLE #FilteredUsers + ( + [Id] nvarchar(450) NOT NULL, + [Email] nvarchar(256) NULL, + [FirstName] nvarchar(256) NULL, + [LastName] nvarchar(256) NULL, + [UserName] nvarchar(256) NULL + ); + + IF @SearchTerm IS NULL + BEGIN + INSERT INTO #FilteredUsers ([Id], [Email], [FirstName], [LastName], [UserName]) + SELECT u.[Id], u.[Email], u.[FirstName], u.[LastName], u.[UserName] + FROM [AspNetUsers] u + WHERE u.[IsBlocked] = 0 + AND u.[IsDeleted] = 0 + OPTION (RECOMPILE); + END + ELSE + BEGIN + INSERT INTO #FilteredUsers ([Id], [Email], [FirstName], [LastName], [UserName]) + SELECT u.[Id], u.[Email], u.[FirstName], u.[LastName], u.[UserName] + FROM [AspNetUsers] u + WHERE u.[IsBlocked] = 0 + AND u.[IsDeleted] = 0 + AND ( [NormalizedUserName] LIKE @SearchTermPrefix + OR [NormalizedEmail] LIKE @SearchTermPrefix + OR [NormalizedFirstName] LIKE @SearchTermPrefix + OR [NormalizedLastName] LIKE @SearchTermPrefix + OR [Id] LIKE @SearchTermPrefix + OR (@SpacePos > 0 + AND [NormalizedFirstName] LIKE @FirstName + AND [NormalizedLastName] LIKE @LastName)) + OPTION (RECOMPILE); + END + + ------------------------------------------------------- + -- 3. INDEX FOR PAGING SORT + ------------------------------------------------------- + CREATE NONCLUSTERED INDEX IX_Tmp_UserName + ON #FilteredUsers ([UserName]) + INCLUDE ([Id], [Email], [FirstName], [LastName]); + + ------------------------------------------------------- + -- 4. RESULT SET 1: THE COUNT + ------------------------------------------------------- + SELECT COUNT_BIG(*) FROM #FilteredUsers; + + ------------------------------------------------------- + -- 5. RESULT SET 2: THE DATA WITH IsInRole FLAG + ------------------------------------------------------- + -- Direct LEFT JOIN to AspNetUserRoles avoids materializing + -- the entire role membership into a separate temp table + SELECT f.[Id], + f.[Email], + f.[FirstName], + f.[LastName], + f.[UserName], + CASE WHEN ur.[RoleId] IS NULL + THEN CAST(0 AS bit) + ELSE CAST(1 AS bit) + END AS [IsInRole] + FROM #FilteredUsers f + LEFT JOIN [AspNetUserRoles] ur + ON ur.[UserId] = f.[Id] + AND ur.[RoleId] = @RoleId + ORDER BY f.[UserName] + OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY; + + -- Cleanup + DROP TABLE #FilteredUsers; +END +GO + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20260213115004_StoredProcedureRefactor', N'10.0.11'); + +COMMIT; +GO \ No newline at end of file diff --git a/Complete migrations (up to v13)/SqlServer/Operational.sql b/Complete migrations (up to v12)/SqlServer/Operational.sql similarity index 97% rename from Complete migrations (up to v13)/SqlServer/Operational.sql rename to Complete migrations (up to v12)/SqlServer/Operational.sql index 13f97a8..b4affae 100644 --- a/Complete migrations (up to v13)/SqlServer/Operational.sql +++ b/Complete migrations (up to v12)/SqlServer/Operational.sql @@ -23,14 +23,14 @@ CREATE TABLE [PersistedGrants] ( CREATE INDEX [IX_PersistedGrants_SubjectId_ClientId_Type] ON [PersistedGrants] ([SubjectId], [ClientId], [Type]); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20171026080756_InitialSqlServerOperationalDbMigration', N'10.0.8'); +VALUES (N'20171026080756_InitialSqlServerOperationalDbMigration', N'10.0.11'); COMMIT; GO BEGIN TRANSACTION; INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20171122163758_UserSearchOptimizationOperationalDbMigration', N'10.0.8'); +VALUES (N'20171122163758_UserSearchOptimizationOperationalDbMigration', N'10.0.11'); COMMIT; GO @@ -52,7 +52,7 @@ CREATE UNIQUE INDEX [IX_DeviceCodes_DeviceCode] ON [DeviceCodes] ([DeviceCode]); CREATE UNIQUE INDEX [IX_DeviceCodes_UserCode] ON [DeviceCodes] ([UserCode]); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20181109164134_IdentityServer2.3SqlServerSqlServerOperationalDbMigration', N'10.0.8'); +VALUES (N'20181109164134_IdentityServer2.3SqlServerSqlServerOperationalDbMigration', N'10.0.11'); COMMIT; GO @@ -90,7 +90,7 @@ CREATE NONCLUSTERED INDEX IX_PersistedGrants_SubjectId_SessionId_Type COMMIT TRANSACTION; INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20200702080430_V3toV4SqlServerOperationalDbMigration', N'10.0.8'); +VALUES (N'20200702080430_V3toV4SqlServerOperationalDbMigration', N'10.0.11'); COMMIT; GO @@ -111,7 +111,7 @@ CREATE TABLE [Keys] ( CREATE INDEX [IX_Keys_Use] ON [Keys] ([Use]); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20210105164242_DuendeSqlServerMigrationOperational', N'10.0.8'); +VALUES (N'20210105164242_DuendeSqlServerMigrationOperational', N'10.0.11'); COMMIT; GO @@ -120,7 +120,7 @@ BEGIN TRANSACTION; CREATE INDEX [IX_PersistedGrants_ConsumedTime] ON [PersistedGrants] ([ConsumedTime]); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20210602110024_PersistedGrantConsumeTimeSqlServerOperationalMigration', N'10.0.8'); +VALUES (N'20210602110024_PersistedGrantConsumeTimeSqlServerOperationalMigration', N'10.0.11'); COMMIT; GO @@ -167,7 +167,7 @@ CREATE INDEX [IX_ServerSideSessions_SessionId] ON [ServerSideSessions] ([Session CREATE INDEX [IX_ServerSideSessions_SubjectId] ON [ServerSideSessions] ([SubjectId]); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20220608091949_Duende61Update', N'10.0.8'); +VALUES (N'20220608091949_Duende61Update', N'10.0.11'); COMMIT; GO @@ -194,7 +194,7 @@ CREATE TABLE [PushedAuthorizationRequests] ( ); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20240108131028_DuendeV7SqlServerOperationalMigration', N'10.0.8'); +VALUES (N'20240108131028_DuendeV7SqlServerOperationalMigration', N'10.0.11'); COMMIT; GO @@ -225,7 +225,7 @@ CREATE INDEX [IX_PushedAuthorizationRequests_ExpiresAtUtc] ON [PushedAuthorizati CREATE UNIQUE INDEX [IX_PushedAuthorizationRequests_ReferenceValueHash] ON [PushedAuthorizationRequests] ([ReferenceValueHash]); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20250121150503_DuendeV7.1SqlServerOperationalMigration', N'10.0.8'); +VALUES (N'20250121150503_DuendeV7.1SqlServerOperationalMigration', N'10.0.11'); COMMIT; GO diff --git a/Complete migrations (up to v13)/SqlServer/SamlArtifact.sql b/Complete migrations (up to v12)/SqlServer/SamlArtifact.sql similarity index 98% rename from Complete migrations (up to v13)/SqlServer/SamlArtifact.sql rename to Complete migrations (up to v12)/SqlServer/SamlArtifact.sql index b674ae8..64fb61c 100644 --- a/Complete migrations (up to v13)/SqlServer/SamlArtifact.sql +++ b/Complete migrations (up to v12)/SqlServer/SamlArtifact.sql @@ -22,7 +22,7 @@ CREATE TABLE [SamlArtifacts] ( CREATE INDEX [IX_SamlArtifacts_Expiration] ON [SamlArtifacts] ([Expiration]); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20220114164649_SqlServerSamlArtifactInitialMigration', N'10.0.8'); +VALUES (N'20220114164649_SqlServerSamlArtifactInitialMigration', N'10.0.11'); COMMIT; GO diff --git a/Complete migrations (up to v13)/SqlServer/SamlConfiguration.sql b/Complete migrations (up to v12)/SqlServer/SamlConfiguration.sql similarity index 95% rename from Complete migrations (up to v13)/SqlServer/SamlConfiguration.sql rename to Complete migrations (up to v12)/SqlServer/SamlConfiguration.sql index aa9e8a3..b375c2f 100644 --- a/Complete migrations (up to v13)/SqlServer/SamlConfiguration.sql +++ b/Complete migrations (up to v12)/SqlServer/SamlConfiguration.sql @@ -69,7 +69,7 @@ CREATE INDEX [IX_ServiceProviderSignCertificates_ServiceProviderId] ON [ServiceP CREATE INDEX [IX_ServiceProviderSingleLogoutServices_ServiceProviderId] ON [ServiceProviderSingleLogoutServices] ([ServiceProviderId]); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20190305134515_SqlServerSaml2PInitial', N'10.0.8'); +VALUES (N'20190305134515_SqlServerSaml2PInitial', N'10.0.11'); COMMIT; GO @@ -78,7 +78,7 @@ BEGIN TRANSACTION; ALTER TABLE [ServiceProviders] ADD [AllowIdpInitiatedSso] bit NOT NULL DEFAULT CAST(0 AS bit); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20200225104531_Added AllowIdpInitiatedSso', N'10.0.8'); +VALUES (N'20200225104531_Added AllowIdpInitiatedSso', N'10.0.11'); COMMIT; GO @@ -89,7 +89,7 @@ ALTER TABLE [ServiceProviders] ADD [RequireAuthenticationRequestsSigned] bit NUL EXEC sp_rename N'[ServiceProviders].[RequireSamlRequestDestination]', N'RequireSamlMessageDestination', 'COLUMN'; INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20200914075545_RskSamlV3', N'10.0.8'); +VALUES (N'20200914075545_RskSamlV3', N'10.0.11'); COMMIT; GO @@ -117,7 +117,7 @@ CREATE TABLE [ServiceProviderArtifactResolutionServices] ( CREATE INDEX [IX_ServiceProviderArtifactResolutionServices_ServiceProviderId] ON [ServiceProviderArtifactResolutionServices] ([ServiceProviderId]); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20220112143907_RskSamlPackageUpdate', N'10.0.8'); +VALUES (N'20220112143907_RskSamlPackageUpdate', N'10.0.11'); COMMIT; GO diff --git a/Complete migrations (up to v13)/SqlServer/WsFederationConfiguration.sql b/Complete migrations (up to v12)/SqlServer/WsFederationConfiguration.sql similarity index 95% rename from Complete migrations (up to v13)/SqlServer/WsFederationConfiguration.sql rename to Complete migrations (up to v12)/SqlServer/WsFederationConfiguration.sql index d9abcc4..b74b51b 100644 --- a/Complete migrations (up to v13)/SqlServer/WsFederationConfiguration.sql +++ b/Complete migrations (up to v12)/SqlServer/WsFederationConfiguration.sql @@ -33,7 +33,7 @@ CREATE UNIQUE INDEX [IX_RelyingParties_Realm] ON [RelyingParties] ([Realm]); CREATE INDEX [IX_RelyingPartyClaimMappings_RelyingPartyId] ON [RelyingPartyClaimMappings] ([RelyingPartyId]); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20190305133618_SqlServerWsfederationInitial', N'10.0.8'); +VALUES (N'20190305133618_SqlServerWsfederationInitial', N'10.0.11'); COMMIT; GO diff --git a/Complete migrations (up to v13.1)/PostgreSql/Audit.sql b/Complete migrations (up to v13.1)/PostgreSql/Audit.sql new file mode 100644 index 0000000..c3cdc46 --- /dev/null +++ b/Complete migrations (up to v13.1)/PostgreSql/Audit.sql @@ -0,0 +1,34 @@ +CREATE TABLE IF NOT EXISTS "__EFMigrationsHistory" ( + "MigrationId" character varying(150) NOT NULL, + "ProductVersion" character varying(32) NOT NULL, + CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY ("MigrationId") +); + +START TRANSACTION; +CREATE TABLE "AuditEntries" ( + "Id" bigserial NOT NULL, + "When" timestamp with time zone NOT NULL, + "Source" text, + "SubjectType" text, + "SubjectIdentifier" text, + "Subject" text, + "Action" text, + "ResourceType" text, + "Resource" text, + "ResourceIdentifier" text, + "Succeeded" boolean NOT NULL, + "Description" text, + "NormalisedSubject" text, + "NormalisedAction" text, + "NormalisedResource" text, + "NormalisedSource" text, + CONSTRAINT "PK_AuditEntries" PRIMARY KEY ("Id") +); + +CREATE INDEX "IX_AuditEntries_When" ON "AuditEntries" ("When"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20181220155915_InitalPostgreSqlAuditDbMigration', '10.0.11'); + +COMMIT; + diff --git a/Complete migrations (up to v13.1)/PostgreSql/Configuration.sql b/Complete migrations (up to v13.1)/PostgreSql/Configuration.sql new file mode 100644 index 0000000..753c3b7 --- /dev/null +++ b/Complete migrations (up to v13.1)/PostgreSql/Configuration.sql @@ -0,0 +1,738 @@ +CREATE TABLE IF NOT EXISTS "__EFMigrationsHistory" ( + "MigrationId" character varying(150) NOT NULL, + "ProductVersion" character varying(32) NOT NULL, + CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY ("MigrationId") +); + +START TRANSACTION; +CREATE TABLE "ApiResources" ( + "Id" serial NOT NULL, + "Description" varchar(1000), + "DisplayName" varchar(200), + "Enabled" bool NOT NULL, + "Name" varchar(200) NOT NULL, + CONSTRAINT "PK_ApiResources" PRIMARY KEY ("Id") +); + +CREATE TABLE "Clients" ( + "Id" serial NOT NULL, + "AbsoluteRefreshTokenLifetime" int4 NOT NULL, + "AccessTokenLifetime" int4 NOT NULL, + "AccessTokenType" int4 NOT NULL, + "AllowAccessTokensViaBrowser" bool NOT NULL, + "AllowOfflineAccess" bool NOT NULL, + "AllowPlainTextPkce" bool NOT NULL, + "AllowRememberConsent" bool NOT NULL, + "AlwaysIncludeUserClaimsInIdToken" bool NOT NULL, + "AlwaysSendClientClaims" bool NOT NULL, + "AuthorizationCodeLifetime" int4 NOT NULL, + "BackChannelLogoutSessionRequired" bool NOT NULL, + "BackChannelLogoutUri" varchar(2000), + "ClientClaimsPrefix" varchar(200), + "ClientId" varchar(200) NOT NULL, + "ClientName" varchar(200), + "ClientUri" varchar(2000), + "ConsentLifetime" int4, + "Description" varchar(1000), + "EnableLocalLogin" bool NOT NULL, + "Enabled" bool NOT NULL, + "FrontChannelLogoutSessionRequired" bool NOT NULL, + "FrontChannelLogoutUri" varchar(2000), + "IdentityTokenLifetime" int4 NOT NULL, + "IncludeJwtId" bool NOT NULL, + "LogoUri" varchar(2000), + "PairWiseSubjectSalt" varchar(200), + "ProtocolType" varchar(200) NOT NULL, + "RefreshTokenExpiration" int4 NOT NULL, + "RefreshTokenUsage" int4 NOT NULL, + "RequireClientSecret" bool NOT NULL, + "RequireConsent" bool NOT NULL, + "RequirePkce" bool NOT NULL, + "SlidingRefreshTokenLifetime" int4 NOT NULL, + "UpdateAccessTokenClaimsOnRefresh" bool NOT NULL, + CONSTRAINT "PK_Clients" PRIMARY KEY ("Id") +); + +CREATE TABLE "IdentityResources" ( + "Id" serial NOT NULL, + "Description" varchar(1000), + "DisplayName" varchar(200), + "Emphasize" bool NOT NULL, + "Enabled" bool NOT NULL, + "Name" varchar(200) NOT NULL, + "Required" bool NOT NULL, + "ShowInDiscoveryDocument" bool NOT NULL, + CONSTRAINT "PK_IdentityResources" PRIMARY KEY ("Id") +); + +CREATE TABLE "ApiClaims" ( + "Id" serial NOT NULL, + "ApiResourceId" int4 NOT NULL, + "Type" varchar(200) NOT NULL, + CONSTRAINT "PK_ApiClaims" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ApiClaims_ApiResources_ApiResourceId" FOREIGN KEY ("ApiResourceId") REFERENCES "ApiResources" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "ApiScopes" ( + "Id" serial NOT NULL, + "ApiResourceId" int4 NOT NULL, + "Description" varchar(1000), + "DisplayName" varchar(200), + "Emphasize" bool NOT NULL, + "Name" varchar(200) NOT NULL, + "Required" bool NOT NULL, + "ShowInDiscoveryDocument" bool NOT NULL, + CONSTRAINT "PK_ApiScopes" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ApiScopes_ApiResources_ApiResourceId" FOREIGN KEY ("ApiResourceId") REFERENCES "ApiResources" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "ApiSecrets" ( + "Id" serial NOT NULL, + "ApiResourceId" int4 NOT NULL, + "Description" varchar(1000), + "Expiration" timestamp, + "Type" varchar(250), + "Value" varchar(2000), + CONSTRAINT "PK_ApiSecrets" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ApiSecrets_ApiResources_ApiResourceId" FOREIGN KEY ("ApiResourceId") REFERENCES "ApiResources" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "ClientClaims" ( + "Id" serial NOT NULL, + "ClientId" int4 NOT NULL, + "Type" varchar(250) NOT NULL, + "Value" varchar(250) NOT NULL, + CONSTRAINT "PK_ClientClaims" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ClientClaims_Clients_ClientId" FOREIGN KEY ("ClientId") REFERENCES "Clients" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "ClientCorsOrigins" ( + "Id" serial NOT NULL, + "ClientId" int4 NOT NULL, + "Origin" varchar(150) NOT NULL, + CONSTRAINT "PK_ClientCorsOrigins" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ClientCorsOrigins_Clients_ClientId" FOREIGN KEY ("ClientId") REFERENCES "Clients" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "ClientGrantTypes" ( + "Id" serial NOT NULL, + "ClientId" int4 NOT NULL, + "GrantType" varchar(250) NOT NULL, + CONSTRAINT "PK_ClientGrantTypes" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ClientGrantTypes_Clients_ClientId" FOREIGN KEY ("ClientId") REFERENCES "Clients" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "ClientIdPRestrictions" ( + "Id" serial NOT NULL, + "ClientId" int4 NOT NULL, + "Provider" varchar(200) NOT NULL, + CONSTRAINT "PK_ClientIdPRestrictions" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ClientIdPRestrictions_Clients_ClientId" FOREIGN KEY ("ClientId") REFERENCES "Clients" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "ClientPostLogoutRedirectUris" ( + "Id" serial NOT NULL, + "ClientId" int4 NOT NULL, + "PostLogoutRedirectUri" varchar(2000) NOT NULL, + CONSTRAINT "PK_ClientPostLogoutRedirectUris" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ClientPostLogoutRedirectUris_Clients_ClientId" FOREIGN KEY ("ClientId") REFERENCES "Clients" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "ClientProperties" ( + "Id" serial NOT NULL, + "ClientId" int4 NOT NULL, + "Key" varchar(250) NOT NULL, + "Value" varchar(2000) NOT NULL, + CONSTRAINT "PK_ClientProperties" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ClientProperties_Clients_ClientId" FOREIGN KEY ("ClientId") REFERENCES "Clients" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "ClientRedirectUris" ( + "Id" serial NOT NULL, + "ClientId" int4 NOT NULL, + "RedirectUri" varchar(2000) NOT NULL, + CONSTRAINT "PK_ClientRedirectUris" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ClientRedirectUris_Clients_ClientId" FOREIGN KEY ("ClientId") REFERENCES "Clients" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "ClientScopes" ( + "Id" serial NOT NULL, + "ClientId" int4 NOT NULL, + "Scope" varchar(200) NOT NULL, + CONSTRAINT "PK_ClientScopes" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ClientScopes_Clients_ClientId" FOREIGN KEY ("ClientId") REFERENCES "Clients" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "ClientSecrets" ( + "Id" serial NOT NULL, + "ClientId" int4 NOT NULL, + "Description" varchar(2000), + "Expiration" timestamp, + "Type" varchar(250), + "Value" varchar(2000) NOT NULL, + CONSTRAINT "PK_ClientSecrets" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ClientSecrets_Clients_ClientId" FOREIGN KEY ("ClientId") REFERENCES "Clients" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "IdentityClaims" ( + "Id" serial NOT NULL, + "IdentityResourceId" int4 NOT NULL, + "Type" varchar(200) NOT NULL, + CONSTRAINT "PK_IdentityClaims" PRIMARY KEY ("Id"), + CONSTRAINT "FK_IdentityClaims_IdentityResources_IdentityResourceId" FOREIGN KEY ("IdentityResourceId") REFERENCES "IdentityResources" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "ApiScopeClaims" ( + "Id" serial NOT NULL, + "ApiScopeId" int4 NOT NULL, + "Type" varchar(200) NOT NULL, + CONSTRAINT "PK_ApiScopeClaims" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ApiScopeClaims_ApiScopes_ApiScopeId" FOREIGN KEY ("ApiScopeId") REFERENCES "ApiScopes" ("Id") ON DELETE CASCADE +); + +CREATE INDEX "IX_ApiClaims_ApiResourceId" ON "ApiClaims" ("ApiResourceId"); + +CREATE UNIQUE INDEX "IX_ApiResources_Name" ON "ApiResources" ("Name"); + +CREATE INDEX "IX_ApiScopeClaims_ApiScopeId" ON "ApiScopeClaims" ("ApiScopeId"); + +CREATE INDEX "IX_ApiScopes_ApiResourceId" ON "ApiScopes" ("ApiResourceId"); + +CREATE UNIQUE INDEX "IX_ApiScopes_Name" ON "ApiScopes" ("Name"); + +CREATE INDEX "IX_ApiSecrets_ApiResourceId" ON "ApiSecrets" ("ApiResourceId"); + +CREATE INDEX "IX_ClientClaims_ClientId" ON "ClientClaims" ("ClientId"); + +CREATE INDEX "IX_ClientCorsOrigins_ClientId" ON "ClientCorsOrigins" ("ClientId"); + +CREATE INDEX "IX_ClientGrantTypes_ClientId" ON "ClientGrantTypes" ("ClientId"); + +CREATE INDEX "IX_ClientIdPRestrictions_ClientId" ON "ClientIdPRestrictions" ("ClientId"); + +CREATE INDEX "IX_ClientPostLogoutRedirectUris_ClientId" ON "ClientPostLogoutRedirectUris" ("ClientId"); + +CREATE INDEX "IX_ClientProperties_ClientId" ON "ClientProperties" ("ClientId"); + +CREATE INDEX "IX_ClientRedirectUris_ClientId" ON "ClientRedirectUris" ("ClientId"); + +CREATE UNIQUE INDEX "IX_Clients_ClientId" ON "Clients" ("ClientId"); + +CREATE INDEX "IX_ClientScopes_ClientId" ON "ClientScopes" ("ClientId"); + +CREATE INDEX "IX_ClientSecrets_ClientId" ON "ClientSecrets" ("ClientId"); + +CREATE INDEX "IX_IdentityClaims_IdentityResourceId" ON "IdentityClaims" ("IdentityResourceId"); + +CREATE UNIQUE INDEX "IX_IdentityResources_Name" ON "IdentityResources" ("Name"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20171026082702_InitialPostgreSqlConfigurationDbMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20171122163837_UserSearchOptimizationConfigurationDbMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +ALTER TABLE "IdentityResources" ADD "Created" timestamp with time zone NOT NULL DEFAULT TIMESTAMPTZ '-infinity'; + +ALTER TABLE "IdentityResources" ADD "NonEditable" boolean NOT NULL DEFAULT FALSE; + +ALTER TABLE "IdentityResources" ADD "Updated" timestamp with time zone; + +ALTER TABLE "ClientSecrets" ALTER COLUMN "Value" TYPE character varying(4000); + +ALTER TABLE "ClientSecrets" ALTER COLUMN "Type" SET NOT NULL; + +ALTER TABLE "ClientSecrets" ADD "Created" timestamp with time zone NOT NULL DEFAULT TIMESTAMPTZ '-infinity'; + +ALTER TABLE "Clients" ADD "Created" timestamp with time zone NOT NULL DEFAULT TIMESTAMPTZ '-infinity'; + +ALTER TABLE "Clients" ADD "DeviceCodeLifetime" integer NOT NULL DEFAULT 0; + +ALTER TABLE "Clients" ADD "LastAccessed" timestamp with time zone; + +ALTER TABLE "Clients" ADD "NonEditable" boolean NOT NULL DEFAULT FALSE; + +ALTER TABLE "Clients" ADD "Updated" timestamp with time zone; + +ALTER TABLE "Clients" ADD "UserCodeType" character varying(100); + +ALTER TABLE "Clients" ADD "UserSsoLifetime" integer; + +ALTER TABLE "ApiSecrets" ALTER COLUMN "Value" TYPE character varying(4000); +ALTER TABLE "ApiSecrets" ALTER COLUMN "Value" SET NOT NULL; + +ALTER TABLE "ApiSecrets" ALTER COLUMN "Type" SET NOT NULL; + +ALTER TABLE "ApiSecrets" ADD "Created" timestamp with time zone NOT NULL DEFAULT TIMESTAMPTZ '-infinity'; + +ALTER TABLE "ApiResources" ADD "Created" timestamp with time zone NOT NULL DEFAULT TIMESTAMPTZ '-infinity'; + +ALTER TABLE "ApiResources" ADD "LastAccessed" timestamp with time zone; + +ALTER TABLE "ApiResources" ADD "NonEditable" boolean NOT NULL DEFAULT FALSE; + +ALTER TABLE "ApiResources" ADD "Updated" timestamp with time zone; + +CREATE TABLE "ApiProperties" ( + "Id" serial NOT NULL, + "Key" character varying(250) NOT NULL, + "Value" character varying(2000) NOT NULL, + "ApiResourceId" integer NOT NULL, + CONSTRAINT "PK_ApiProperties" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ApiProperties_ApiResources_ApiResourceId" FOREIGN KEY ("ApiResourceId") REFERENCES "ApiResources" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "IdentityProperties" ( + "Id" serial NOT NULL, + "Key" character varying(250) NOT NULL, + "Value" character varying(2000) NOT NULL, + "IdentityResourceId" integer NOT NULL, + CONSTRAINT "PK_IdentityProperties" PRIMARY KEY ("Id"), + CONSTRAINT "FK_IdentityProperties_IdentityResources_IdentityResourceId" FOREIGN KEY ("IdentityResourceId") REFERENCES "IdentityResources" ("Id") ON DELETE CASCADE +); + +CREATE INDEX "IX_ApiProperties_ApiResourceId" ON "ApiProperties" ("ApiResourceId"); + +CREATE INDEX "IX_IdentityProperties_IdentityResourceId" ON "IdentityProperties" ("IdentityResourceId"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20181112154834_IdentityServer2.3PostgreSqlConfigurationDbMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20200702113308_UpdateIdColumnsPostgreSqlConfigurationDbMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +-- Add New Tables + + +-- Add ApiResourceScopes + +CREATE TABLE "ApiResourceScopes" ( + "Id" SERIAL, + "Scope" character varying(200) NOT NULL, + "ApiResourceId" integer NOT NULL, + CONSTRAINT "PK_ApiResourceScopes" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ApiResourceScopes_ApiResources_ApiResourceId" FOREIGN KEY ("ApiResourceId") REFERENCES "ApiResources" ("Id") ON DELETE CASCADE +); + +CREATE INDEX "IX_ApiResourceScopes_ApiResourceId" ON "ApiResourceScopes" ("ApiResourceId"); + + + +-- Add ApiScopeProperties + +CREATE TABLE "ApiScopeProperties" ( + "Id" SERIAL, + "Key" character varying(250) NOT NULL, + "Value" character varying(2000) NOT NULL, + "ScopeId" integer NOT NULL, + CONSTRAINT "PK_ApiScopeProperties" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ApiScopeProperties_ApiScopes_ScopeId" FOREIGN KEY ("ScopeId") REFERENCES "ApiScopes" ("Id") ON DELETE CASCADE +); + +CREATE INDEX "IX_ApiScopeProperties_ScopeId" ON "ApiScopeProperties" ("ScopeId"); + + + +-- Add Renamed Tables + +-- ApiResourceClaims + +CREATE TABLE "ApiResourceClaims" ( + "Id" SERIAL, + "Type" character varying(200) NOT NULL, + "ApiResourceId" integer NOT NULL, + CONSTRAINT "PK_ApiResourceClaims" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ApiResourceClaims_ApiResources_ApiResourceId" FOREIGN KEY ("ApiResourceId") REFERENCES "ApiResources" ("Id") ON DELETE CASCADE +); + +CREATE INDEX "IX_ApiResourceClaims_ApiResourceId" ON "ApiResourceClaims" ("ApiResourceId"); + + + +-- ApiResourceProperties + +CREATE TABLE "ApiResourceProperties" ( + "Id" SERIAL, + "Key" character varying(250) NOT NULL, + "Value" character varying(2000) NOT NULL, + "ApiResourceId" integer NOT NULL, + CONSTRAINT "PK_ApiResourceProperties" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ApiResourceProperties_ApiResources_ApiResourceId" FOREIGN KEY ("ApiResourceId") REFERENCES "ApiResources" ("Id") ON DELETE CASCADE +); + +CREATE INDEX "IX_ApiResourceProperties_ApiResourceId" ON "ApiResourceProperties" ("ApiResourceId"); + + + +-- Add ApiResourceSecrets + +CREATE TABLE "ApiResourceSecrets" ( + "Id" SERIAL, + "Description" character varying(1000) NULL, + "Value" character varying(4000) NOT NULL, + "Expiration" timestamp without time zone NULL, + "Type" character varying(250) NOT NULL, + "Created" timestamp without time zone NOT NULL, + "ApiResourceId" integer NOT NULL, + CONSTRAINT "PK_ApiResourceSecrets" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ApiResourceSecrets_ApiResources_ApiResourceId" FOREIGN KEY ("ApiResourceId") REFERENCES "ApiResources" ("Id") ON DELETE CASCADE +); + +CREATE INDEX "IX_ApiResourceSecrets_ApiResourceId" ON "ApiResourceSecrets" ("ApiResourceId"); + + + +-- IdentityResourceClaims + +CREATE TABLE "IdentityResourceClaims" ( + "Id" SERIAL, + "Type" character varying(200) NOT NULL, + "IdentityResourceId" integer NOT NULL, + CONSTRAINT "PK_IdentityResourceClaims" PRIMARY KEY ("Id"), + CONSTRAINT "FK_IdentityResourceClaims_IdentityResources_IdentityResourceId" FOREIGN KEY ("IdentityResourceId") REFERENCES "IdentityResources" ("Id") ON DELETE CASCADE +); + +CREATE INDEX "IX_IdentityResourceClaims_IdentityResourceId" ON "IdentityResourceClaims" ("IdentityResourceId"); + + + +-- IdentityResourceProperties + +CREATE TABLE "IdentityResourceProperties" ( + "Id" SERIAL, + "Key" character varying(250) NOT NULL, + "Value" character varying(2000) NOT NULL, + "IdentityResourceId" integer NOT NULL, + CONSTRAINT "PK_IdentityResourceProperties" PRIMARY KEY ("Id"), + CONSTRAINT "FK_IdentityResourceProperties_IdentityResources_IdentityResour~" FOREIGN KEY ("IdentityResourceId") REFERENCES "IdentityResources" ("Id") ON DELETE CASCADE +); + +CREATE INDEX "IX_IdentityResourceProperties_IdentityResourceId" ON "IdentityResourceProperties" ("IdentityResourceId"); + + + +-- Migrate Existing Data + +--ApiClaims -> ApiResourceClaims + +INSERT INTO "ApiResourceClaims" + ("Id", "Type", "ApiResourceId") +SELECT + "Id", "Type", "ApiResourceId" +FROM "ApiClaims"; + + + +--ApiProperties -> ApiResourceProperties + +INSERT INTO "ApiResourceProperties" + ("Id", "Key", "Value", "ApiResourceId") +SELECT + "Id", "Key", "Value", "ApiResourceId" +FROM "ApiProperties"; + + + +--ApiSecrets -> ApiResourceSecrets + +INSERT INTO "ApiResourceSecrets" + ("Id", "Description", "Value", "Expiration", "Type", "Created", "ApiResourceId") +SELECT + "Id", "Description", "Value", "Expiration", "Type", "Created", "ApiResourceId" +FROM "ApiSecrets"; + + + +--IdentityClaims -> IdentityResourceClaims + +INSERT INTO "IdentityResourceClaims" + ("Id", "Type", "IdentityResourceId") +SELECT + "Id", "Type", "IdentityResourceId" +FROM "IdentityClaims"; + + + +--IdentityProperties -> IdentityResourceProperties + +INSERT INTO "IdentityResourceProperties" + ("Id", "Key", "Value", "IdentityResourceId") +SELECT + "Id", "Key", "Value", "IdentityResourceId" +FROM "IdentityProperties"; + + + +-- ApiScopes -> ApiResourceScopes +INSERT INTO "ApiResourceScopes" + ("Scope", "ApiResourceId") +SELECT + "Name", "ApiResourceId" +FROM "ApiScopes"; + +-- Alter Existing Tables + +-- ApiResources + +ALTER TABLE "ApiResources" + ADD "AllowedAccessTokenSigningAlgorithms" character varying (100) + NULL; + +ALTER TABLE "ApiResources" + ADD "ShowInDiscoveryDocument" BOOLEAN + NULL; + +UPDATE "ApiResources" SET "ShowInDiscoveryDocument" = FALSE; + +ALTER TABLE "ApiResources" + ALTER COLUMN "ShowInDiscoveryDocument" SET NOT NULL; + + + +-- ApiScopeClaims + +ALTER TABLE "ApiScopeClaims" + DROP CONSTRAINT "FK_ApiScopeClaims_ApiScopes_ApiScopeId"; + +DROP INDEX "IX_ApiScopeClaims_ApiScopeId"; + +ALTER TABLE "ApiScopeClaims" RENAME "ApiScopeId" TO "ScopeId"; + +CREATE INDEX "IX_ApiScopeClaims_ScopeId" ON "ApiScopeClaims" ("ScopeId"); + +ALTER TABLE "ApiScopeClaims" + ADD CONSTRAINT "FK_ApiScopeClaims_ApiScopes_ScopeId" + FOREIGN KEY ("ScopeId") REFERENCES "ApiScopes" ("Id") ON DELETE CASCADE; + + + +-- ApiScopes + +ALTER TABLE "ApiScopes" + DROP CONSTRAINT "FK_ApiScopes_ApiResources_ApiResourceId"; + +DROP INDEX "IX_ApiScopes_ApiResourceId"; + +ALTER TABLE "ApiScopes" + ADD "Enabled" BOOLEAN NULL; + +UPDATE "ApiScopes" SET "Enabled" = TRUE; + +ALTER TABLE "ApiScopes" + ALTER COLUMN "Enabled" SET NOT NULL; + +ALTER TABLE "ApiScopes" + DROP COLUMN "ApiResourceId"; + +-- Clients + +ALTER TABLE "Clients" + ADD "AllowedIdentityTokenSigningAlgorithms" character varying(100) NULL; + +ALTER TABLE "Clients" + ADD "RequireRequestObject" BOOLEAN NULL; + +UPDATE "Clients" SET "RequireRequestObject" = FALSE; + +ALTER TABLE "Clients" + ALTER COLUMN "RequireRequestObject" SET NOT NULL; + + + +-- Delete Old Tables + +DROP TABLE "ApiClaims"; +DROP TABLE "ApiProperties"; +DROP TABLE "ApiSecrets"; +DROP TABLE "IdentityClaims"; +DROP TABLE "IdentityProperties"; + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20200702113402_V3toV4PostgreSqlConfigurationDbMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +ALTER TABLE "ApiResources" ADD "RequireResourceIndicator" boolean NOT NULL DEFAULT FALSE; + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20210106163812_DuendePostgreSqlConfigurationMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +CREATE TABLE "IdentityProviders" ( + "Id" serial NOT NULL, + "Scheme" character varying(200) NOT NULL, + "DisplayName" character varying(200), + "Enabled" boolean NOT NULL, + "Type" character varying(20) NOT NULL, + "Properties" text, + CONSTRAINT "PK_IdentityProviders" PRIMARY KEY ("Id") +); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20210602105114_IdentityProvidersPostgreSqlConfigurationMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +DROP INDEX "IX_IdentityResourceProperties_IdentityResourceId"; + +DROP INDEX "IX_IdentityResourceClaims_IdentityResourceId"; + +DROP INDEX "IX_ClientScopes_ClientId"; + +DROP INDEX "IX_ClientRedirectUris_ClientId"; + +DROP INDEX "IX_ClientProperties_ClientId"; + +DROP INDEX "IX_ClientPostLogoutRedirectUris_ClientId"; + +DROP INDEX "IX_ClientIdPRestrictions_ClientId"; + +DROP INDEX "IX_ClientGrantTypes_ClientId"; + +DROP INDEX "IX_ClientCorsOrigins_ClientId"; + +DROP INDEX "IX_ClientClaims_ClientId"; + +DROP INDEX "IX_ApiScopeProperties_ScopeId"; + +DROP INDEX "IX_ApiScopeClaims_ScopeId"; + +DROP INDEX "IX_ApiResourceScopes_ApiResourceId"; + +DROP INDEX "IX_ApiResourceProperties_ApiResourceId"; + +DROP INDEX "IX_ApiResourceClaims_ApiResourceId"; + +ALTER TABLE "IdentityResources" ALTER COLUMN "Updated" TYPE timestamp with time zone; + +ALTER TABLE "IdentityResources" ALTER COLUMN "Created" TYPE timestamp with time zone; + +ALTER TABLE "IdentityProviders" ADD "Created" timestamp with time zone NOT NULL DEFAULT TIMESTAMPTZ '-infinity'; + +ALTER TABLE "IdentityProviders" ADD "LastAccessed" timestamp with time zone; + +ALTER TABLE "IdentityProviders" ADD "NonEditable" boolean NOT NULL DEFAULT FALSE; + +ALTER TABLE "IdentityProviders" ADD "Updated" timestamp with time zone; + +ALTER TABLE "ClientSecrets" ALTER COLUMN "Expiration" TYPE timestamp with time zone; + +ALTER TABLE "ClientSecrets" ALTER COLUMN "Created" TYPE timestamp with time zone; + +ALTER TABLE "Clients" ALTER COLUMN "Updated" TYPE timestamp with time zone; + +ALTER TABLE "Clients" ALTER COLUMN "LastAccessed" TYPE timestamp with time zone; + +ALTER TABLE "Clients" ALTER COLUMN "Created" TYPE timestamp with time zone; + +ALTER TABLE "Clients" ADD "CibaLifetime" integer; + +ALTER TABLE "Clients" ADD "PollingInterval" integer; + +ALTER TABLE "ClientRedirectUris" ALTER COLUMN "RedirectUri" TYPE character varying(400); + +ALTER TABLE "ClientPostLogoutRedirectUris" ALTER COLUMN "PostLogoutRedirectUri" TYPE character varying(400); + +ALTER TABLE "ApiScopes" ADD "Created" timestamp with time zone NOT NULL DEFAULT TIMESTAMPTZ '-infinity'; + +ALTER TABLE "ApiScopes" ADD "LastAccessed" timestamp with time zone; + +ALTER TABLE "ApiScopes" ADD "NonEditable" boolean NOT NULL DEFAULT FALSE; + +ALTER TABLE "ApiScopes" ADD "Updated" timestamp with time zone; + +ALTER TABLE "ApiResourceSecrets" ALTER COLUMN "Expiration" TYPE timestamp with time zone; + +ALTER TABLE "ApiResourceSecrets" ALTER COLUMN "Created" TYPE timestamp with time zone; + +ALTER TABLE "ApiResources" ALTER COLUMN "Updated" TYPE timestamp with time zone; + +ALTER TABLE "ApiResources" ALTER COLUMN "LastAccessed" TYPE timestamp with time zone; + +ALTER TABLE "ApiResources" ALTER COLUMN "Created" TYPE timestamp with time zone; + +CREATE UNIQUE INDEX "IX_IdentityResourceProperties_IdentityResourceId_Key" ON "IdentityResourceProperties" ("IdentityResourceId", "Key"); + +CREATE UNIQUE INDEX "IX_IdentityResourceClaims_IdentityResourceId_Type" ON "IdentityResourceClaims" ("IdentityResourceId", "Type"); + +CREATE UNIQUE INDEX "IX_IdentityProviders_Scheme" ON "IdentityProviders" ("Scheme"); + +CREATE UNIQUE INDEX "IX_ClientScopes_ClientId_Scope" ON "ClientScopes" ("ClientId", "Scope"); + +CREATE UNIQUE INDEX "IX_ClientRedirectUris_ClientId_RedirectUri" ON "ClientRedirectUris" ("ClientId", "RedirectUri"); + +CREATE UNIQUE INDEX "IX_ClientProperties_ClientId_Key" ON "ClientProperties" ("ClientId", "Key"); + +CREATE UNIQUE INDEX "IX_ClientPostLogoutRedirectUris_ClientId_PostLogoutRedirectUri" ON "ClientPostLogoutRedirectUris" ("ClientId", "PostLogoutRedirectUri"); + +CREATE UNIQUE INDEX "IX_ClientIdPRestrictions_ClientId_Provider" ON "ClientIdPRestrictions" ("ClientId", "Provider"); + +CREATE UNIQUE INDEX "IX_ClientGrantTypes_ClientId_GrantType" ON "ClientGrantTypes" ("ClientId", "GrantType"); + +CREATE UNIQUE INDEX "IX_ClientCorsOrigins_ClientId_Origin" ON "ClientCorsOrigins" ("ClientId", "Origin"); + +CREATE UNIQUE INDEX "IX_ClientClaims_ClientId_Type_Value" ON "ClientClaims" ("ClientId", "Type", "Value"); + +CREATE UNIQUE INDEX "IX_ApiScopeProperties_ScopeId_Key" ON "ApiScopeProperties" ("ScopeId", "Key"); + +CREATE UNIQUE INDEX "IX_ApiScopeClaims_ScopeId_Type" ON "ApiScopeClaims" ("ScopeId", "Type"); + +CREATE UNIQUE INDEX "IX_ApiResourceScopes_ApiResourceId_Scope" ON "ApiResourceScopes" ("ApiResourceId", "Scope"); + +CREATE UNIQUE INDEX "IX_ApiResourceProperties_ApiResourceId_Key" ON "ApiResourceProperties" ("ApiResourceId", "Key"); + +CREATE UNIQUE INDEX "IX_ApiResourceClaims_ApiResourceId_Type" ON "ApiResourceClaims" ("ApiResourceId", "Type"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20220104130806_DuendeV6PostgreSqlConfigurationMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +ALTER TABLE "Clients" ADD "CoordinateLifetimeWithUserSession" boolean; + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20220608093254_Duende61ConfigurationUpdate', '10.0.11'); + +COMMIT; + +START TRANSACTION; +ALTER TABLE "Clients" ADD "DPoPClockSkew" interval NOT NULL DEFAULT INTERVAL '00:00:00'; + +ALTER TABLE "Clients" ADD "DPoPValidationMode" integer NOT NULL DEFAULT 0; + +ALTER TABLE "Clients" ADD "InitiateLoginUri" character varying(2000); + +ALTER TABLE "Clients" ADD "RequireDPoP" boolean NOT NULL DEFAULT FALSE; + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20230620154509_Duende63ConfigurationUpdate', '10.0.11'); + +COMMIT; + +START TRANSACTION; +ALTER TABLE "Clients" ADD "PushedAuthorizationLifetime" integer; + +ALTER TABLE "Clients" ADD "RequirePushedAuthorization" boolean NOT NULL DEFAULT FALSE; + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20240105112808_DuendeV7PostgreSqlConfigurationMigration', '10.0.11'); + +COMMIT; + diff --git a/Complete migrations (up to v13.1)/PostgreSql/ExtendedConfiguration.sql b/Complete migrations (up to v13.1)/PostgreSql/ExtendedConfiguration.sql new file mode 100644 index 0000000..d97a739 --- /dev/null +++ b/Complete migrations (up to v13.1)/PostgreSql/ExtendedConfiguration.sql @@ -0,0 +1,101 @@ +-- This set of migrations are dependent on Configuration tables from IdentityServer already existing run ./Configuration.sql script first + +CREATE TABLE IF NOT EXISTS "__EFMigrationsHistory" ( + "MigrationId" character varying(150) NOT NULL, + "ProductVersion" character varying(32) NOT NULL, + CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY ("MigrationId") +); + +START TRANSACTION; +CREATE TABLE "ExtendedApiResources" ( + "Id" text NOT NULL, + "ApiResourceName" varchar(200) NOT NULL, + "NormalizedName" varchar(200) NOT NULL, + "Reserved" bool NOT NULL, + CONSTRAINT "PK_ExtendedApiResources" PRIMARY KEY ("Id") +); + +CREATE TABLE "ExtendedClients" ( + "Id" text NOT NULL, + "ClientId" varchar(200) NOT NULL, + "Description" text, + "NormalizedClientId" varchar(200) NOT NULL, + "NormalizedClientName" varchar(200), + "Reserved" bool NOT NULL, + CONSTRAINT "PK_ExtendedClients" PRIMARY KEY ("Id") +); + +CREATE TABLE "ExtendedIdentityResources" ( + "Id" text NOT NULL, + "IdentityResourceName" varchar(200) NOT NULL, + "NormalizedName" varchar(200) NOT NULL, + "Reserved" bool NOT NULL, + CONSTRAINT "PK_ExtendedIdentityResources" PRIMARY KEY ("Id") +); + +CREATE UNIQUE INDEX "ApiNameIndex" ON "ExtendedApiResources" ("ApiResourceName"); + +CREATE UNIQUE INDEX "ApiResourceNameIndex" ON "ExtendedApiResources" ("NormalizedName"); + +CREATE UNIQUE INDEX "IdIndex" ON "ExtendedClients" ("ClientId"); + +CREATE UNIQUE INDEX "ClientIdIndex" ON "ExtendedClients" ("NormalizedClientId"); + +CREATE UNIQUE INDEX "ClientNameIndex" ON "ExtendedClients" ("NormalizedClientName"); + +CREATE UNIQUE INDEX "IdentityNameIndex" ON "ExtendedIdentityResources" ("IdentityResourceName"); + +CREATE UNIQUE INDEX "IdentityResourceNameIndex" ON "ExtendedIdentityResources" ("NormalizedName"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20171026082855_InitialPostgreSqlExtendedConfigurationDbMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20171122163921_UserSearchOptimizationExtendedConfigurationDbMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +CREATE TABLE "ConfigurationEntries" ( + "Key" text NOT NULL, + "Value" text, + CONSTRAINT "PK_ConfigurationEntries" PRIMARY KEY ("Key") +); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20180724143733_ConfigurationEntries', '10.0.11'); + +COMMIT; + +START TRANSACTION; +UPDATE "Clients" + SET "NonEditable" = "Reserved" + From "ExtendedClients" + WHERE "Clients"."ClientId" = "ExtendedClients"."ClientId"; + +UPDATE "ApiResources" + SET "NonEditable" = "Reserved" + From "ExtendedApiResources" + WHERE "ApiResources"."Name" = "ExtendedApiResources"."ApiResourceName"; + +UPDATE "IdentityResources" + SET "NonEditable" = "Reserved" + From "ExtendedIdentityResources" + WHERE "IdentityResources"."Name" = "ExtendedIdentityResources"."IdentityResourceName"; + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20181205165028_ExtendedDataMigration2.3', '10.0.11'); + +COMMIT; + +START TRANSACTION; +ALTER TABLE "ExtendedClients" ADD "ClientType" integer; + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20190401105052_ClientType', '10.0.11'); + +COMMIT; + diff --git a/Complete migrations (up to v13.1)/PostgreSql/Identity.sql b/Complete migrations (up to v13.1)/PostgreSql/Identity.sql new file mode 100644 index 0000000..fecf458 --- /dev/null +++ b/Complete migrations (up to v13.1)/PostgreSql/Identity.sql @@ -0,0 +1,189 @@ +CREATE TABLE IF NOT EXISTS "__EFMigrationsHistory" ( + "MigrationId" character varying(150) NOT NULL, + "ProductVersion" character varying(32) NOT NULL, + CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY ("MigrationId") +); + +START TRANSACTION; +CREATE TABLE "AspNetClaimTypes" ( + "Id" text NOT NULL, + "ConcurrencyStamp" text, + "Description" text, + "Name" varchar(256) NOT NULL, + "NormalizedName" varchar(256), + "Required" bool NOT NULL, + "Reserved" bool NOT NULL, + "Rule" text, + "RuleValidationFailureDescription" text, + "UserEditable" bool NOT NULL DEFAULT FALSE, + "ValueType" int4 NOT NULL, + CONSTRAINT "PK_AspNetClaimTypes" PRIMARY KEY ("Id"), + CONSTRAINT "AK_AspNetClaimTypes_Name" UNIQUE ("Name") +); + +CREATE TABLE "AspNetRoles" ( + "Id" text NOT NULL, + "ConcurrencyStamp" text, + "Description" text, + "Name" varchar(256), + "NormalizedName" varchar(256), + "Reserved" bool NOT NULL, + CONSTRAINT "PK_AspNetRoles" PRIMARY KEY ("Id") +); + +CREATE TABLE "AspNetUsers" ( + "Id" text NOT NULL, + "AccessFailedCount" int4 NOT NULL, + "ConcurrencyStamp" text, + "Email" varchar(256), + "EmailConfirmed" bool NOT NULL, + "FirstName" text, + "IsBlocked" bool NOT NULL, + "IsDeleted" bool NOT NULL, + "LastName" text, + "LockoutEnabled" bool NOT NULL, + "LockoutEnd" timestamptz, + "NormalizedEmail" varchar(256), + "NormalizedUserName" varchar(256), + "PasswordHash" text, + "PhoneNumber" text, + "PhoneNumberConfirmed" bool NOT NULL, + "SecurityStamp" text, + "TwoFactorEnabled" bool NOT NULL, + "UserName" varchar(256), + CONSTRAINT "PK_AspNetUsers" PRIMARY KEY ("Id") +); + +CREATE TABLE "AspNetRoleClaims" ( + "Id" serial NOT NULL, + "ClaimType" text, + "ClaimValue" text, + "RoleId" text NOT NULL, + CONSTRAINT "PK_AspNetRoleClaims" PRIMARY KEY ("Id"), + CONSTRAINT "FK_AspNetRoleClaims_AspNetRoles_RoleId" FOREIGN KEY ("RoleId") REFERENCES "AspNetRoles" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "AspNetUserClaims" ( + "Id" serial NOT NULL, + "ClaimType" varchar(256) NOT NULL, + "ClaimValue" text, + "UserId" text NOT NULL, + CONSTRAINT "PK_AspNetUserClaims" PRIMARY KEY ("Id"), + CONSTRAINT "FK_AspNetUserClaims_AspNetClaimTypes_ClaimType" FOREIGN KEY ("ClaimType") REFERENCES "AspNetClaimTypes" ("Name") ON DELETE CASCADE, + CONSTRAINT "FK_AspNetUserClaims_AspNetUsers_UserId" FOREIGN KEY ("UserId") REFERENCES "AspNetUsers" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "AspNetUserLogins" ( + "LoginProvider" text NOT NULL, + "ProviderKey" text NOT NULL, + "ProviderDisplayName" text, + "UserId" text NOT NULL, + CONSTRAINT "PK_AspNetUserLogins" PRIMARY KEY ("LoginProvider", "ProviderKey"), + CONSTRAINT "FK_AspNetUserLogins_AspNetUsers_UserId" FOREIGN KEY ("UserId") REFERENCES "AspNetUsers" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "AspNetUserRoles" ( + "UserId" text NOT NULL, + "RoleId" text NOT NULL, + CONSTRAINT "PK_AspNetUserRoles" PRIMARY KEY ("UserId", "RoleId"), + CONSTRAINT "FK_AspNetUserRoles_AspNetRoles_RoleId" FOREIGN KEY ("RoleId") REFERENCES "AspNetRoles" ("Id") ON DELETE CASCADE, + CONSTRAINT "FK_AspNetUserRoles_AspNetUsers_UserId" FOREIGN KEY ("UserId") REFERENCES "AspNetUsers" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "AspNetUserTokens" ( + "UserId" text NOT NULL, + "LoginProvider" text NOT NULL, + "Name" text NOT NULL, + "Value" text, + CONSTRAINT "PK_AspNetUserTokens" PRIMARY KEY ("UserId", "LoginProvider", "Name"), + CONSTRAINT "FK_AspNetUserTokens_AspNetUsers_UserId" FOREIGN KEY ("UserId") REFERENCES "AspNetUsers" ("Id") ON DELETE CASCADE +); + +CREATE UNIQUE INDEX "ClaimTypeNameIndex" ON "AspNetClaimTypes" ("NormalizedName"); + +CREATE INDEX "IX_AspNetRoleClaims_RoleId" ON "AspNetRoleClaims" ("RoleId"); + +CREATE UNIQUE INDEX "RoleNameIndex" ON "AspNetRoles" ("NormalizedName"); + +CREATE INDEX "IX_AspNetUserClaims_ClaimType" ON "AspNetUserClaims" ("ClaimType"); + +CREATE INDEX "IX_AspNetUserClaims_UserId" ON "AspNetUserClaims" ("UserId"); + +CREATE INDEX "IX_AspNetUserLogins_UserId" ON "AspNetUserLogins" ("UserId"); + +CREATE INDEX "IX_AspNetUserRoles_RoleId" ON "AspNetUserRoles" ("RoleId"); + +CREATE INDEX "EmailIndex" ON "AspNetUsers" ("NormalizedEmail"); + +CREATE UNIQUE INDEX "UserNameIndex" ON "AspNetUsers" ("NormalizedUserName"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20171026081544_InitialPostgreSqlIdentityDbMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +ALTER TABLE "AspNetUsers" ADD "NormalizedFirstName" character varying(256); + +ALTER TABLE "AspNetUsers" ADD "NormalizedLastName" character varying(256); + +CREATE INDEX "FirstNameIndex" ON "AspNetUsers" ("NormalizedFirstName"); + +CREATE INDEX "LastNameIndex" ON "AspNetUsers" ("NormalizedLastName"); + +CREATE INDEX "CountIndex" ON "AspNetUsers" ("IsBlocked", "IsDeleted"); + +CREATE INDEX "CountIndexReversed" ON "AspNetUsers" ("IsDeleted", "IsBlocked"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20171122162832_UserSearchOptimizationMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +CREATE TABLE "EnumClaimTypeAllowedValues" ( + "ClaimTypeId" text NOT NULL, + "Value" text NOT NULL, + CONSTRAINT "PK_EnumClaimTypeAllowedValues" PRIMARY KEY ("ClaimTypeId", "Value"), + CONSTRAINT "FK_EnumClaimTypeAllowedValues_AspNetClaimTypes_ClaimTypeId" FOREIGN KEY ("ClaimTypeId") REFERENCES "AspNetClaimTypes" ("Id") ON DELETE CASCADE +); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20210430142540_EnumeratedClaimTypeMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +ALTER TABLE "AspNetClaimTypes" ADD "DisplayName" text; + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20220112114931_ClaimTypeDisplayNameMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +ALTER TABLE "AspNetUserTokens" ALTER COLUMN "Name" TYPE character varying(128); + +ALTER TABLE "AspNetUserTokens" ALTER COLUMN "LoginProvider" TYPE character varying(128); + +ALTER TABLE "AspNetUsers" ALTER COLUMN "PhoneNumber" TYPE character varying(256); + +ALTER TABLE "AspNetUserLogins" ALTER COLUMN "ProviderKey" TYPE character varying(128); + +ALTER TABLE "AspNetUserLogins" ALTER COLUMN "LoginProvider" TYPE character varying(128); + +CREATE TABLE "AspNetUserPasskeys" ( + "CredentialId" bytea NOT NULL, + "UserId" text NOT NULL, + "Data" jsonb NOT NULL, + CONSTRAINT "PK_AspNetUserPasskeys" PRIMARY KEY ("CredentialId"), + CONSTRAINT "FK_AspNetUserPasskeys_AspNetUsers_UserId" FOREIGN KEY ("UserId") REFERENCES "AspNetUsers" ("Id") ON DELETE CASCADE +); + +CREATE INDEX "IX_AspNetUserPasskeys_UserId" ON "AspNetUserPasskeys" ("UserId"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20260618111304_Passkeys', '10.0.11'); + +COMMIT; + diff --git a/Complete migrations (up to v13.1)/PostgreSql/Operational.sql b/Complete migrations (up to v13.1)/PostgreSql/Operational.sql new file mode 100644 index 0000000..99fc875 --- /dev/null +++ b/Complete migrations (up to v13.1)/PostgreSql/Operational.sql @@ -0,0 +1,198 @@ +CREATE TABLE IF NOT EXISTS "__EFMigrationsHistory" ( + "MigrationId" character varying(150) NOT NULL, + "ProductVersion" character varying(32) NOT NULL, + CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY ("MigrationId") +); + +START TRANSACTION; +CREATE TABLE "PersistedGrants" ( + "Key" varchar(200) NOT NULL, + "ClientId" varchar(200) NOT NULL, + "CreationTime" timestamp NOT NULL, + "Data" varchar(50000) NOT NULL, + "Expiration" timestamp, + "SubjectId" varchar(200), + "Type" varchar(50) NOT NULL, + CONSTRAINT "PK_PersistedGrants" PRIMARY KEY ("Key") +); + +CREATE INDEX "IX_PersistedGrants_SubjectId_ClientId_Type" ON "PersistedGrants" ("SubjectId", "ClientId", "Type"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20171026082436_InitialPostgreSqlOperationalDbMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20171122163955_UserSearchOptimizationOperationalDbMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +CREATE TABLE "DeviceCodes" ( + "DeviceCode" character varying(200) NOT NULL, + "UserCode" character varying(200) NOT NULL, + "SubjectId" character varying(200), + "ClientId" character varying(200) NOT NULL, + "CreationTime" timestamp with time zone NOT NULL, + "Expiration" timestamp with time zone NOT NULL, + "Data" character varying(50000) NOT NULL, + CONSTRAINT "PK_DeviceCodes" PRIMARY KEY ("UserCode") +); + +CREATE UNIQUE INDEX "IX_DeviceCodes_DeviceCode" ON "DeviceCodes" ("DeviceCode"); + +CREATE UNIQUE INDEX "IX_DeviceCodes_UserCode" ON "DeviceCodes" ("UserCode"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20181112154906_IdentityServer2.3PostgreSqlOperationalDbMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +-- Alter Existing Tables + +-- DeviceCodes + +ALTER TABLE "DeviceCodes" + ADD "SessionId" character varying(100) NULL; + +ALTER TABLE "DeviceCodes" + ADD "Description" character varying(200) NULL; + + + +-- PersistedGrants + +ALTER TABLE "PersistedGrants" + ADD "SessionId" character varying(100) NULL; + +ALTER TABLE "PersistedGrants" + ADD "Description" character varying(200) NULL; + +ALTER TABLE "PersistedGrants" + ADD "ConsumedTime" timestamp without time zone NULL; + +CREATE INDEX "IX_PersistedGrants_SubjectId_SessionId_Type" ON "PersistedGrants" ("SubjectId", "SessionId", "Type"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20200702113344_V3toV4PostgreSqlOperationalDbMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +CREATE TABLE "Keys" ( + "Id" text NOT NULL, + "Version" integer NOT NULL, + "Created" timestamp without time zone NOT NULL, + "Use" text, + "Algorithm" character varying(100) NOT NULL, + "IsX509Certificate" boolean NOT NULL, + "DataProtected" boolean NOT NULL, + "Data" text NOT NULL, + CONSTRAINT "PK_Keys" PRIMARY KEY ("Id") +); + +CREATE INDEX "IX_Keys_Use" ON "Keys" ("Use"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20210106150433_DuendePostgreSqlOperationalMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +CREATE INDEX "IX_PersistedGrants_ConsumedTime" ON "PersistedGrants" ("ConsumedTime"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20210602110147_PersistedGrantConsumeTimePostgreSqlOperationalMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +ALTER TABLE "PersistedGrants" DROP CONSTRAINT "PK_PersistedGrants"; + +ALTER TABLE "PersistedGrants" ALTER COLUMN "Expiration" TYPE timestamp with time zone; + +ALTER TABLE "PersistedGrants" ALTER COLUMN "CreationTime" TYPE timestamp with time zone; + +ALTER TABLE "PersistedGrants" ALTER COLUMN "ConsumedTime" TYPE timestamp with time zone; + +ALTER TABLE "PersistedGrants" ALTER COLUMN "Key" DROP NOT NULL; + +ALTER TABLE "PersistedGrants" ADD "Id" bigserial NOT NULL; + +ALTER TABLE "Keys" ALTER COLUMN "Created" TYPE timestamp with time zone; + +ALTER TABLE "DeviceCodes" ALTER COLUMN "Expiration" TYPE timestamp with time zone; + +ALTER TABLE "DeviceCodes" ALTER COLUMN "CreationTime" TYPE timestamp with time zone; + +ALTER TABLE "PersistedGrants" ADD CONSTRAINT "PK_PersistedGrants" PRIMARY KEY ("Id"); + +CREATE TABLE "ServerSideSessions" ( + "Id" serial NOT NULL, + "Key" character varying(100) NOT NULL, + "Scheme" character varying(100) NOT NULL, + "SubjectId" character varying(100) NOT NULL, + "SessionId" character varying(100), + "DisplayName" character varying(100), + "Created" timestamp with time zone NOT NULL, + "Renewed" timestamp with time zone NOT NULL, + "Expires" timestamp with time zone, + "Data" text NOT NULL, + CONSTRAINT "PK_ServerSideSessions" PRIMARY KEY ("Id") +); + +CREATE UNIQUE INDEX "IX_PersistedGrants_Key" ON "PersistedGrants" ("Key"); + +CREATE INDEX "IX_ServerSideSessions_DisplayName" ON "ServerSideSessions" ("DisplayName"); + +CREATE INDEX "IX_ServerSideSessions_Expires" ON "ServerSideSessions" ("Expires"); + +CREATE UNIQUE INDEX "IX_ServerSideSessions_Key" ON "ServerSideSessions" ("Key"); + +CREATE INDEX "IX_ServerSideSessions_SessionId" ON "ServerSideSessions" ("SessionId"); + +CREATE INDEX "IX_ServerSideSessions_SubjectId" ON "ServerSideSessions" ("SubjectId"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20220608092054_Duende61Update', '10.0.11'); + +COMMIT; + +START TRANSACTION; +ALTER TABLE "ServerSideSessions" ALTER COLUMN "Id" TYPE bigint; + +CREATE TABLE "PushedAuthorizationRequests" ( + "Id" bigserial NOT NULL, + "ReferenceValueHash" text, + "ExpiresAtUtc" timestamp with time zone NOT NULL, + "Parameters" text, + CONSTRAINT "PK_PushedAuthorizationRequests" PRIMARY KEY ("Id") +); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20240108113635_DuendeV7PostgreSqlOperationalMigration', '10.0.11'); + +COMMIT; + +START TRANSACTION; +ALTER TABLE "PushedAuthorizationRequests" ALTER COLUMN "ReferenceValueHash" TYPE character varying(64); +UPDATE "PushedAuthorizationRequests" SET "ReferenceValueHash" = '' WHERE "ReferenceValueHash" IS NULL; +ALTER TABLE "PushedAuthorizationRequests" ALTER COLUMN "ReferenceValueHash" SET NOT NULL; +ALTER TABLE "PushedAuthorizationRequests" ALTER COLUMN "ReferenceValueHash" SET DEFAULT ''; + +UPDATE "PushedAuthorizationRequests" SET "Parameters" = '' WHERE "Parameters" IS NULL; +ALTER TABLE "PushedAuthorizationRequests" ALTER COLUMN "Parameters" SET NOT NULL; +ALTER TABLE "PushedAuthorizationRequests" ALTER COLUMN "Parameters" SET DEFAULT ''; + +CREATE INDEX "IX_PushedAuthorizationRequests_ExpiresAtUtc" ON "PushedAuthorizationRequests" ("ExpiresAtUtc"); + +CREATE UNIQUE INDEX "IX_PushedAuthorizationRequests_ReferenceValueHash" ON "PushedAuthorizationRequests" ("ReferenceValueHash"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20250121150607_DuendeV7.1PostgreSqlOperationalMigration', '10.0.11'); + +COMMIT; + diff --git a/Complete migrations (up to v13.1)/PostgreSql/SamlArtifact.sql b/Complete migrations (up to v13.1)/PostgreSql/SamlArtifact.sql new file mode 100644 index 0000000..f083ea1 --- /dev/null +++ b/Complete migrations (up to v13.1)/PostgreSql/SamlArtifact.sql @@ -0,0 +1,24 @@ +CREATE TABLE IF NOT EXISTS "__EFMigrationsHistory" ( + "MigrationId" character varying(150) NOT NULL, + "ProductVersion" character varying(32) NOT NULL, + CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY ("MigrationId") +); + +START TRANSACTION; +CREATE TABLE "SamlArtifacts" ( + "Key" character varying(200) NOT NULL, + "EntityId" character varying(200) NOT NULL, + "MessageType" character varying(50) NOT NULL, + "Message" character varying(50000) NOT NULL, + "CreationTime" timestamp with time zone NOT NULL, + "Expiration" timestamp with time zone NOT NULL, + CONSTRAINT "PK_SamlArtifacts" PRIMARY KEY ("Key") +); + +CREATE INDEX "IX_SamlArtifacts_Expiration" ON "SamlArtifacts" ("Expiration"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20220114164545_PostgreSqlSamlArtifactInitialMigration', '10.0.11'); + +COMMIT; + diff --git a/Complete migrations (up to v13.1)/PostgreSql/SamlConfiguration.sql b/Complete migrations (up to v13.1)/PostgreSql/SamlConfiguration.sql new file mode 100644 index 0000000..5190169 --- /dev/null +++ b/Complete migrations (up to v13.1)/PostgreSql/SamlConfiguration.sql @@ -0,0 +1,116 @@ +CREATE TABLE IF NOT EXISTS "__EFMigrationsHistory" ( + "MigrationId" character varying(150) NOT NULL, + "ProductVersion" character varying(32) NOT NULL, + CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY ("MigrationId") +); + +START TRANSACTION; +CREATE TABLE "ServiceProviders" ( + "Id" serial NOT NULL, + "EntityId" character varying(200) NOT NULL, + "EncryptionCertificate" bytea, + "SignAssertions" boolean NOT NULL, + "EncryptAssertions" boolean NOT NULL, + "RequireSamlRequestDestination" boolean NOT NULL, + CONSTRAINT "PK_ServiceProviders" PRIMARY KEY ("Id") +); + +CREATE TABLE "ServiceProviderAssertionConsumerServices" ( + "Id" serial NOT NULL, + "Binding" character varying(2000) NOT NULL, + "Location" character varying(2000) NOT NULL, + "Index" integer NOT NULL, + "IsDefault" boolean NOT NULL, + "ServiceProviderId" integer NOT NULL, + CONSTRAINT "PK_ServiceProviderAssertionConsumerServices" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ServiceProviderAssertionConsumerServices_ServiceProviders_S~" FOREIGN KEY ("ServiceProviderId") REFERENCES "ServiceProviders" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "ServiceProviderClaimMappings" ( + "Id" serial NOT NULL, + "OriginalClaimType" character varying(250) NOT NULL, + "NewClaimType" character varying(250) NOT NULL, + "ServiceProviderId" integer NOT NULL, + CONSTRAINT "PK_ServiceProviderClaimMappings" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ServiceProviderClaimMappings_ServiceProviders_ServiceProvid~" FOREIGN KEY ("ServiceProviderId") REFERENCES "ServiceProviders" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "ServiceProviderSignCertificates" ( + "Id" serial NOT NULL, + "Certificate" bytea NOT NULL, + "ServiceProviderId" integer NOT NULL, + CONSTRAINT "PK_ServiceProviderSignCertificates" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ServiceProviderSignCertificates_ServiceProviders_ServicePro~" FOREIGN KEY ("ServiceProviderId") REFERENCES "ServiceProviders" ("Id") ON DELETE CASCADE +); + +CREATE TABLE "ServiceProviderSingleLogoutServices" ( + "Id" serial NOT NULL, + "Binding" character varying(2000) NOT NULL, + "Location" character varying(2000) NOT NULL, + "Index" integer NOT NULL, + "IsDefault" boolean NOT NULL, + "ServiceProviderId" integer NOT NULL, + CONSTRAINT "PK_ServiceProviderSingleLogoutServices" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ServiceProviderSingleLogoutServices_ServiceProviders_Servic~" FOREIGN KEY ("ServiceProviderId") REFERENCES "ServiceProviders" ("Id") ON DELETE CASCADE +); + +CREATE INDEX "IX_ServiceProviderAssertionConsumerServices_ServiceProviderId" ON "ServiceProviderAssertionConsumerServices" ("ServiceProviderId"); + +CREATE INDEX "IX_ServiceProviderClaimMappings_ServiceProviderId" ON "ServiceProviderClaimMappings" ("ServiceProviderId"); + +CREATE UNIQUE INDEX "IX_ServiceProviders_EntityId" ON "ServiceProviders" ("EntityId"); + +CREATE INDEX "IX_ServiceProviderSignCertificates_ServiceProviderId" ON "ServiceProviderSignCertificates" ("ServiceProviderId"); + +CREATE INDEX "IX_ServiceProviderSingleLogoutServices_ServiceProviderId" ON "ServiceProviderSingleLogoutServices" ("ServiceProviderId"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20190305133319_PostgreSqlSaml2PInitial', '10.0.11'); + +COMMIT; + +START TRANSACTION; +ALTER TABLE "ServiceProviders" ADD "AllowIdpInitiatedSso" boolean NOT NULL DEFAULT FALSE; + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20200225104719_Added AllowIdpInitiatedSso', '10.0.11'); + +COMMIT; + +START TRANSACTION; +ALTER TABLE "ServiceProviders" ADD "RequireAuthenticationRequestsSigned" boolean; + +ALTER TABLE "ServiceProviders" RENAME COLUMN "RequireSamlRequestDestination" TO "RequireSamlMessageDestination"; + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20200914074950_RskSamlV3', '10.0.11'); + +COMMIT; + +START TRANSACTION; +ALTER TABLE "ServiceProviders" ADD "ArtifactDeliveryBindingType" text; + +ALTER TABLE "ServiceProviders" ADD "NameIdentifierFormat" text; + +ALTER TABLE "ServiceProviders" ADD "RequireSignedArtifactResolveRequests" boolean; + +ALTER TABLE "ServiceProviders" ADD "RequireSignedArtifactResponses" boolean; + +CREATE TABLE "ServiceProviderArtifactResolutionServices" ( + "Id" serial NOT NULL, + "Binding" character varying(2000) NOT NULL, + "Location" character varying(2000) NOT NULL, + "Index" integer NOT NULL, + "IsDefault" boolean NOT NULL, + "ServiceProviderId" integer NOT NULL, + CONSTRAINT "PK_ServiceProviderArtifactResolutionServices" PRIMARY KEY ("Id"), + CONSTRAINT "FK_ServiceProviderArtifactResolutionServices_ServiceProviders_~" FOREIGN KEY ("ServiceProviderId") REFERENCES "ServiceProviders" ("Id") ON DELETE CASCADE +); + +CREATE INDEX "IX_ServiceProviderArtifactResolutionServices_ServiceProviderId" ON "ServiceProviderArtifactResolutionServices" ("ServiceProviderId"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20220128115407_RskSamlPackageUpdate', '10.0.11'); + +COMMIT; + diff --git a/Complete migrations (up to v13.1)/PostgreSql/WsFederationConfiguration.sql b/Complete migrations (up to v13.1)/PostgreSql/WsFederationConfiguration.sql new file mode 100644 index 0000000..6fdde25 --- /dev/null +++ b/Complete migrations (up to v13.1)/PostgreSql/WsFederationConfiguration.sql @@ -0,0 +1,35 @@ +CREATE TABLE IF NOT EXISTS "__EFMigrationsHistory" ( + "MigrationId" character varying(150) NOT NULL, + "ProductVersion" character varying(32) NOT NULL, + CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY ("MigrationId") +); + +START TRANSACTION; +CREATE TABLE "RelyingParties" ( + "Id" serial NOT NULL, + "Realm" character varying(200) NOT NULL, + "TokenType" text, + "SignatureAlgorithm" text, + "DigestAlgorithm" text, + "SamlNameIdentifierFormat" text, + CONSTRAINT "PK_RelyingParties" PRIMARY KEY ("Id") +); + +CREATE TABLE "RelyingPartyClaimMappings" ( + "Id" serial NOT NULL, + "OriginalClaimType" character varying(250) NOT NULL, + "NewClaimType" character varying(250) NOT NULL, + "RelyingPartyId" integer NOT NULL, + CONSTRAINT "PK_RelyingPartyClaimMappings" PRIMARY KEY ("Id"), + CONSTRAINT "FK_RelyingPartyClaimMappings_RelyingParties_RelyingPartyId" FOREIGN KEY ("RelyingPartyId") REFERENCES "RelyingParties" ("Id") ON DELETE CASCADE +); + +CREATE UNIQUE INDEX "IX_RelyingParties_Realm" ON "RelyingParties" ("Realm"); + +CREATE INDEX "IX_RelyingPartyClaimMappings_RelyingPartyId" ON "RelyingPartyClaimMappings" ("RelyingPartyId"); + +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") +VALUES ('20190305133422_PostgreSqlWsfederationInitial', '10.0.11'); + +COMMIT; + diff --git a/Complete migrations (up to v13.1)/SqlServer/Audit.sql b/Complete migrations (up to v13.1)/SqlServer/Audit.sql new file mode 100644 index 0000000..2722f12 --- /dev/null +++ b/Complete migrations (up to v13.1)/SqlServer/Audit.sql @@ -0,0 +1,39 @@ +IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL +BEGIN + CREATE TABLE [__EFMigrationsHistory] ( + [MigrationId] nvarchar(150) NOT NULL, + [ProductVersion] nvarchar(32) NOT NULL, + CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId]) + ); +END; +GO + +BEGIN TRANSACTION; +CREATE TABLE [AuditEntries] ( + [Id] bigint NOT NULL IDENTITY, + [When] datetime2 NOT NULL, + [Source] nvarchar(max) NULL, + [SubjectType] nvarchar(max) NULL, + [SubjectIdentifier] nvarchar(max) NULL, + [Subject] nvarchar(max) NULL, + [Action] nvarchar(max) NULL, + [ResourceType] nvarchar(max) NULL, + [Resource] nvarchar(max) NULL, + [ResourceIdentifier] nvarchar(max) NULL, + [Succeeded] bit NOT NULL, + [Description] nvarchar(max) NULL, + [NormalisedSubject] nvarchar(max) NULL, + [NormalisedAction] nvarchar(max) NULL, + [NormalisedResource] nvarchar(max) NULL, + [NormalisedSource] nvarchar(max) NULL, + CONSTRAINT [PK_AuditEntries] PRIMARY KEY ([Id]) +); + +CREATE INDEX [IX_AuditEntries_When] ON [AuditEntries] ([When]); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20181220155759_InitalSqlServerAuditDbMigration', N'10.0.11'); + +COMMIT; +GO + diff --git a/Complete migrations (up to v13.1)/SqlServer/Configuration.sql b/Complete migrations (up to v13.1)/SqlServer/Configuration.sql new file mode 100644 index 0000000..81b8440 --- /dev/null +++ b/Complete migrations (up to v13.1)/SqlServer/Configuration.sql @@ -0,0 +1,815 @@ +IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL +BEGIN + CREATE TABLE [__EFMigrationsHistory] ( + [MigrationId] nvarchar(150) NOT NULL, + [ProductVersion] nvarchar(32) NOT NULL, + CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId]) + ); +END; +GO + +BEGIN TRANSACTION; +CREATE TABLE [ApiResources] ( + [Id] int NOT NULL IDENTITY, + [Description] nvarchar(1000) NULL, + [DisplayName] nvarchar(200) NULL, + [Enabled] bit NOT NULL, + [Name] nvarchar(200) NOT NULL, + CONSTRAINT [PK_ApiResources] PRIMARY KEY ([Id]) +); + +CREATE TABLE [Clients] ( + [Id] int NOT NULL IDENTITY, + [AbsoluteRefreshTokenLifetime] int NOT NULL, + [AccessTokenLifetime] int NOT NULL, + [AccessTokenType] int NOT NULL, + [AllowAccessTokensViaBrowser] bit NOT NULL, + [AllowOfflineAccess] bit NOT NULL, + [AllowPlainTextPkce] bit NOT NULL, + [AllowRememberConsent] bit NOT NULL, + [AlwaysIncludeUserClaimsInIdToken] bit NOT NULL, + [AlwaysSendClientClaims] bit NOT NULL, + [AuthorizationCodeLifetime] int NOT NULL, + [BackChannelLogoutSessionRequired] bit NOT NULL, + [BackChannelLogoutUri] nvarchar(2000) NULL, + [ClientClaimsPrefix] nvarchar(200) NULL, + [ClientId] nvarchar(200) NOT NULL, + [ClientName] nvarchar(200) NULL, + [ClientUri] nvarchar(2000) NULL, + [ConsentLifetime] int NULL, + [Description] nvarchar(1000) NULL, + [EnableLocalLogin] bit NOT NULL, + [Enabled] bit NOT NULL, + [FrontChannelLogoutSessionRequired] bit NOT NULL, + [FrontChannelLogoutUri] nvarchar(2000) NULL, + [IdentityTokenLifetime] int NOT NULL, + [IncludeJwtId] bit NOT NULL, + [LogoUri] nvarchar(2000) NULL, + [PairWiseSubjectSalt] nvarchar(200) NULL, + [ProtocolType] nvarchar(200) NOT NULL, + [RefreshTokenExpiration] int NOT NULL, + [RefreshTokenUsage] int NOT NULL, + [RequireClientSecret] bit NOT NULL, + [RequireConsent] bit NOT NULL, + [RequirePkce] bit NOT NULL, + [SlidingRefreshTokenLifetime] int NOT NULL, + [UpdateAccessTokenClaimsOnRefresh] bit NOT NULL, + CONSTRAINT [PK_Clients] PRIMARY KEY ([Id]) +); + +CREATE TABLE [IdentityResources] ( + [Id] int NOT NULL IDENTITY, + [Description] nvarchar(1000) NULL, + [DisplayName] nvarchar(200) NULL, + [Emphasize] bit NOT NULL, + [Enabled] bit NOT NULL, + [Name] nvarchar(200) NOT NULL, + [Required] bit NOT NULL, + [ShowInDiscoveryDocument] bit NOT NULL, + CONSTRAINT [PK_IdentityResources] PRIMARY KEY ([Id]) +); + +CREATE TABLE [ApiClaims] ( + [Id] int NOT NULL IDENTITY, + [ApiResourceId] int NOT NULL, + [Type] nvarchar(200) NOT NULL, + CONSTRAINT [PK_ApiClaims] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ApiClaims_ApiResources_ApiResourceId] FOREIGN KEY ([ApiResourceId]) REFERENCES [ApiResources] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [ApiScopes] ( + [Id] int NOT NULL IDENTITY, + [ApiResourceId] int NOT NULL, + [Description] nvarchar(1000) NULL, + [DisplayName] nvarchar(200) NULL, + [Emphasize] bit NOT NULL, + [Name] nvarchar(200) NOT NULL, + [Required] bit NOT NULL, + [ShowInDiscoveryDocument] bit NOT NULL, + CONSTRAINT [PK_ApiScopes] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ApiScopes_ApiResources_ApiResourceId] FOREIGN KEY ([ApiResourceId]) REFERENCES [ApiResources] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [ApiSecrets] ( + [Id] int NOT NULL IDENTITY, + [ApiResourceId] int NOT NULL, + [Description] nvarchar(1000) NULL, + [Expiration] datetime2 NULL, + [Type] nvarchar(250) NULL, + [Value] nvarchar(2000) NULL, + CONSTRAINT [PK_ApiSecrets] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ApiSecrets_ApiResources_ApiResourceId] FOREIGN KEY ([ApiResourceId]) REFERENCES [ApiResources] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [ClientClaims] ( + [Id] int NOT NULL IDENTITY, + [ClientId] int NOT NULL, + [Type] nvarchar(250) NOT NULL, + [Value] nvarchar(250) NOT NULL, + CONSTRAINT [PK_ClientClaims] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ClientClaims_Clients_ClientId] FOREIGN KEY ([ClientId]) REFERENCES [Clients] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [ClientCorsOrigins] ( + [Id] int NOT NULL IDENTITY, + [ClientId] int NOT NULL, + [Origin] nvarchar(150) NOT NULL, + CONSTRAINT [PK_ClientCorsOrigins] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ClientCorsOrigins_Clients_ClientId] FOREIGN KEY ([ClientId]) REFERENCES [Clients] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [ClientGrantTypes] ( + [Id] int NOT NULL IDENTITY, + [ClientId] int NOT NULL, + [GrantType] nvarchar(250) NOT NULL, + CONSTRAINT [PK_ClientGrantTypes] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ClientGrantTypes_Clients_ClientId] FOREIGN KEY ([ClientId]) REFERENCES [Clients] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [ClientIdPRestrictions] ( + [Id] int NOT NULL IDENTITY, + [ClientId] int NOT NULL, + [Provider] nvarchar(200) NOT NULL, + CONSTRAINT [PK_ClientIdPRestrictions] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ClientIdPRestrictions_Clients_ClientId] FOREIGN KEY ([ClientId]) REFERENCES [Clients] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [ClientPostLogoutRedirectUris] ( + [Id] int NOT NULL IDENTITY, + [ClientId] int NOT NULL, + [PostLogoutRedirectUri] nvarchar(2000) NOT NULL, + CONSTRAINT [PK_ClientPostLogoutRedirectUris] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ClientPostLogoutRedirectUris_Clients_ClientId] FOREIGN KEY ([ClientId]) REFERENCES [Clients] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [ClientProperties] ( + [Id] int NOT NULL IDENTITY, + [ClientId] int NOT NULL, + [Key] nvarchar(250) NOT NULL, + [Value] nvarchar(2000) NOT NULL, + CONSTRAINT [PK_ClientProperties] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ClientProperties_Clients_ClientId] FOREIGN KEY ([ClientId]) REFERENCES [Clients] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [ClientRedirectUris] ( + [Id] int NOT NULL IDENTITY, + [ClientId] int NOT NULL, + [RedirectUri] nvarchar(2000) NOT NULL, + CONSTRAINT [PK_ClientRedirectUris] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ClientRedirectUris_Clients_ClientId] FOREIGN KEY ([ClientId]) REFERENCES [Clients] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [ClientScopes] ( + [Id] int NOT NULL IDENTITY, + [ClientId] int NOT NULL, + [Scope] nvarchar(200) NOT NULL, + CONSTRAINT [PK_ClientScopes] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ClientScopes_Clients_ClientId] FOREIGN KEY ([ClientId]) REFERENCES [Clients] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [ClientSecrets] ( + [Id] int NOT NULL IDENTITY, + [ClientId] int NOT NULL, + [Description] nvarchar(2000) NULL, + [Expiration] datetime2 NULL, + [Type] nvarchar(250) NULL, + [Value] nvarchar(2000) NOT NULL, + CONSTRAINT [PK_ClientSecrets] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ClientSecrets_Clients_ClientId] FOREIGN KEY ([ClientId]) REFERENCES [Clients] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [IdentityClaims] ( + [Id] int NOT NULL IDENTITY, + [IdentityResourceId] int NOT NULL, + [Type] nvarchar(200) NOT NULL, + CONSTRAINT [PK_IdentityClaims] PRIMARY KEY ([Id]), + CONSTRAINT [FK_IdentityClaims_IdentityResources_IdentityResourceId] FOREIGN KEY ([IdentityResourceId]) REFERENCES [IdentityResources] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [ApiScopeClaims] ( + [Id] int NOT NULL IDENTITY, + [ApiScopeId] int NOT NULL, + [Type] nvarchar(200) NOT NULL, + CONSTRAINT [PK_ApiScopeClaims] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ApiScopeClaims_ApiScopes_ApiScopeId] FOREIGN KEY ([ApiScopeId]) REFERENCES [ApiScopes] ([Id]) ON DELETE CASCADE +); + +CREATE INDEX [IX_ApiClaims_ApiResourceId] ON [ApiClaims] ([ApiResourceId]); + +CREATE UNIQUE INDEX [IX_ApiResources_Name] ON [ApiResources] ([Name]); + +CREATE INDEX [IX_ApiScopeClaims_ApiScopeId] ON [ApiScopeClaims] ([ApiScopeId]); + +CREATE INDEX [IX_ApiScopes_ApiResourceId] ON [ApiScopes] ([ApiResourceId]); + +CREATE UNIQUE INDEX [IX_ApiScopes_Name] ON [ApiScopes] ([Name]); + +CREATE INDEX [IX_ApiSecrets_ApiResourceId] ON [ApiSecrets] ([ApiResourceId]); + +CREATE INDEX [IX_ClientClaims_ClientId] ON [ClientClaims] ([ClientId]); + +CREATE INDEX [IX_ClientCorsOrigins_ClientId] ON [ClientCorsOrigins] ([ClientId]); + +CREATE INDEX [IX_ClientGrantTypes_ClientId] ON [ClientGrantTypes] ([ClientId]); + +CREATE INDEX [IX_ClientIdPRestrictions_ClientId] ON [ClientIdPRestrictions] ([ClientId]); + +CREATE INDEX [IX_ClientPostLogoutRedirectUris_ClientId] ON [ClientPostLogoutRedirectUris] ([ClientId]); + +CREATE INDEX [IX_ClientProperties_ClientId] ON [ClientProperties] ([ClientId]); + +CREATE INDEX [IX_ClientRedirectUris_ClientId] ON [ClientRedirectUris] ([ClientId]); + +CREATE UNIQUE INDEX [IX_Clients_ClientId] ON [Clients] ([ClientId]); + +CREATE INDEX [IX_ClientScopes_ClientId] ON [ClientScopes] ([ClientId]); + +CREATE INDEX [IX_ClientSecrets_ClientId] ON [ClientSecrets] ([ClientId]); + +CREATE INDEX [IX_IdentityClaims_IdentityResourceId] ON [IdentityClaims] ([IdentityResourceId]); + +CREATE UNIQUE INDEX [IX_IdentityResources_Name] ON [IdentityResources] ([Name]); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20171026080114_InitialSqlServerConfigurationDbMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20171122163636_UserSearchOptimizationConfigurationDbMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +ALTER TABLE [IdentityResources] ADD [Created] datetime2 NOT NULL DEFAULT '0001-01-01T00:00:00.0000000'; + +ALTER TABLE [IdentityResources] ADD [NonEditable] bit NOT NULL DEFAULT CAST(0 AS bit); + +ALTER TABLE [IdentityResources] ADD [Updated] datetime2 NULL; + +DECLARE @var nvarchar(max); +SELECT @var = QUOTENAME([d].[name]) +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[ClientSecrets]') AND [c].[name] = N'Value'); +IF @var IS NOT NULL EXEC(N'ALTER TABLE [ClientSecrets] DROP CONSTRAINT ' + @var + ';'); +ALTER TABLE [ClientSecrets] ALTER COLUMN [Value] nvarchar(4000) NOT NULL; + +DECLARE @var1 nvarchar(max); +SELECT @var1 = QUOTENAME([d].[name]) +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[ClientSecrets]') AND [c].[name] = N'Type'); +IF @var1 IS NOT NULL EXEC(N'ALTER TABLE [ClientSecrets] DROP CONSTRAINT ' + @var1 + ';'); +ALTER TABLE [ClientSecrets] ALTER COLUMN [Type] nvarchar(250) NOT NULL; + +ALTER TABLE [ClientSecrets] ADD [Created] datetime2 NOT NULL DEFAULT '0001-01-01T00:00:00.0000000'; + +ALTER TABLE [Clients] ADD [Created] datetime2 NOT NULL DEFAULT '0001-01-01T00:00:00.0000000'; + +ALTER TABLE [Clients] ADD [DeviceCodeLifetime] int NOT NULL DEFAULT 0; + +ALTER TABLE [Clients] ADD [LastAccessed] datetime2 NULL; + +ALTER TABLE [Clients] ADD [NonEditable] bit NOT NULL DEFAULT CAST(0 AS bit); + +ALTER TABLE [Clients] ADD [Updated] datetime2 NULL; + +ALTER TABLE [Clients] ADD [UserCodeType] nvarchar(100) NULL; + +ALTER TABLE [Clients] ADD [UserSsoLifetime] int NULL; + +DECLARE @var2 nvarchar(max); +SELECT @var2 = QUOTENAME([d].[name]) +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[ApiSecrets]') AND [c].[name] = N'Value'); +IF @var2 IS NOT NULL EXEC(N'ALTER TABLE [ApiSecrets] DROP CONSTRAINT ' + @var2 + ';'); +ALTER TABLE [ApiSecrets] ALTER COLUMN [Value] nvarchar(4000) NOT NULL; + +DECLARE @var3 nvarchar(max); +SELECT @var3 = QUOTENAME([d].[name]) +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[ApiSecrets]') AND [c].[name] = N'Type'); +IF @var3 IS NOT NULL EXEC(N'ALTER TABLE [ApiSecrets] DROP CONSTRAINT ' + @var3 + ';'); +ALTER TABLE [ApiSecrets] ALTER COLUMN [Type] nvarchar(250) NOT NULL; + +ALTER TABLE [ApiSecrets] ADD [Created] datetime2 NOT NULL DEFAULT '0001-01-01T00:00:00.0000000'; + +ALTER TABLE [ApiResources] ADD [Created] datetime2 NOT NULL DEFAULT '0001-01-01T00:00:00.0000000'; + +ALTER TABLE [ApiResources] ADD [LastAccessed] datetime2 NULL; + +ALTER TABLE [ApiResources] ADD [NonEditable] bit NOT NULL DEFAULT CAST(0 AS bit); + +ALTER TABLE [ApiResources] ADD [Updated] datetime2 NULL; + +CREATE TABLE [ApiProperties] ( + [Id] int NOT NULL IDENTITY, + [Key] nvarchar(250) NOT NULL, + [Value] nvarchar(2000) NOT NULL, + [ApiResourceId] int NOT NULL, + CONSTRAINT [PK_ApiProperties] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ApiProperties_ApiResources_ApiResourceId] FOREIGN KEY ([ApiResourceId]) REFERENCES [ApiResources] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [IdentityProperties] ( + [Id] int NOT NULL IDENTITY, + [Key] nvarchar(250) NOT NULL, + [Value] nvarchar(2000) NOT NULL, + [IdentityResourceId] int NOT NULL, + CONSTRAINT [PK_IdentityProperties] PRIMARY KEY ([Id]), + CONSTRAINT [FK_IdentityProperties_IdentityResources_IdentityResourceId] FOREIGN KEY ([IdentityResourceId]) REFERENCES [IdentityResources] ([Id]) ON DELETE CASCADE +); + +CREATE INDEX [IX_ApiProperties_ApiResourceId] ON [ApiProperties] ([ApiResourceId]); + +CREATE INDEX [IX_IdentityProperties_IdentityResourceId] ON [IdentityProperties] ([IdentityResourceId]); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20181109163923_IdentityServer2.3SqlServerConfigurationDbMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +BEGIN TRANSACTION + +--Add New Tables + +-- Add ApiResourceScopes + +CREATE TABLE ApiResourceScopes ( + Id INT IDENTITY (1, 1) NOT NULL, + Scope NVARCHAR (200) NOT NULL, + ApiResourceId INT NOT NULL, + CONSTRAINT PK_ApiResourceScopes PRIMARY KEY CLUSTERED (Id ASC), + CONSTRAINT FK_ApiResourceScopes_ApiResources_ApiResourceId FOREIGN KEY (ApiResourceId) REFERENCES ApiResources (Id) ON DELETE CASCADE +); + + +CREATE NONCLUSTERED INDEX IX_ApiResourceScopes_ApiResourceId + ON ApiResourceScopes(ApiResourceId ASC); + + + + +-- Add ApiScopeProperties + +CREATE TABLE ApiScopeProperties ( + Id INT IDENTITY (1, 1) NOT NULL, + [Key] NVARCHAR (250) NOT NULL, + [Value] NVARCHAR (2000) NOT NULL, + ScopeId INT NOT NULL, + CONSTRAINT PK_ApiScopeProperties PRIMARY KEY CLUSTERED (Id ASC), + CONSTRAINT FK_ApiScopeProperties_ApiScopes_ScopeId FOREIGN KEY (ScopeId) REFERENCES ApiScopes (Id) ON DELETE CASCADE +); + + +CREATE NONCLUSTERED INDEX IX_ApiScopeProperties_ScopeId + ON ApiScopeProperties(ScopeId ASC); + + + + +-- Add Renamed Tables + +-- ApiResourceClaims + +CREATE TABLE [ApiResourceClaims] ( + Id INT IDENTITY (1, 1) NOT NULL, + [Type] NVARCHAR (200) NOT NULL, + ApiResourceId INT NOT NULL, + CONSTRAINT PK_ApiResourceClaims PRIMARY KEY CLUSTERED (Id ASC), + CONSTRAINT FK_ApiResourceClaims_ApiResources_ApiResourceId FOREIGN KEY (ApiResourceId) REFERENCES ApiResources (Id) ON DELETE CASCADE +); + + +CREATE NONCLUSTERED INDEX [IX_ApiResourceClaims_ApiResourceId] + ON [ApiResourceClaims]([ApiResourceId] ASC); + + + + +-- ApiResourceProperties + +CREATE TABLE [ApiResourceProperties] ( + [Id] INT IDENTITY (1, 1) NOT NULL, + [Key] NVARCHAR (250) NOT NULL, + [Value] NVARCHAR (2000) NOT NULL, + ApiResourceId INT NOT NULL, + CONSTRAINT PK_ApiResourceProperties PRIMARY KEY CLUSTERED (Id ASC), + CONSTRAINT FK_ApiResourceProperties_ApiResources_ApiResourceId FOREIGN KEY (ApiResourceId) REFERENCES ApiResources (Id) ON DELETE CASCADE +); + + +CREATE NONCLUSTERED INDEX [IX_ApiResourceProperties_ApiResourceId] + ON [ApiResourceProperties]([ApiResourceId] ASC); + + + + +-- Add ApiResourceSecrets + +CREATE TABLE ApiResourceSecrets ( + Id INT IDENTITY (1, 1) NOT NULL, + [Description] NVARCHAR (1000) NULL, + [Value] NVARCHAR (4000) NOT NULL, + Expiration DATETIME2 (7) NULL, + [Type] NVARCHAR (250) NOT NULL, + Created DATETIME2 (7) NOT NULL, + ApiResourceId INT NOT NULL, + CONSTRAINT PK_ApiResourceSecrets PRIMARY KEY CLUSTERED (Id ASC), + CONSTRAINT FK_ApiResourceSecrets_ApiResources_ApiResourceId FOREIGN KEY (ApiResourceId) REFERENCES ApiResources (Id) ON DELETE CASCADE +); + + +CREATE NONCLUSTERED INDEX IX_ApiResourceSecrets_ApiResourceId + ON ApiResourceSecrets(ApiResourceId ASC); + + + + +-- IdentityResourceClaims + +CREATE TABLE IdentityResourceClaims ( + Id INT IDENTITY (1, 1) NOT NULL, + [Type] NVARCHAR (200) NOT NULL, + IdentityResourceId INT NOT NULL, + CONSTRAINT PK_IdentityResourceClaims PRIMARY KEY CLUSTERED (Id ASC), + CONSTRAINT FK_IdentityResourceClaims_IdentityResources_IdentityResourceId FOREIGN KEY (IdentityResourceId) REFERENCES IdentityResources (Id) ON DELETE CASCADE +); + + +CREATE NONCLUSTERED INDEX [IX_IdentityResourceClaims_IdentityResourceId] + ON IdentityResourceClaims(IdentityResourceId ASC); + + + + +-- IdentityResourceProperties + +CREATE TABLE IdentityResourceProperties ( + Id INT IDENTITY (1, 1) NOT NULL, + [Key] NVARCHAR (250) NOT NULL, + [Value] NVARCHAR (2000) NOT NULL, + IdentityResourceId INT NOT NULL, + CONSTRAINT PK_IdentityResourceProperties PRIMARY KEY CLUSTERED (Id ASC), + CONSTRAINT FK_IdentityResourceProperties_IdentityResources_IdentityResourceId FOREIGN KEY (IdentityResourceId) REFERENCES IdentityResources (Id) ON DELETE CASCADE +); + + +CREATE NONCLUSTERED INDEX IX_IdentityResourceProperties_IdentityResourceId + ON IdentityResourceProperties(IdentityResourceId ASC); + + + + +-- Migrate Existing Data + +--ApiClaims -> ApiResourceClaims +SET IDENTITY_INSERT ApiResourceClaims ON; + + +INSERT INTO ApiResourceClaims + (Id, [Type], ApiResourceId) +SELECT + Id, [Type], ApiResourceId +FROM ApiClaims + + +SET IDENTITY_INSERT ApiResourceClaims OFF; + + +--ApiProperties -> ApiResourceProperties +SET IDENTITY_INSERT ApiResourceProperties ON; + + +INSERT INTO ApiResourceProperties + (Id, [Key], [Value], ApiResourceId) +SELECT + Id, [Key], [Value], ApiResourceId +FROM ApiProperties + + +SET IDENTITY_INSERT ApiResourceProperties OFF; + + +--ApiSecrets -> ApiResourceSecrets +SET IDENTITY_INSERT ApiResourceSecrets ON; + + +INSERT INTO ApiResourceSecrets + (Id, [Description], [Value], Expiration, [Type], Created, ApiResourceId) +SELECT + Id, [Description], [Value], Expiration, [Type], Created, ApiResourceId +FROM ApiSecrets + + +SET IDENTITY_INSERT ApiResourceSecrets OFF; + + + +--IdentityClaims -> IdentityResourceClaims +SET IDENTITY_INSERT IdentityResourceClaims ON; + + +INSERT INTO IdentityResourceClaims + (Id, [Type], IdentityResourceId) +SELECT + Id, [Type], IdentityResourceId +FROM IdentityClaims + + +SET IDENTITY_INSERT IdentityResourceClaims OFF; + + + + +--IdentityProperties -> IdentityResourceProperties +SET IDENTITY_INSERT IdentityResourceProperties ON; + + +INSERT INTO IdentityResourceProperties + (Id, [Key], [Value], IdentityResourceId) +SELECT + Id, [Key], [Value], IdentityResourceId +FROM IdentityProperties + + +SET IDENTITY_INSERT IdentityResourceProperties OFF; + + + +-- ApiScopes -> ApiResourceScopes + +INSERT INTO ApiResourceScopes + ([Scope], [ApiResourceId]) +SELECT + [Name], [ApiResourceId] +FROM ApiScopes + +-- Alter Existing Tables + +-- ApiResources + +ALTER TABLE ApiResources + ADD AllowedAccessTokenSigningAlgorithms NVARCHAR (100) NULL; + +ALTER TABLE ApiResources + ADD ShowInDiscoveryDocument BIT NULL; +GO + +UPDATE ApiResources SET ShowInDiscoveryDocument = 0; + +ALTER TABLE ApiResources + ALTER COLUMN ShowInDiscoveryDocument BIT NOT NULL; + +GO + + +-- ApiScopeClaims + +ALTER TABLE ApiScopeClaims + DROP CONSTRAINT FK_ApiScopeClaims_ApiScopes_ApiScopeId + +DROP INDEX IX_ApiScopeClaims_ApiScopeId + ON ApiScopeClaims + +exec sp_rename 'ApiScopeClaims.ApiScopeId', 'ScopeId', 'COLUMN'; + +CREATE NONCLUSTERED INDEX IX_ApiScopeClaims_ScopeId + ON ApiScopeClaims(ScopeId ASC); + +ALTER TABLE ApiScopeClaims + ADD CONSTRAINT FK_ApiScopeClaims_ApiScopes_ScopeId + FOREIGN KEY (ScopeId) REFERENCES ApiScopes (Id) ON DELETE CASCADE + + + +-- ApiScopes + +ALTER TABLE ApiScopes + DROP CONSTRAINT FK_ApiScopes_ApiResources_ApiResourceId + +DROP INDEX IX_ApiScopes_ApiResourceId + ON ApiScopes + +ALTER TABLE ApiScopes + ADD [Enabled] BIT NULL + +GO + +UPDATE ApiScopes SET [Enabled] = 1 + +ALTER TABLE ApiScopes + DROP COLUMN ApiResourceId; + +ALTER TABLE ApiScopes + ALTER COLUMN Enabled BIT NOT NULL; + +GO + +-- Clients + +ALTER TABLE Clients + ADD AllowedIdentityTokenSigningAlgorithms NVARCHAR (100) NULL + +ALTER TABLE Clients + ADD RequireRequestObject BIT NULL + +GO + +UPDATE Clients SET RequireRequestObject = 0 + +ALTER TABLE Clients + ALTER COLUMN RequireRequestObject BIT NOT NULL + +GO + +-- Delete Old Tables + +DROP TABLE ApiClaims +DROP TABLE ApiProperties +DROP TABLE ApiSecrets +DROP TABLE IdentityClaims +DROP TABLE IdentityProperties + +COMMIT TRANSACTION + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20200702075849_V3toV4SqlServerConfigurationDbMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +ALTER TABLE [ApiResources] ADD [RequireResourceIndicator] bit NOT NULL DEFAULT CAST(0 AS bit); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20210106132452_DuendeSqlServerConfigurationMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +CREATE TABLE [IdentityProviders] ( + [Id] int NOT NULL IDENTITY, + [Scheme] nvarchar(200) NOT NULL, + [DisplayName] nvarchar(200) NULL, + [Enabled] bit NOT NULL, + [Type] nvarchar(20) NOT NULL, + [Properties] nvarchar(max) NULL, + CONSTRAINT [PK_IdentityProviders] PRIMARY KEY ([Id]) +); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20210602104947_IdentityProvidersSqlServerConfigurationMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +DROP INDEX [IX_IdentityResourceProperties_IdentityResourceId] ON [IdentityResourceProperties]; + +DROP INDEX [IX_IdentityResourceClaims_IdentityResourceId] ON [IdentityResourceClaims]; + +DROP INDEX [IX_ClientScopes_ClientId] ON [ClientScopes]; + +DROP INDEX [IX_ClientRedirectUris_ClientId] ON [ClientRedirectUris]; + +DROP INDEX [IX_ClientProperties_ClientId] ON [ClientProperties]; + +DROP INDEX [IX_ClientPostLogoutRedirectUris_ClientId] ON [ClientPostLogoutRedirectUris]; + +DROP INDEX [IX_ClientIdPRestrictions_ClientId] ON [ClientIdPRestrictions]; + +DROP INDEX [IX_ClientGrantTypes_ClientId] ON [ClientGrantTypes]; + +DROP INDEX [IX_ClientCorsOrigins_ClientId] ON [ClientCorsOrigins]; + +DROP INDEX [IX_ClientClaims_ClientId] ON [ClientClaims]; + +DROP INDEX [IX_ApiScopeProperties_ScopeId] ON [ApiScopeProperties]; + +DROP INDEX [IX_ApiScopeClaims_ScopeId] ON [ApiScopeClaims]; + +DROP INDEX [IX_ApiResourceScopes_ApiResourceId] ON [ApiResourceScopes]; + +DROP INDEX [IX_ApiResourceProperties_ApiResourceId] ON [ApiResourceProperties]; + +DROP INDEX [IX_ApiResourceClaims_ApiResourceId] ON [ApiResourceClaims]; + +ALTER TABLE [IdentityProviders] ADD [Created] datetime2 NOT NULL DEFAULT '0001-01-01T00:00:00.0000000'; + +ALTER TABLE [IdentityProviders] ADD [LastAccessed] datetime2 NULL; + +ALTER TABLE [IdentityProviders] ADD [NonEditable] bit NOT NULL DEFAULT CAST(0 AS bit); + +ALTER TABLE [IdentityProviders] ADD [Updated] datetime2 NULL; + +ALTER TABLE [Clients] ADD [CibaLifetime] int NULL; + +ALTER TABLE [Clients] ADD [PollingInterval] int NULL; + +DECLARE @var4 nvarchar(max); +SELECT @var4 = QUOTENAME([d].[name]) +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[ClientRedirectUris]') AND [c].[name] = N'RedirectUri'); +IF @var4 IS NOT NULL EXEC(N'ALTER TABLE [ClientRedirectUris] DROP CONSTRAINT ' + @var4 + ';'); +ALTER TABLE [ClientRedirectUris] ALTER COLUMN [RedirectUri] nvarchar(400) NOT NULL; + +DECLARE @var5 nvarchar(max); +SELECT @var5 = QUOTENAME([d].[name]) +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[ClientPostLogoutRedirectUris]') AND [c].[name] = N'PostLogoutRedirectUri'); +IF @var5 IS NOT NULL EXEC(N'ALTER TABLE [ClientPostLogoutRedirectUris] DROP CONSTRAINT ' + @var5 + ';'); +ALTER TABLE [ClientPostLogoutRedirectUris] ALTER COLUMN [PostLogoutRedirectUri] nvarchar(400) NOT NULL; + +ALTER TABLE [ApiScopes] ADD [Created] datetime2 NOT NULL DEFAULT '0001-01-01T00:00:00.0000000'; + +ALTER TABLE [ApiScopes] ADD [LastAccessed] datetime2 NULL; + +ALTER TABLE [ApiScopes] ADD [NonEditable] bit NOT NULL DEFAULT CAST(0 AS bit); + +ALTER TABLE [ApiScopes] ADD [Updated] datetime2 NULL; + +CREATE UNIQUE INDEX [IX_IdentityResourceProperties_IdentityResourceId_Key] ON [IdentityResourceProperties] ([IdentityResourceId], [Key]); + +CREATE UNIQUE INDEX [IX_IdentityResourceClaims_IdentityResourceId_Type] ON [IdentityResourceClaims] ([IdentityResourceId], [Type]); + +CREATE UNIQUE INDEX [IX_IdentityProviders_Scheme] ON [IdentityProviders] ([Scheme]); + +CREATE UNIQUE INDEX [IX_ClientScopes_ClientId_Scope] ON [ClientScopes] ([ClientId], [Scope]); + +CREATE UNIQUE INDEX [IX_ClientRedirectUris_ClientId_RedirectUri] ON [ClientRedirectUris] ([ClientId], [RedirectUri]); + +CREATE UNIQUE INDEX [IX_ClientProperties_ClientId_Key] ON [ClientProperties] ([ClientId], [Key]); + +CREATE UNIQUE INDEX [IX_ClientPostLogoutRedirectUris_ClientId_PostLogoutRedirectUri] ON [ClientPostLogoutRedirectUris] ([ClientId], [PostLogoutRedirectUri]); + +CREATE UNIQUE INDEX [IX_ClientIdPRestrictions_ClientId_Provider] ON [ClientIdPRestrictions] ([ClientId], [Provider]); + +CREATE UNIQUE INDEX [IX_ClientGrantTypes_ClientId_GrantType] ON [ClientGrantTypes] ([ClientId], [GrantType]); + +CREATE UNIQUE INDEX [IX_ClientCorsOrigins_ClientId_Origin] ON [ClientCorsOrigins] ([ClientId], [Origin]); + +CREATE UNIQUE INDEX [IX_ClientClaims_ClientId_Type_Value] ON [ClientClaims] ([ClientId], [Type], [Value]); + +CREATE UNIQUE INDEX [IX_ApiScopeProperties_ScopeId_Key] ON [ApiScopeProperties] ([ScopeId], [Key]); + +CREATE UNIQUE INDEX [IX_ApiScopeClaims_ScopeId_Type] ON [ApiScopeClaims] ([ScopeId], [Type]); + +CREATE UNIQUE INDEX [IX_ApiResourceScopes_ApiResourceId_Scope] ON [ApiResourceScopes] ([ApiResourceId], [Scope]); + +CREATE UNIQUE INDEX [IX_ApiResourceProperties_ApiResourceId_Key] ON [ApiResourceProperties] ([ApiResourceId], [Key]); + +CREATE UNIQUE INDEX [IX_ApiResourceClaims_ApiResourceId_Type] ON [ApiResourceClaims] ([ApiResourceId], [Type]); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20220104130635_DuendeV6SqlServerConfigurationMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +ALTER TABLE [Clients] ADD [CoordinateLifetimeWithUserSession] bit NULL; + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20220608093217_Duende61ConfigurationUpdate', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +ALTER TABLE [Clients] ADD [DPoPClockSkew] time NOT NULL DEFAULT '00:00:00'; + +ALTER TABLE [Clients] ADD [DPoPValidationMode] int NOT NULL DEFAULT 0; + +ALTER TABLE [Clients] ADD [InitiateLoginUri] nvarchar(2000) NULL; + +ALTER TABLE [Clients] ADD [RequireDPoP] bit NOT NULL DEFAULT CAST(0 AS bit); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20230620153729_Duende63ConfigurationUpdate', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +ALTER TABLE [Clients] ADD [PushedAuthorizationLifetime] int NULL; + +ALTER TABLE [Clients] ADD [RequirePushedAuthorization] bit NOT NULL DEFAULT CAST(0 AS bit); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20240104155203_DuendeV7SqlServerConfigurationMigration', N'10.0.11'); + +COMMIT; +GO + diff --git a/Complete migrations (up to v13.1)/SqlServer/ExtendedConfiguration.sql b/Complete migrations (up to v13.1)/SqlServer/ExtendedConfiguration.sql new file mode 100644 index 0000000..cc84382 --- /dev/null +++ b/Complete migrations (up to v13.1)/SqlServer/ExtendedConfiguration.sql @@ -0,0 +1,110 @@ +-- This set of migrations are dependent on Configuration tables from IdentityServer already existing run ./Configuration.sql script first + +IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL +BEGIN + CREATE TABLE [__EFMigrationsHistory] ( + [MigrationId] nvarchar(150) NOT NULL, + [ProductVersion] nvarchar(32) NOT NULL, + CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId]) + ); +END; +GO + +BEGIN TRANSACTION; +CREATE TABLE [ExtendedApiResources] ( + [Id] nvarchar(450) NOT NULL, + [ApiResourceName] nvarchar(200) NOT NULL, + [NormalizedName] nvarchar(200) NOT NULL, + [Reserved] bit NOT NULL, + CONSTRAINT [PK_ExtendedApiResources] PRIMARY KEY ([Id]) +); + +CREATE TABLE [ExtendedClients] ( + [Id] nvarchar(450) NOT NULL, + [ClientId] nvarchar(200) NOT NULL, + [Description] nvarchar(max) NULL, + [NormalizedClientId] nvarchar(200) NOT NULL, + [NormalizedClientName] nvarchar(200) NULL, + [Reserved] bit NOT NULL, + CONSTRAINT [PK_ExtendedClients] PRIMARY KEY ([Id]) +); + +CREATE TABLE [ExtendedIdentityResources] ( + [Id] nvarchar(450) NOT NULL, + [IdentityResourceName] nvarchar(200) NOT NULL, + [NormalizedName] nvarchar(200) NOT NULL, + [Reserved] bit NOT NULL, + CONSTRAINT [PK_ExtendedIdentityResources] PRIMARY KEY ([Id]) +); + +CREATE UNIQUE INDEX [ApiNameIndex] ON [ExtendedApiResources] ([ApiResourceName]); + +CREATE UNIQUE INDEX [ApiResourceNameIndex] ON [ExtendedApiResources] ([NormalizedName]); + +CREATE UNIQUE INDEX [IdIndex] ON [ExtendedClients] ([ClientId]); + +CREATE UNIQUE INDEX [ClientIdIndex] ON [ExtendedClients] ([NormalizedClientId]); + +CREATE UNIQUE INDEX [ClientNameIndex] ON [ExtendedClients] ([NormalizedClientName]) WHERE [NormalizedClientName] IS NOT NULL; + +CREATE UNIQUE INDEX [IdentityNameIndex] ON [ExtendedIdentityResources] ([IdentityResourceName]); + +CREATE UNIQUE INDEX [IdentityResourceNameIndex] ON [ExtendedIdentityResources] ([NormalizedName]); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20171026080835_InitialSqlServerExtendedConfigurationDbMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20171122163718_UserSearchOptimizationExtendedConfigurationDbMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +CREATE TABLE [ConfigurationEntries] ( + [Key] nvarchar(450) NOT NULL, + [Value] nvarchar(max) NULL, + CONSTRAINT [PK_ConfigurationEntries] PRIMARY KEY ([Key]) +); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20180626100745_ConfigurationEntries', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +UPDATE [Clients] + SET [NonEditable] = e.reserved + from ExtendedClients e + WHERE [Clients].ClientId = e.ClientId + +UPDATE [ApiResources] + SET [NonEditable] = e.reserved + from ExtendedApiResources e + WHERE [ApiResources].Name = e.ApiResourceName + +UPDATE IdentityResources + SET [NonEditable] = e.reserved + from ExtendedIdentityResources e + WHERE IdentityResources.Name = e.IdentityResourceName + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20181205163055_ExtendedDataMigration2.3', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +ALTER TABLE [ExtendedClients] ADD [ClientType] int NULL; + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20190401104724_ClientType', N'10.0.11'); + +COMMIT; +GO + diff --git a/Complete migrations (up to v13)/SqlServer/Identity.sql b/Complete migrations (up to v13.1)/SqlServer/Identity.sql similarity index 97% rename from Complete migrations (up to v13)/SqlServer/Identity.sql rename to Complete migrations (up to v13.1)/SqlServer/Identity.sql index bc2e4bc..4e91309 100644 --- a/Complete migrations (up to v13)/SqlServer/Identity.sql +++ b/Complete migrations (up to v13.1)/SqlServer/Identity.sql @@ -1,4 +1,7 @@ -IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL +SET XACT_ABORT ON; +GO + +IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL BEGIN CREATE TABLE [__EFMigrationsHistory] ( [MigrationId] nvarchar(150) NOT NULL, @@ -122,7 +125,7 @@ CREATE INDEX [EmailIndex] ON [AspNetUsers] ([NormalizedEmail]); CREATE UNIQUE CLUSTERED INDEX [UserNameIndex] ON [AspNetUsers] ([NormalizedUserName]); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20171026080706_InitialSqlServerIdentityDbMigration', N'10.0.8'); +VALUES (N'20171026080706_InitialSqlServerIdentityDbMigration', N'10.0.11'); COMMIT; GO @@ -131,6 +134,7 @@ BEGIN TRANSACTION; ALTER TABLE [AspNetUsers] ADD [NormalizedFirstName] nvarchar(256) NULL; ALTER TABLE [AspNetUsers] ADD [NormalizedLastName] nvarchar(256) NULL; +GO CREATE INDEX [FirstNameIndex] ON [AspNetUsers] ([NormalizedFirstName]); @@ -140,6 +144,7 @@ CREATE INDEX [CountIndex] ON [AspNetUsers] ([IsBlocked], [IsDeleted]); CREATE INDEX [CountIndexReversed] ON [AspNetUsers] ([IsDeleted], [IsBlocked]); +GO CREATE PROCEDURE [FindAllUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -188,6 +193,7 @@ BEGIN END +GO CREATE PROCEDURE [FindActiveUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -238,6 +244,7 @@ BEGIN END +GO CREATE PROCEDURE [FindActiveOrBlockedWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -288,6 +295,7 @@ BEGIN END +GO CREATE PROCEDURE [FindActiveOrDeletedUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -338,6 +346,7 @@ BEGIN END +GO CREATE PROCEDURE [FindBlockedOrDeletedWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -388,6 +397,7 @@ BEGIN END +GO CREATE PROCEDURE [FindBlockedUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -438,6 +448,7 @@ BEGIN END +GO CREATE PROCEDURE [FindDeletedUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -487,9 +498,10 @@ BEGIN OFFSET @PageSize * @PageNumber ROWS FETCH NEXT @PageSize ROWS ONLY END +GO INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20171122162730_UserSearchOptimizationMigration', N'10.0.8'); +VALUES (N'20171122162730_UserSearchOptimizationMigration', N'10.0.11'); COMMIT; GO @@ -506,6 +518,7 @@ SELECT Id, Email, FirstName, LastName, UserName, NormalizedFirstName, Nor FROM ' + @SchemaName + '.AspNetUsers WHERE (IsBlocked = 0) AND (IsDeleted = 0)'; EXEC sp_executesql @CreateViewSql; +GO DECLARE @SchemaName NVARCHAR(256); @@ -519,6 +532,7 @@ SET @CreateIndexSql = 'CREATE UNIQUE CLUSTERED INDEX [ClusteredIndex-20190723-13 [NormalizedEmail] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]'; EXEC sp_executesql @CreateIndexSql; +GO DECLARE @SchemaName NVARCHAR(256); @@ -632,6 +646,7 @@ Begin DesignProperties = End End ' , @level0type=N'SCHEMA',@level0name=@SchemaName, @level1type=N'VIEW',@level1name=N'ActiveUsers' +GO DECLARE @SchemaName NVARCHAR(256); @@ -640,6 +655,7 @@ SET @SchemaName = SCHEMA_NAME(); EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPaneCount', @value=1 , @level0type=N'SCHEMA',@level0name=@SchemaName, @level1type=N'VIEW',@level1name=N'ActiveUsers' +GO CREATE PROCEDURE [FindActiveByRoleWithCount] @RoleId nvarchar(450), @SearchTerm nvarchar(256) = null, @@ -710,6 +726,7 @@ BEGIN END END +GO CREATE PROCEDURE FindActiveUsersInRoleAndAllActiveUsersWithCount @RoleId nvarchar(450), @SearchTerm nvarchar(256) = null, @@ -799,13 +816,16 @@ BEGIN END END +GO + INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20190723135545_RoleSearchOptimizationMigration', N'10.0.8'); +VALUES (N'20190723135545_RoleSearchOptimizationMigration', N'10.0.11'); COMMIT; GO BEGIN TRANSACTION; +GO CREATE OR ALTER PROCEDURE [FindAllUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -903,6 +923,7 @@ BEGIN END +GO CREATE OR ALTER PROCEDURE [FindActiveUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -1007,6 +1028,7 @@ END +GO CREATE OR ALTER PROCEDURE [FindActiveOrBlockedWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -1109,6 +1131,7 @@ END +GO CREATE OR ALTER PROCEDURE [FindActiveOrDeletedUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -1211,6 +1234,7 @@ BEGIN END +GO CREATE OR ALTER PROCEDURE [FindBlockedOrDeletedWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -1312,6 +1336,7 @@ BEGIN END END +GO CREATE OR ALTER PROCEDURE [FindBlockedUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -1413,6 +1438,7 @@ BEGIN END END +GO CREATE OR ALTER PROCEDURE [FindDeletedUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -1514,14 +1540,16 @@ BEGIN END END +GO INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20200706104335_UserSearchOptimizationUpdateMigration', N'10.0.8'); +VALUES (N'20200706104335_UserSearchOptimizationUpdateMigration', N'10.0.11'); COMMIT; GO BEGIN TRANSACTION; +GO CREATE OR ALTER PROCEDURE [FindActiveByRoleWithCount] @RoleId nvarchar(450), @SearchTerm nvarchar(256) = null, @@ -1638,6 +1666,7 @@ BEGIN END END +GO CREATE OR ALTER PROCEDURE FindActiveUsersInRoleAndAllActiveUsersWithCount @RoleId nvarchar(450), @SearchTerm nvarchar(256) = null, @@ -1778,8 +1807,10 @@ BEGIN END END +GO + INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20200706104406_RoleSearchOptimizationUpdateMigration', N'10.0.8'); +VALUES (N'20200706104406_RoleSearchOptimizationUpdateMigration', N'10.0.11'); COMMIT; GO @@ -1793,12 +1824,13 @@ CREATE TABLE [EnumClaimTypeAllowedValues] ( ); INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20210430141851_EnumeratedClaimTypeMigration', N'10.0.8'); +VALUES (N'20210430141851_EnumeratedClaimTypeMigration', N'10.0.11'); COMMIT; GO BEGIN TRANSACTION; +GO CREATE OR ALTER PROCEDURE [FindAllUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -1896,6 +1928,7 @@ BEGIN END +GO CREATE OR ALTER PROCEDURE [FindActiveUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -2000,6 +2033,7 @@ END +GO CREATE OR ALTER PROCEDURE [FindActiveOrBlockedWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -2102,6 +2136,7 @@ END +GO CREATE OR ALTER PROCEDURE [FindActiveOrDeletedUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -2204,6 +2239,7 @@ BEGIN END +GO CREATE OR ALTER PROCEDURE [FindBlockedOrDeletedWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -2305,6 +2341,7 @@ BEGIN END END +GO CREATE OR ALTER PROCEDURE [FindBlockedUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -2406,6 +2443,7 @@ BEGIN END END +GO CREATE OR ALTER PROCEDURE [FindDeletedUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -2507,9 +2545,10 @@ BEGIN END END +GO INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20211209115717_AddingIdToStoredProceduresMigration', N'10.0.8'); +VALUES (N'20211209115717_AddingIdToStoredProceduresMigration', N'10.0.11'); COMMIT; GO @@ -2518,13 +2557,14 @@ BEGIN TRANSACTION; ALTER TABLE [AspNetClaimTypes] ADD [DisplayName] nvarchar(max) NULL; INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20220110161021_ClaimTypeDisplayNameMigration', N'10.0.8'); +VALUES (N'20220110161021_ClaimTypeDisplayNameMigration', N'10.0.11'); COMMIT; GO BEGIN TRANSACTION; -CREATE PROCEDURE [FindAllUsersWithCountWithClaimValueSearch] +GO +CREATE OR ALTER PROCEDURE [FindAllUsersWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @PageSize int @@ -2643,7 +2683,8 @@ BEGIN END -CREATE PROCEDURE [FindActiveUsersWithCountWithClaimValueSearch] +GO +CREATE OR ALTER PROCEDURE [FindActiveUsersWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @PageSize int @@ -2763,7 +2804,8 @@ END -CREATE PROCEDURE [FindActiveOrBlockedWithCountWithClaimValueSearch] +GO +CREATE OR ALTER PROCEDURE [FindActiveOrBlockedWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @PageSize int @@ -2880,7 +2922,8 @@ END -CREATE PROCEDURE [FindActiveOrDeletedUsersWithCountWithClaimValueSearch] +GO +CREATE OR ALTER PROCEDURE [FindActiveOrDeletedUsersWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @PageSize int @@ -2998,7 +3041,8 @@ BEGIN END -CREATE PROCEDURE [FindBlockedOrDeletedWithCountWithClaimValueSearch] +GO +CREATE OR ALTER PROCEDURE [FindBlockedOrDeletedWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @PageSize int @@ -3114,7 +3158,8 @@ BEGIN END END -CREATE PROCEDURE [FindBlockedUsersWithCountWithClaimValueSearch] +GO +CREATE OR ALTER PROCEDURE [FindBlockedUsersWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @PageSize int @@ -3231,7 +3276,8 @@ BEGIN END END -CREATE PROCEDURE [FindDeletedUsersWithCountWithClaimValueSearch] +GO +CREATE OR ALTER PROCEDURE [FindDeletedUsersWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @PageSize int @@ -3348,14 +3394,16 @@ BEGIN END END +GO INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20220225154308_ClaimValueSearchMigration', N'10.0.8'); +VALUES (N'20220225154308_ClaimValueSearchMigration', N'10.0.11'); COMMIT; GO BEGIN TRANSACTION; +GO CREATE OR ALTER PROCEDURE [FindActiveOrBlockedWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -3426,6 +3474,7 @@ BEGIN END END +GO CREATE OR ALTER PROCEDURE [FindActiveOrBlockedWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @@ -3515,6 +3564,7 @@ END +GO CREATE OR ALTER PROCEDURE [FindActiveOrDeletedUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -3586,6 +3636,7 @@ BEGIN END +GO CREATE OR ALTER PROCEDURE [FindActiveOrDeletedUsersWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @@ -3676,6 +3727,7 @@ BEGIN END +GO CREATE OR ALTER PROCEDURE [FindActiveByRoleWithCount] @RoleId nvarchar(450), @SearchTerm nvarchar(256) = null, @@ -3766,6 +3818,7 @@ BEGIN END END +GO CREATE OR ALTER PROCEDURE FindActiveUsersInRoleAndAllActiveUsersWithCount @RoleId nvarchar(450), @SearchTerm nvarchar(256) = null, @@ -3873,6 +3926,7 @@ BEGIN END END +GO CREATE OR ALTER PROCEDURE [FindActiveUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -3946,6 +4000,7 @@ END +GO CREATE OR ALTER PROCEDURE [FindActiveUsersWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @@ -4036,6 +4091,7 @@ END +GO CREATE OR ALTER PROCEDURE [FindAllUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -4106,6 +4162,7 @@ BEGIN END +GO CREATE OR ALTER PROCEDURE [FindAllUsersWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @@ -4194,6 +4251,7 @@ BEGIN END +GO CREATE OR ALTER PROCEDURE [FindBlockedOrDeletedWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -4264,6 +4322,7 @@ BEGIN END END +GO CREATE OR ALTER PROCEDURE [FindBlockedOrDeletedWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @@ -4351,6 +4410,7 @@ BEGIN END END +GO CREATE OR ALTER PROCEDURE [FindBlockedUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -4421,6 +4481,7 @@ BEGIN END END +GO CREATE OR ALTER PROCEDURE [FindBlockedUsersWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @@ -4508,6 +4569,7 @@ BEGIN END END +GO CREATE OR ALTER PROCEDURE [FindDeletedUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -4579,6 +4641,7 @@ BEGIN END +GO CREATE OR ALTER PROCEDURE [FindDeletedUsersWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @@ -4666,14 +4729,16 @@ BEGIN END END +GO INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20230901102018_ClaimValueSearchBugFixes', N'10.0.8'); +VALUES (N'20230901102018_ClaimValueSearchBugFixes', N'10.0.11'); COMMIT; GO BEGIN TRANSACTION; +GO CREATE OR ALTER PROCEDURE [FindActiveOrBlockedWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @@ -4763,6 +4828,7 @@ END +GO CREATE OR ALTER PROCEDURE [FindActiveOrDeletedUsersWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @@ -4853,6 +4919,7 @@ BEGIN END +GO CREATE OR ALTER PROCEDURE [FindActiveUsersWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @@ -4943,6 +5010,7 @@ END +GO CREATE OR ALTER PROCEDURE [FindAllUsersWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @@ -5031,6 +5099,7 @@ BEGIN END +GO CREATE OR ALTER PROCEDURE [FindBlockedOrDeletedWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @@ -5118,6 +5187,7 @@ BEGIN END END +GO CREATE OR ALTER PROCEDURE [FindBlockedUsersWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @@ -5205,6 +5275,7 @@ BEGIN END END +GO CREATE OR ALTER PROCEDURE [FindDeletedUsersWithCountWithClaimValueSearch] @SearchTerm nvarchar(256), @PageNumber int, @@ -5292,9 +5363,10 @@ BEGIN END END +GO INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20250126152936_ClaimValueSearchRepeatedResultsBugFix', N'10.0.8'); +VALUES (N'20250126152936_ClaimValueSearchRepeatedResultsBugFix', N'10.0.11'); COMMIT; GO @@ -5326,7 +5398,8 @@ DROP PROCEDURE [FindActiveByRoleWithCount]; DROP PROCEDURE [FindActiveUsersInRoleAndAllActiveUsersWithCount]; -CREATE PROCEDURE [FindUsersWithCount] +GO +CREATE OR ALTER PROCEDURE [FindUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @PageSize int, @@ -5474,7 +5547,8 @@ BEGIN DROP TABLE #SearchResults; END -CREATE PROCEDURE [FindActiveByRoleWithCount] +GO +CREATE OR ALTER PROCEDURE [FindActiveByRoleWithCount] @RoleId nvarchar(450), @SearchTerm nvarchar(256) = NULL, @PageNumber int, @@ -5575,7 +5649,8 @@ BEGIN DROP TABLE #FilteredUsersInRole; END -CREATE PROCEDURE [FindActiveWithIsInRoleAndCount] +GO +CREATE OR ALTER PROCEDURE [FindActiveWithIsInRoleAndCount] @RoleId nvarchar(450), @SearchTerm nvarchar(256) = NULL, @PageNumber int, @@ -5680,13 +5755,16 @@ BEGIN DROP TABLE #FilteredUsers; END +GO + INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20260213115004_StoredProcedureRefactor', N'10.0.8'); +VALUES (N'20260213115004_StoredProcedureRefactor', N'10.0.11'); COMMIT; GO BEGIN TRANSACTION; +GO CREATE OR ALTER PROCEDURE [FindUsersWithCount] @SearchTerm nvarchar(256), @PageNumber int, @@ -5835,6 +5913,7 @@ BEGIN DROP TABLE #SearchResults; END +GO CREATE OR ALTER PROCEDURE [FindActiveByRoleWithCount] @RoleId nvarchar(450), @SearchTerm nvarchar(256) = NULL, @@ -5936,6 +6015,7 @@ BEGIN DROP TABLE #FilteredUsersInRole; END +GO CREATE OR ALTER PROCEDURE [FindActiveWithIsInRoleAndCount] @RoleId nvarchar(450), @SearchTerm nvarchar(256) = NULL, @@ -6040,10 +6120,75 @@ BEGIN -- Cleanup DROP TABLE #FilteredUsers; END +GO INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) -VALUES (N'20260415105540_StoredProcedureRefactorWithoutBigCount', N'10.0.8'); +VALUES (N'20260415105540_StoredProcedureRefactorWithoutBigCount', N'10.0.11'); COMMIT; GO +BEGIN TRANSACTION; +ALTER TABLE [AspNetUserTokens] DROP CONSTRAINT [PK_AspNetUserTokens]; + +DECLARE @var nvarchar(max); +SELECT @var = QUOTENAME([d].[name]) +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[AspNetUserTokens]') AND [c].[name] = N'Name'); +IF @var IS NOT NULL EXEC(N'ALTER TABLE [AspNetUserTokens] DROP CONSTRAINT ' + @var + ';'); +ALTER TABLE [AspNetUserTokens] ALTER COLUMN [Name] nvarchar(128) NOT NULL; + +DECLARE @var1 nvarchar(max); +SELECT @var1 = QUOTENAME([d].[name]) +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[AspNetUserTokens]') AND [c].[name] = N'LoginProvider'); +IF @var1 IS NOT NULL EXEC(N'ALTER TABLE [AspNetUserTokens] DROP CONSTRAINT ' + @var1 + ';'); +ALTER TABLE [AspNetUserTokens] ALTER COLUMN [LoginProvider] nvarchar(128) NOT NULL; + +ALTER TABLE [AspNetUserTokens] ADD CONSTRAINT [PK_AspNetUserTokens] PRIMARY KEY ([UserId], [LoginProvider], [Name]); + +DECLARE @var2 nvarchar(max); +SELECT @var2 = QUOTENAME([d].[name]) +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[AspNetUsers]') AND [c].[name] = N'PhoneNumber'); +IF @var2 IS NOT NULL EXEC(N'ALTER TABLE [AspNetUsers] DROP CONSTRAINT ' + @var2 + ';'); +ALTER TABLE [AspNetUsers] ALTER COLUMN [PhoneNumber] nvarchar(256) NULL; + +ALTER TABLE [AspNetUserLogins] DROP CONSTRAINT [PK_AspNetUserLogins]; + +DECLARE @var3 nvarchar(max); +SELECT @var3 = QUOTENAME([d].[name]) +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[AspNetUserLogins]') AND [c].[name] = N'ProviderKey'); +IF @var3 IS NOT NULL EXEC(N'ALTER TABLE [AspNetUserLogins] DROP CONSTRAINT ' + @var3 + ';'); +ALTER TABLE [AspNetUserLogins] ALTER COLUMN [ProviderKey] nvarchar(128) NOT NULL; + +DECLARE @var4 nvarchar(max); +SELECT @var4 = QUOTENAME([d].[name]) +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[AspNetUserLogins]') AND [c].[name] = N'LoginProvider'); +IF @var4 IS NOT NULL EXEC(N'ALTER TABLE [AspNetUserLogins] DROP CONSTRAINT ' + @var4 + ';'); +ALTER TABLE [AspNetUserLogins] ALTER COLUMN [LoginProvider] nvarchar(128) NOT NULL; + +ALTER TABLE [AspNetUserLogins] ADD CONSTRAINT [PK_AspNetUserLogins] PRIMARY KEY ([LoginProvider], [ProviderKey]); + +CREATE TABLE [AspNetUserPasskeys] ( + [CredentialId] varbinary(1024) NOT NULL, + [UserId] nvarchar(450) NOT NULL, + [Data] nvarchar(max) NOT NULL, + CONSTRAINT [PK_AspNetUserPasskeys] PRIMARY KEY ([CredentialId]), + CONSTRAINT [FK_AspNetUserPasskeys_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE +); + +CREATE INDEX [IX_AspNetUserPasskeys_UserId] ON [AspNetUserPasskeys] ([UserId]); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20260618105204_Passkeys', N'10.0.11'); + +COMMIT; +GO \ No newline at end of file diff --git a/Complete migrations (up to v13.1)/SqlServer/Operational.sql b/Complete migrations (up to v13.1)/SqlServer/Operational.sql new file mode 100644 index 0000000..b4affae --- /dev/null +++ b/Complete migrations (up to v13.1)/SqlServer/Operational.sql @@ -0,0 +1,232 @@ +IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL +BEGIN + CREATE TABLE [__EFMigrationsHistory] ( + [MigrationId] nvarchar(150) NOT NULL, + [ProductVersion] nvarchar(32) NOT NULL, + CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId]) + ); +END; +GO + +BEGIN TRANSACTION; +CREATE TABLE [PersistedGrants] ( + [Key] nvarchar(200) NOT NULL, + [ClientId] nvarchar(200) NOT NULL, + [CreationTime] datetime2 NOT NULL, + [Data] nvarchar(max) NOT NULL, + [Expiration] datetime2 NULL, + [SubjectId] nvarchar(200) NULL, + [Type] nvarchar(50) NOT NULL, + CONSTRAINT [PK_PersistedGrants] PRIMARY KEY ([Key]) +); + +CREATE INDEX [IX_PersistedGrants_SubjectId_ClientId_Type] ON [PersistedGrants] ([SubjectId], [ClientId], [Type]); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20171026080756_InitialSqlServerOperationalDbMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20171122163758_UserSearchOptimizationOperationalDbMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +CREATE TABLE [DeviceCodes] ( + [DeviceCode] nvarchar(200) NOT NULL, + [UserCode] nvarchar(200) NOT NULL, + [SubjectId] nvarchar(200) NULL, + [ClientId] nvarchar(200) NOT NULL, + [CreationTime] datetime2 NOT NULL, + [Expiration] datetime2 NOT NULL, + [Data] nvarchar(max) NOT NULL, + CONSTRAINT [PK_DeviceCodes] PRIMARY KEY ([UserCode]) +); + +CREATE UNIQUE INDEX [IX_DeviceCodes_DeviceCode] ON [DeviceCodes] ([DeviceCode]); + +CREATE UNIQUE INDEX [IX_DeviceCodes_UserCode] ON [DeviceCodes] ([UserCode]); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20181109164134_IdentityServer2.3SqlServerSqlServerOperationalDbMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; + +BEGIN TRANSACTION + +-- Alter Existing Tables + +-- DeviceCodes + +ALTER TABLE DeviceCodes + ADD SessionId NVARCHAR (100) NULL + +ALTER TABLE DeviceCodes + ADD [Description] NVARCHAR (200) NULL + + + +-- PersistedGrants + +ALTER TABLE PersistedGrants + ADD SessionId NVARCHAR (100) NULL + +ALTER TABLE PersistedGrants + ADD [Description] NVARCHAR (200) NULL + +ALTER TABLE PersistedGrants + ADD ConsumedTime DATETIME2 (7) NULL + +CREATE NONCLUSTERED INDEX IX_PersistedGrants_SubjectId_SessionId_Type + ON PersistedGrants(SubjectId ASC, SessionId ASC, Type ASC); + +COMMIT TRANSACTION; + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20200702080430_V3toV4SqlServerOperationalDbMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +CREATE TABLE [Keys] ( + [Id] nvarchar(450) NOT NULL, + [Version] int NOT NULL, + [Created] datetime2 NOT NULL, + [Use] nvarchar(450) NULL, + [Algorithm] nvarchar(100) NOT NULL, + [IsX509Certificate] bit NOT NULL, + [DataProtected] bit NOT NULL, + [Data] nvarchar(max) NOT NULL, + CONSTRAINT [PK_Keys] PRIMARY KEY ([Id]) +); + +CREATE INDEX [IX_Keys_Use] ON [Keys] ([Use]); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20210105164242_DuendeSqlServerMigrationOperational', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +CREATE INDEX [IX_PersistedGrants_ConsumedTime] ON [PersistedGrants] ([ConsumedTime]); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20210602110024_PersistedGrantConsumeTimeSqlServerOperationalMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +ALTER TABLE [PersistedGrants] DROP CONSTRAINT [PK_PersistedGrants]; + +DECLARE @var nvarchar(max); +SELECT @var = QUOTENAME([d].[name]) +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[PersistedGrants]') AND [c].[name] = N'Key'); +IF @var IS NOT NULL EXEC(N'ALTER TABLE [PersistedGrants] DROP CONSTRAINT ' + @var + ';'); +ALTER TABLE [PersistedGrants] ALTER COLUMN [Key] nvarchar(200) NULL; + +ALTER TABLE [PersistedGrants] ADD [Id] bigint NOT NULL IDENTITY; + +ALTER TABLE [PersistedGrants] ADD CONSTRAINT [PK_PersistedGrants] PRIMARY KEY ([Id]); + +CREATE TABLE [ServerSideSessions] ( + [Id] int NOT NULL IDENTITY, + [Key] nvarchar(100) NOT NULL, + [Scheme] nvarchar(100) NOT NULL, + [SubjectId] nvarchar(100) NOT NULL, + [SessionId] nvarchar(100) NULL, + [DisplayName] nvarchar(100) NULL, + [Created] datetime2 NOT NULL, + [Renewed] datetime2 NOT NULL, + [Expires] datetime2 NULL, + [Data] nvarchar(max) NOT NULL, + CONSTRAINT [PK_ServerSideSessions] PRIMARY KEY ([Id]) +); + +CREATE UNIQUE INDEX [IX_PersistedGrants_Key] ON [PersistedGrants] ([Key]) WHERE [Key] IS NOT NULL; + +CREATE INDEX [IX_ServerSideSessions_DisplayName] ON [ServerSideSessions] ([DisplayName]); + +CREATE INDEX [IX_ServerSideSessions_Expires] ON [ServerSideSessions] ([Expires]); + +CREATE UNIQUE INDEX [IX_ServerSideSessions_Key] ON [ServerSideSessions] ([Key]); + +CREATE INDEX [IX_ServerSideSessions_SessionId] ON [ServerSideSessions] ([SessionId]); + +CREATE INDEX [IX_ServerSideSessions_SubjectId] ON [ServerSideSessions] ([SubjectId]); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20220608091949_Duende61Update', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +ALTER TABLE [ServerSideSessions] DROP CONSTRAINT [PK_ServerSideSessions]; + +DECLARE @var1 nvarchar(max); +SELECT @var1 = QUOTENAME([d].[name]) +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[ServerSideSessions]') AND [c].[name] = N'Id'); +IF @var1 IS NOT NULL EXEC(N'ALTER TABLE [ServerSideSessions] DROP CONSTRAINT ' + @var1 + ';'); +ALTER TABLE [ServerSideSessions] ALTER COLUMN [Id] bigint NOT NULL; + +ALTER TABLE [ServerSideSessions] ADD CONSTRAINT [PK_ServerSideSessions] PRIMARY KEY ([Id]); + +CREATE TABLE [PushedAuthorizationRequests] ( + [Id] bigint NOT NULL IDENTITY, + [ReferenceValueHash] nvarchar(max) NULL, + [ExpiresAtUtc] datetime2 NOT NULL, + [Parameters] nvarchar(max) NULL, + CONSTRAINT [PK_PushedAuthorizationRequests] PRIMARY KEY ([Id]) +); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20240108131028_DuendeV7SqlServerOperationalMigration', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +DECLARE @var2 nvarchar(max); +SELECT @var2 = QUOTENAME([d].[name]) +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[PushedAuthorizationRequests]') AND [c].[name] = N'ReferenceValueHash'); +IF @var2 IS NOT NULL EXEC(N'ALTER TABLE [PushedAuthorizationRequests] DROP CONSTRAINT ' + @var2 + ';'); +UPDATE [PushedAuthorizationRequests] SET [ReferenceValueHash] = N'' WHERE [ReferenceValueHash] IS NULL; +ALTER TABLE [PushedAuthorizationRequests] ALTER COLUMN [ReferenceValueHash] nvarchar(64) NOT NULL; +ALTER TABLE [PushedAuthorizationRequests] ADD DEFAULT N'' FOR [ReferenceValueHash]; + +DECLARE @var3 nvarchar(max); +SELECT @var3 = QUOTENAME([d].[name]) +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[PushedAuthorizationRequests]') AND [c].[name] = N'Parameters'); +IF @var3 IS NOT NULL EXEC(N'ALTER TABLE [PushedAuthorizationRequests] DROP CONSTRAINT ' + @var3 + ';'); +UPDATE [PushedAuthorizationRequests] SET [Parameters] = N'' WHERE [Parameters] IS NULL; +ALTER TABLE [PushedAuthorizationRequests] ALTER COLUMN [Parameters] nvarchar(max) NOT NULL; +ALTER TABLE [PushedAuthorizationRequests] ADD DEFAULT N'' FOR [Parameters]; + +CREATE INDEX [IX_PushedAuthorizationRequests_ExpiresAtUtc] ON [PushedAuthorizationRequests] ([ExpiresAtUtc]); + +CREATE UNIQUE INDEX [IX_PushedAuthorizationRequests_ReferenceValueHash] ON [PushedAuthorizationRequests] ([ReferenceValueHash]); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20250121150503_DuendeV7.1SqlServerOperationalMigration', N'10.0.11'); + +COMMIT; +GO + diff --git a/Complete migrations (up to v13.1)/SqlServer/SamlArtifact.sql b/Complete migrations (up to v13.1)/SqlServer/SamlArtifact.sql new file mode 100644 index 0000000..64fb61c --- /dev/null +++ b/Complete migrations (up to v13.1)/SqlServer/SamlArtifact.sql @@ -0,0 +1,29 @@ +IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL +BEGIN + CREATE TABLE [__EFMigrationsHistory] ( + [MigrationId] nvarchar(150) NOT NULL, + [ProductVersion] nvarchar(32) NOT NULL, + CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId]) + ); +END; +GO + +BEGIN TRANSACTION; +CREATE TABLE [SamlArtifacts] ( + [Key] nvarchar(200) NOT NULL, + [EntityId] nvarchar(200) NOT NULL, + [MessageType] nvarchar(50) NOT NULL, + [Message] nvarchar(max) NOT NULL, + [CreationTime] datetime2 NOT NULL, + [Expiration] datetime2 NOT NULL, + CONSTRAINT [PK_SamlArtifacts] PRIMARY KEY ([Key]) +); + +CREATE INDEX [IX_SamlArtifacts_Expiration] ON [SamlArtifacts] ([Expiration]); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20220114164649_SqlServerSamlArtifactInitialMigration', N'10.0.11'); + +COMMIT; +GO + diff --git a/Complete migrations (up to v13.1)/SqlServer/SamlConfiguration.sql b/Complete migrations (up to v13.1)/SqlServer/SamlConfiguration.sql new file mode 100644 index 0000000..b375c2f --- /dev/null +++ b/Complete migrations (up to v13.1)/SqlServer/SamlConfiguration.sql @@ -0,0 +1,124 @@ +IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL +BEGIN + CREATE TABLE [__EFMigrationsHistory] ( + [MigrationId] nvarchar(150) NOT NULL, + [ProductVersion] nvarchar(32) NOT NULL, + CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId]) + ); +END; +GO + +BEGIN TRANSACTION; +CREATE TABLE [ServiceProviders] ( + [Id] int NOT NULL IDENTITY, + [EntityId] nvarchar(200) NOT NULL, + [EncryptionCertificate] varbinary(max) NULL, + [SignAssertions] bit NOT NULL, + [EncryptAssertions] bit NOT NULL, + [RequireSamlRequestDestination] bit NOT NULL, + CONSTRAINT [PK_ServiceProviders] PRIMARY KEY ([Id]) +); + +CREATE TABLE [ServiceProviderAssertionConsumerServices] ( + [Id] int NOT NULL IDENTITY, + [Binding] nvarchar(2000) NOT NULL, + [Location] nvarchar(2000) NOT NULL, + [Index] int NOT NULL, + [IsDefault] bit NOT NULL, + [ServiceProviderId] int NOT NULL, + CONSTRAINT [PK_ServiceProviderAssertionConsumerServices] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ServiceProviderAssertionConsumerServices_ServiceProviders_ServiceProviderId] FOREIGN KEY ([ServiceProviderId]) REFERENCES [ServiceProviders] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [ServiceProviderClaimMappings] ( + [Id] int NOT NULL IDENTITY, + [OriginalClaimType] nvarchar(250) NOT NULL, + [NewClaimType] nvarchar(250) NOT NULL, + [ServiceProviderId] int NOT NULL, + CONSTRAINT [PK_ServiceProviderClaimMappings] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ServiceProviderClaimMappings_ServiceProviders_ServiceProviderId] FOREIGN KEY ([ServiceProviderId]) REFERENCES [ServiceProviders] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [ServiceProviderSignCertificates] ( + [Id] int NOT NULL IDENTITY, + [Certificate] varbinary(max) NOT NULL, + [ServiceProviderId] int NOT NULL, + CONSTRAINT [PK_ServiceProviderSignCertificates] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ServiceProviderSignCertificates_ServiceProviders_ServiceProviderId] FOREIGN KEY ([ServiceProviderId]) REFERENCES [ServiceProviders] ([Id]) ON DELETE CASCADE +); + +CREATE TABLE [ServiceProviderSingleLogoutServices] ( + [Id] int NOT NULL IDENTITY, + [Binding] nvarchar(2000) NOT NULL, + [Location] nvarchar(2000) NOT NULL, + [Index] int NOT NULL, + [IsDefault] bit NOT NULL, + [ServiceProviderId] int NOT NULL, + CONSTRAINT [PK_ServiceProviderSingleLogoutServices] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ServiceProviderSingleLogoutServices_ServiceProviders_ServiceProviderId] FOREIGN KEY ([ServiceProviderId]) REFERENCES [ServiceProviders] ([Id]) ON DELETE CASCADE +); + +CREATE INDEX [IX_ServiceProviderAssertionConsumerServices_ServiceProviderId] ON [ServiceProviderAssertionConsumerServices] ([ServiceProviderId]); + +CREATE INDEX [IX_ServiceProviderClaimMappings_ServiceProviderId] ON [ServiceProviderClaimMappings] ([ServiceProviderId]); + +CREATE UNIQUE INDEX [IX_ServiceProviders_EntityId] ON [ServiceProviders] ([EntityId]); + +CREATE INDEX [IX_ServiceProviderSignCertificates_ServiceProviderId] ON [ServiceProviderSignCertificates] ([ServiceProviderId]); + +CREATE INDEX [IX_ServiceProviderSingleLogoutServices_ServiceProviderId] ON [ServiceProviderSingleLogoutServices] ([ServiceProviderId]); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20190305134515_SqlServerSaml2PInitial', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +ALTER TABLE [ServiceProviders] ADD [AllowIdpInitiatedSso] bit NOT NULL DEFAULT CAST(0 AS bit); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20200225104531_Added AllowIdpInitiatedSso', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +ALTER TABLE [ServiceProviders] ADD [RequireAuthenticationRequestsSigned] bit NULL; + +EXEC sp_rename N'[ServiceProviders].[RequireSamlRequestDestination]', N'RequireSamlMessageDestination', 'COLUMN'; + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20200914075545_RskSamlV3', N'10.0.11'); + +COMMIT; +GO + +BEGIN TRANSACTION; +ALTER TABLE [ServiceProviders] ADD [ArtifactDeliveryBindingType] nvarchar(max) NULL; + +ALTER TABLE [ServiceProviders] ADD [NameIdentifierFormat] nvarchar(max) NULL; + +ALTER TABLE [ServiceProviders] ADD [RequireSignedArtifactResolveRequests] bit NULL; + +ALTER TABLE [ServiceProviders] ADD [RequireSignedArtifactResponses] bit NULL; + +CREATE TABLE [ServiceProviderArtifactResolutionServices] ( + [Id] int NOT NULL IDENTITY, + [Binding] nvarchar(2000) NOT NULL, + [Location] nvarchar(2000) NOT NULL, + [Index] int NOT NULL, + [IsDefault] bit NOT NULL, + [ServiceProviderId] int NOT NULL, + CONSTRAINT [PK_ServiceProviderArtifactResolutionServices] PRIMARY KEY ([Id]), + CONSTRAINT [FK_ServiceProviderArtifactResolutionServices_ServiceProviders_ServiceProviderId] FOREIGN KEY ([ServiceProviderId]) REFERENCES [ServiceProviders] ([Id]) ON DELETE CASCADE +); + +CREATE INDEX [IX_ServiceProviderArtifactResolutionServices_ServiceProviderId] ON [ServiceProviderArtifactResolutionServices] ([ServiceProviderId]); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20220112143907_RskSamlPackageUpdate', N'10.0.11'); + +COMMIT; +GO + diff --git a/Complete migrations (up to v13.1)/SqlServer/WsFederationConfiguration.sql b/Complete migrations (up to v13.1)/SqlServer/WsFederationConfiguration.sql new file mode 100644 index 0000000..b74b51b --- /dev/null +++ b/Complete migrations (up to v13.1)/SqlServer/WsFederationConfiguration.sql @@ -0,0 +1,40 @@ +IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL +BEGIN + CREATE TABLE [__EFMigrationsHistory] ( + [MigrationId] nvarchar(150) NOT NULL, + [ProductVersion] nvarchar(32) NOT NULL, + CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId]) + ); +END; +GO + +BEGIN TRANSACTION; +CREATE TABLE [RelyingParties] ( + [Id] int NOT NULL IDENTITY, + [Realm] nvarchar(200) NOT NULL, + [TokenType] nvarchar(max) NULL, + [SignatureAlgorithm] nvarchar(max) NULL, + [DigestAlgorithm] nvarchar(max) NULL, + [SamlNameIdentifierFormat] nvarchar(max) NULL, + CONSTRAINT [PK_RelyingParties] PRIMARY KEY ([Id]) +); + +CREATE TABLE [RelyingPartyClaimMappings] ( + [Id] int NOT NULL IDENTITY, + [OriginalClaimType] nvarchar(250) NOT NULL, + [NewClaimType] nvarchar(250) NOT NULL, + [RelyingPartyId] int NOT NULL, + CONSTRAINT [PK_RelyingPartyClaimMappings] PRIMARY KEY ([Id]), + CONSTRAINT [FK_RelyingPartyClaimMappings_RelyingParties_RelyingPartyId] FOREIGN KEY ([RelyingPartyId]) REFERENCES [RelyingParties] ([Id]) ON DELETE CASCADE +); + +CREATE UNIQUE INDEX [IX_RelyingParties_Realm] ON [RelyingParties] ([Realm]); + +CREATE INDEX [IX_RelyingPartyClaimMappings_RelyingPartyId] ON [RelyingPartyClaimMappings] ([RelyingPartyId]); + +INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion]) +VALUES (N'20190305133618_SqlServerWsfederationInitial', N'10.0.11'); + +COMMIT; +GO +