ProGet SQL diff

Created Diff expires in
13 removals
Lines
Total
Removed
Words
Total
Removed
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
104 lines
36 additions
Lines
Total
Added
Words
Total
Added
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
127 lines
USE [ProGet]
USE [ProGet]
GO
GO
/****** Object: StoredProcedure [dbo].[PackageNameIds_GetOrCreatePackageNameId] Script Date: 16-Oct-2025 5:21:31 PM ******/
/****** Object: StoredProcedure [dbo].[PackageNameIds_GetOrCreatePackageNameId] Script Date: 16-Oct-2025 5:21:31 PM ******/
SET ANSI_NULLS ON
SET ANSI_NULLS ON
GO
GO
SET QUOTED_IDENTIFIER ON
SET QUOTED_IDENTIFIER ON
GO
GO


ALTER PROCEDURE [dbo].[PackageNameIds_GetOrCreatePackageNameId]
ALTER PROCEDURE [dbo].[PackageNameIds_GetOrCreatePackageNameId]
(
(
@PackageType_Name VARCHAR(20),
@PackageType_Name VARCHAR(20),
@PackageGroup_Name VARCHAR(200),
@PackageGroup_Name VARCHAR(200),
@Package_Name VARCHAR(200),
@Package_Name VARCHAR(200),
@CreateId_Indicator YNINDICATOR = 'Y',
@CreateId_Indicator YNINDICATOR = 'Y',
@PackageName_Id INT = NULL OUT
@PackageName_Id INT = NULL OUT
)
)
AS
AS
BEGIN
BEGIN


SET NOCOUNT ON
SET NOCOUNT ON


-- Currently only rpm has case senstive mapping.
-- Currently only rpm has case senstive mapping.
-- Convert to function if another is added.
-- Convert to function if another is added.
IF @PackageType_Name IN ('rpm')
IF @PackageType_Name IN ('rpm')


SELECT @PackageName_Id = [PackageName_Id]
SELECT @PackageName_Id = [PackageName_Id]
FROM [PackageNameIds]
FROM [PackageNameIds]
WHERE [PackageType_Name] = @PackageType_Name
WHERE [PackageType_Name] = @PackageType_Name
AND (([PackageGroup_Name] IS NULL AND @PackageGroup_Name IS NULL) OR ([PackageGroup_Name] = @PackageGroup_Name))
AND (([PackageGroup_Name] IS NULL AND @PackageGroup_Name IS NULL) OR ([PackageGroup_Name] = @PackageGroup_Name))
AND [Package_Name] = @Package_Name
AND [Package_Name] = @Package_Name


ELSE BEGIN
ELSE BEGIN


DECLARE @Actual_PackageGroup_Name VARCHAR(200)
DECLARE @Actual_PackageGroup_Name VARCHAR(200)
DECLARE @Actual_Package_Name VARCHAR(200)
DECLARE @Actual_Package_Name VARCHAR(200)


-- prefer an exact case match if there are multiple entries
-- prefer an exact case match if there are multiple entries
SELECT @PackageName_Id = [PackageName_Id],
SELECT TOP (1)
@Actual_PackageGroup_Name = [PackageGroup_Name],
@PackageName_Id = p.[PackageName_Id],
@Actual_Package_Name = [Package_Name]
@Actual_PackageGroup_Name = p.[PackageGroup_Name],
FROM [PackageNameIds]
@Actual_Package_Name = p.[Package_Name]
WHERE [PackageType_Name] = @PackageType_Name
FROM dbo.[PackageNameIds] AS p
AND (([PackageGroup_Name_Lower] IS NULL AND @PackageGroup_Name IS NULL) OR ([PackageGroup_Name_Lower] = LOWER(@PackageGroup_Name)))
WHERE
AND [Package_Name_Lower] = LOWER(@Package_Name)
p.[PackageType_Name] = @PackageType_Name
ORDER BY CASE WHEN [Package_Name] = @Actual_Package_Name AND (([PackageGroup_Name] IS NULL AND @PackageGroup_Name IS NULL) OR [PackageGroup_Name] = @PackageGroup_Name) THEN 0 ELSE 1 END, [PackageName_Id] DESC
AND (
(p.[PackageGroup_Name_Lower] IS NULL AND @PackageGroup_Name IS NULL)
OR p.[PackageGroup_Name_Lower] = LOWER(@PackageGroup_Name)
)
AND p.[Package_Name_Lower] = LOWER(@Package_Name)
ORDER BY
-- 1) Exact case-sensitive match on both name & group wins
CASE WHEN
p.[Package_Name] = @Package_Name COLLATE Latin1_General_CS_AS
AND (
(p.[PackageGroup_Name] IS NULL AND @PackageGroup_Name IS NULL)
OR p.[PackageGroup_Name] = @PackageGroup_Name COLLATE Latin1_General_CS_AS
)
THEN 0 ELSE 1 END,
-- 2) If ties, prefer exact case on name
CASE WHEN p.[Package_Name] = @Package_Name COLLATE Latin1_General_CS_AS
THEN 0 ELSE 1 END,
-- 3) Then prefer exact case on group (with proper NULL semantics)
CASE WHEN
(p.[PackageGroup_Name] IS NULL AND @PackageGroup_Name IS NULL)
OR p.[PackageGroup_Name] = @PackageGroup_Name COLLATE Latin1_General_CS_AS
THEN 0 ELSE 1 END,
-- 4) Stable fallback (oldest record)
p.[PackageName_Id] ASC;


