PlotDirector/PlotLine/Sql/180_Phase27G_EntityPreferredNameAliases.sql

354 lines
11 KiB
Transact-SQL

SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
INSERT dbo.CharacterAliases (CharacterID, Alias, SortOrder)
SELECT c.CharacterID,
LTRIM(RTRIM(c.CharacterName)),
ISNULL((SELECT MAX(ca.SortOrder) FROM dbo.CharacterAliases ca WHERE ca.CharacterID = c.CharacterID), 0) + 10
FROM dbo.Characters c
WHERE NULLIF(LTRIM(RTRIM(c.CharacterName)), N'') IS NOT NULL
AND NOT EXISTS
(
SELECT 1
FROM dbo.CharacterAliases ca
WHERE ca.CharacterID = c.CharacterID
AND UPPER(LTRIM(RTRIM(ca.Alias))) = UPPER(LTRIM(RTRIM(c.CharacterName)))
);
GO
INSERT dbo.LocationAliases (LocationID, Alias, SortOrder)
SELECT l.LocationID,
LTRIM(RTRIM(l.LocationName)),
ISNULL((SELECT MAX(la.SortOrder) FROM dbo.LocationAliases la WHERE la.LocationID = l.LocationID), 0) + 10
FROM dbo.Locations l
WHERE NULLIF(LTRIM(RTRIM(l.LocationName)), N'') IS NOT NULL
AND NOT EXISTS
(
SELECT 1
FROM dbo.LocationAliases la
WHERE la.LocationID = l.LocationID
AND UPPER(LTRIM(RTRIM(la.Alias))) = UPPER(LTRIM(RTRIM(l.LocationName)))
);
GO
CREATE OR ALTER PROCEDURE dbo.CharacterAlias_Add
@CharacterID int,
@Alias nvarchar(200),
@SortOrder int = NULL
AS
BEGIN
SET NOCOUNT ON;
SET @Alias = LTRIM(RTRIM(@Alias));
IF NULLIF(@Alias, N'') IS NULL
THROW 51000, 'Enter an alias before saving.', 1;
DECLARE @ExistingCharacterAliasID int;
SELECT TOP (1) @ExistingCharacterAliasID = CharacterAliasID
FROM dbo.CharacterAliases
WHERE CharacterID = @CharacterID
AND UPPER(LTRIM(RTRIM(Alias))) = UPPER(@Alias)
ORDER BY CharacterAliasID;
IF @ExistingCharacterAliasID IS NOT NULL
BEGIN
IF @SortOrder IS NOT NULL
UPDATE dbo.CharacterAliases SET SortOrder = @SortOrder WHERE CharacterAliasID = @ExistingCharacterAliasID;
SELECT @ExistingCharacterAliasID AS CharacterAliasID;
RETURN;
END
IF @SortOrder IS NULL
SELECT @SortOrder = ISNULL(MAX(SortOrder), 0) + 10 FROM dbo.CharacterAliases WHERE CharacterID = @CharacterID;
INSERT dbo.CharacterAliases (CharacterID, Alias, SortOrder)
VALUES (@CharacterID, @Alias, @SortOrder);
SELECT CAST(SCOPE_IDENTITY() AS int) AS CharacterAliasID;
END;
GO
CREATE OR ALTER PROCEDURE dbo.CharacterAlias_Update
@CharacterAliasID int,
@Alias nvarchar(200),
@SortOrder int = NULL
AS
BEGIN
SET NOCOUNT ON;
SET @Alias = LTRIM(RTRIM(@Alias));
IF NULLIF(@Alias, N'') IS NULL
THROW 51000, 'Enter an alias before saving.', 1;
DECLARE @CharacterID int;
SELECT @CharacterID = CharacterID FROM dbo.CharacterAliases WHERE CharacterAliasID = @CharacterAliasID;
IF EXISTS
(
SELECT 1
FROM dbo.CharacterAliases
WHERE CharacterID = @CharacterID
AND CharacterAliasID <> @CharacterAliasID
AND UPPER(LTRIM(RTRIM(Alias))) = UPPER(@Alias)
)
BEGIN
DELETE dbo.CharacterAliases WHERE CharacterAliasID = @CharacterAliasID;
RETURN;
END
UPDATE dbo.CharacterAliases
SET Alias = @Alias,
SortOrder = COALESCE(@SortOrder, SortOrder)
WHERE CharacterAliasID = @CharacterAliasID;
END;
GO
CREATE OR ALTER PROCEDURE dbo.LocationAlias_Add
@LocationID int,
@Alias nvarchar(200),
@SortOrder int = NULL
AS
BEGIN
SET NOCOUNT ON;
SET @Alias = LTRIM(RTRIM(@Alias));
IF NULLIF(@Alias, N'') IS NULL
THROW 51000, 'Enter an alias before saving.', 1;
DECLARE @ExistingLocationAliasID int;
SELECT TOP (1) @ExistingLocationAliasID = LocationAliasID
FROM dbo.LocationAliases
WHERE LocationID = @LocationID
AND UPPER(LTRIM(RTRIM(Alias))) = UPPER(@Alias)
ORDER BY LocationAliasID;
IF @ExistingLocationAliasID IS NOT NULL
BEGIN
IF @SortOrder IS NOT NULL
UPDATE dbo.LocationAliases SET SortOrder = @SortOrder WHERE LocationAliasID = @ExistingLocationAliasID;
SELECT @ExistingLocationAliasID AS LocationAliasID;
RETURN;
END
IF @SortOrder IS NULL
SELECT @SortOrder = ISNULL(MAX(SortOrder), 0) + 10 FROM dbo.LocationAliases WHERE LocationID = @LocationID;
INSERT dbo.LocationAliases (LocationID, Alias, SortOrder)
VALUES (@LocationID, @Alias, @SortOrder);
SELECT CAST(SCOPE_IDENTITY() AS int) AS LocationAliasID;
END;
GO
CREATE OR ALTER PROCEDURE dbo.LocationAlias_Update
@LocationAliasID int,
@Alias nvarchar(200),
@SortOrder int = NULL
AS
BEGIN
SET NOCOUNT ON;
SET @Alias = LTRIM(RTRIM(@Alias));
IF NULLIF(@Alias, N'') IS NULL
THROW 51000, 'Enter an alias before saving.', 1;
DECLARE @LocationID int;
SELECT @LocationID = LocationID FROM dbo.LocationAliases WHERE LocationAliasID = @LocationAliasID;
IF EXISTS
(
SELECT 1
FROM dbo.LocationAliases
WHERE LocationID = @LocationID
AND LocationAliasID <> @LocationAliasID
AND UPPER(LTRIM(RTRIM(Alias))) = UPPER(@Alias)
)
BEGIN
DELETE dbo.LocationAliases WHERE LocationAliasID = @LocationAliasID;
RETURN;
END
UPDATE dbo.LocationAliases
SET Alias = @Alias,
SortOrder = COALESCE(@SortOrder, SortOrder)
WHERE LocationAliasID = @LocationAliasID;
END;
GO
CREATE OR ALTER PROCEDURE dbo.Character_SetPreferredName
@CharacterID int,
@PreferredName nvarchar(200)
AS
BEGIN
SET NOCOUNT ON;
SET @PreferredName = LTRIM(RTRIM(@PreferredName));
IF NULLIF(@PreferredName, N'') IS NULL
THROW 51000, 'Choose a known name before setting the preferred name.', 1;
IF NOT EXISTS
(
SELECT 1
FROM dbo.CharacterAliases
WHERE CharacterID = @CharacterID
AND UPPER(LTRIM(RTRIM(Alias))) = UPPER(@PreferredName)
)
THROW 51000, 'The preferred name must already belong to this character.', 1;
UPDATE dbo.Characters
SET CharacterName = @PreferredName,
UpdatedDate = SYSUTCDATETIME()
WHERE CharacterID = @CharacterID;
END;
GO
CREATE OR ALTER PROCEDURE dbo.Location_SetPreferredName
@LocationID int,
@PreferredName nvarchar(200)
AS
BEGIN
SET NOCOUNT ON;
SET @PreferredName = LTRIM(RTRIM(@PreferredName));
IF NULLIF(@PreferredName, N'') IS NULL
THROW 51000, 'Choose a known name before setting the preferred name.', 1;
IF NOT EXISTS
(
SELECT 1
FROM dbo.LocationAliases
WHERE LocationID = @LocationID
AND UPPER(LTRIM(RTRIM(Alias))) = UPPER(@PreferredName)
)
THROW 51000, 'The preferred name must already belong to this location.', 1;
UPDATE dbo.Locations
SET LocationName = @PreferredName,
UpdatedDate = SYSUTCDATETIME()
WHERE LocationID = @LocationID;
END;
GO
CREATE OR ALTER PROCEDURE dbo.Character_Save
@CharacterID int = NULL,
@ProjectID int,
@CharacterName nvarchar(200),
@ShortName nvarchar(100) = NULL,
@SexValueID int = NULL,
@Sex nvarchar(100) = NULL,
@BirthDate date = NULL,
@AgeAtSeriesStart int = NULL,
@AgeReferenceSceneID int = NULL,
@Height nvarchar(50) = NULL,
@EyeColour nvarchar(50) = NULL,
@CharacterImportance int = NULL,
@ShowInQuickAddBar bit = 0,
@DefaultDescription nvarchar(max) = NULL,
@ImagePath nvarchar(500) = NULL,
@ThumbnailPath nvarchar(500) = NULL
AS
BEGIN
SET NOCOUNT ON;
SET @CharacterName = LTRIM(RTRIM(@CharacterName));
IF @CharacterID IS NULL OR @CharacterID = 0
BEGIN
INSERT dbo.Characters (ProjectID, CharacterName, ShortName, SexValueID, Sex, BirthDate, AgeAtSeriesStart, AgeReferenceSceneID, Height, EyeColour, CharacterImportance, ShowInQuickAddBar, DefaultDescription, ImagePath, ThumbnailPath)
VALUES (@ProjectID, @CharacterName, @ShortName, @SexValueID, @Sex, @BirthDate, @AgeAtSeriesStart, @AgeReferenceSceneID, @Height, @EyeColour, @CharacterImportance, @ShowInQuickAddBar, @DefaultDescription, @ImagePath, @ThumbnailPath);
SET @CharacterID = CAST(SCOPE_IDENTITY() AS int);
END
ELSE
BEGIN
UPDATE dbo.Characters
SET CharacterName = @CharacterName, ShortName = @ShortName, SexValueID = @SexValueID, Sex = @Sex, BirthDate = @BirthDate,
AgeAtSeriesStart = @AgeAtSeriesStart, AgeReferenceSceneID = @AgeReferenceSceneID,
Height = @Height, EyeColour = @EyeColour, CharacterImportance = @CharacterImportance,
ShowInQuickAddBar = @ShowInQuickAddBar, DefaultDescription = @DefaultDescription,
ImagePath = @ImagePath, ThumbnailPath = @ThumbnailPath,
UpdatedDate = SYSUTCDATETIME()
WHERE CharacterID = @CharacterID;
END
IF NULLIF(@CharacterName, N'') IS NOT NULL
AND NOT EXISTS
(
SELECT 1
FROM dbo.CharacterAliases
WHERE CharacterID = @CharacterID
AND UPPER(LTRIM(RTRIM(Alias))) = UPPER(@CharacterName)
)
BEGIN
INSERT dbo.CharacterAliases (CharacterID, Alias, SortOrder)
SELECT @CharacterID,
@CharacterName,
ISNULL(MAX(SortOrder), 0) + 10
FROM dbo.CharacterAliases
WHERE CharacterID = @CharacterID;
END
SELECT @CharacterID;
END;
GO
CREATE OR ALTER PROCEDURE dbo.Location_Save
@LocationID int = NULL,
@ProjectID int,
@ParentLocationID int = NULL,
@LocationName nvarchar(200),
@LocationTypeID int = NULL,
@Description nvarchar(max) = NULL,
@ShowInQuickAddBar bit = 0,
@ExcludeFromCompanionDetection bit = 0,
@DetectionPriority int = 50
AS
BEGIN
SET NOCOUNT ON;
SET @LocationName = LTRIM(RTRIM(@LocationName));
SET @DetectionPriority = COALESCE(@DetectionPriority, 50);
IF @LocationID IS NULL OR @LocationID = 0
BEGIN
INSERT dbo.Locations (ProjectID, ParentLocationID, LocationName, LocationTypeID, Description, ShowInQuickAddBar, ExcludeFromCompanionDetection, DetectionPriority)
VALUES (@ProjectID, @ParentLocationID, @LocationName, @LocationTypeID, @Description, @ShowInQuickAddBar, @ExcludeFromCompanionDetection, @DetectionPriority);
SET @LocationID = CAST(SCOPE_IDENTITY() AS int);
END
ELSE
BEGIN
UPDATE dbo.Locations
SET ParentLocationID = @ParentLocationID,
LocationName = @LocationName,
LocationTypeID = @LocationTypeID,
Description = @Description,
ShowInQuickAddBar = @ShowInQuickAddBar,
ExcludeFromCompanionDetection = @ExcludeFromCompanionDetection,
DetectionPriority = @DetectionPriority,
UpdatedDate = SYSUTCDATETIME()
WHERE LocationID = @LocationID;
END
IF NULLIF(@LocationName, N'') IS NOT NULL
AND NOT EXISTS
(
SELECT 1
FROM dbo.LocationAliases
WHERE LocationID = @LocationID
AND UPPER(LTRIM(RTRIM(Alias))) = UPPER(@LocationName)
)
BEGIN
INSERT dbo.LocationAliases (LocationID, Alias, SortOrder)
SELECT @LocationID,
@LocationName,
ISNULL(MAX(SortOrder), 0) + 10
FROM dbo.LocationAliases
WHERE LocationID = @LocationID;
END
SELECT @LocationID;
END;
GO