-- if the cases don't match and we are adding a package, update the row to the newer one
-- if the cases don't match and we are adding a package, update the row to the newer one
IF @CreateId_Indicator = 'Y' AND @PackageName_Id IS NOT NULL
IF @CreateId_Indicator = 'Y' AND @PackageName_Id IS NOT NULL
AND (@Package_Name <> @Actual_Package_Name COLLATE Latin1_General_CS_AS
AND (@Package_Name <> @Actual_Package_Name COLLATE Latin1_General_CS_AS
OR (@PackageGroup_Name IS NOT NULL AND @PackageGroup_Name <> @Actual_PackageGroup_Name COLLATE Latin1_General_CS_AS))
OR (@PackageGroup_Name IS NOT NULL AND @PackageGroup_Name <> @Actual_PackageGroup_Name COLLATE Latin1_General_CS_AS))
BEGIN
BEGIN


UPDATE [PackageNameIds]
UPDATE [PackageNameIds]
SET [PackageGroup_Name] = @PackageGroup_Name,
SET [PackageGroup_Name] = @PackageGroup_Name,
[Package_Name] = @Package_Name
[Package_Name] = @Package_Name
WHERE [PackageName_Id] = @PackageName_Id
WHERE [PackageName_Id] = @PackageName_Id


END
END


END
END


IF @CreateId_Indicator = 'N' OR @PackageName_Id IS NOT NULL
IF @CreateId_Indicator = 'N' OR @PackageName_Id IS NOT NULL
RETURN
RETURN


BEGIN TRY
BEGIN TRY
INSERT INTO [PackageNameIds]
INSERT INTO [PackageNameIds]
(
(
[PackageType_Name],
[PackageType_Name],
[PackageGroup_Name],
[PackageGroup_Name],
[Package_Name]
[Package_Name]
)
)
VALUES
VALUES
(
(
@PackageType_Name,
@PackageType_Name,
@PackageGroup_Name,
@PackageGroup_Name,
@Package_Name
@Package_Name
)
)


SET @PackageName_Id = SCOPE_IDENTITY()
SET @PackageName_Id = SCOPE_IDENTITY()


END TRY BEGIN CATCH
END TRY BEGIN CATCH


-- Currently only rpm has case senstive mapping.
-- Currently only rpm has case senstive mapping.
-- Convert to function if another is added.
-- Convert to function if another is added.
IF @PackageType_Name IN ('rpm')
IF @PackageType_Name IN ('rpm')


SELECT @PackageName_Id = [PackageName_Id]
SELECT @PackageName_Id = [PackageName_Id]
FROM [PackageNameIds] WITH (NOLOCK)
FROM [PackageNameIds] WITH (NOLOCK)
WHERE [PackageType_Name] = @PackageType_Name
WHERE [PackageType_Name] = @PackageType_Name
AND (([PackageGroup_Name] IS NULL AND @PackageGroup_Name IS NULL) OR ([PackageGroup_Name] = @PackageGroup_Name))
AND (([PackageGroup_Name] IS NULL AND @PackageGroup_Name IS NULL) OR ([PackageGroup_Name] = @PackageGroup_Name))
AND [Package_Name] = @Package_Name
AND [Package_Name] = @Package_Name


ELSE
ELSE


SELECT @PackageName_Id = [PackageName_Id]
SELECT @PackageName_Id = [PackageName_Id]
FROM [PackageNameIds] WITH (NOLOCK)
FROM [PackageNameIds] WITH (NOLOCK)
WHERE [PackageType_Name] = @PackageType_Name
WHERE [PackageType_Name] = @PackageType_Name
AND (([PackageGroup_Name_Lower] IS NULL AND @PackageGroup_Name IS NULL) OR ([PackageGroup_Name_Lower] = LOWER(@PackageGroup_Name)))
AND (([PackageGroup_Name_Lower] IS NULL AND @PackageGroup_Name IS NULL) OR ([PackageGroup_Name_Lower] = LOWER(@PackageGroup_Name)))
AND [Package_Name_Lower] = LOWER(@Package_Name)
AND [Package_Name_Lower] = LOWER(@Package_Name)


END CATCH
END CATCH


END
END