PlotDirector/PlotLine/Sql/150_Phase24B_SceneManuscriptSources.sql

153 lines
5.7 KiB
Transact-SQL

SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
IF OBJECT_ID(N'dbo.SceneManuscriptSources', N'U') IS NULL
BEGIN
CREATE TABLE dbo.SceneManuscriptSources
(
SceneID int NOT NULL CONSTRAINT PK_SceneManuscriptSources PRIMARY KEY,
ProjectID int NOT NULL,
BookID int NOT NULL,
ChapterID int NOT NULL,
SourceText nvarchar(max) NOT NULL,
SourceWordCount int NOT NULL,
SourceCharacterCount int NOT NULL,
SourceStartParagraph int NULL,
SourceEndParagraph int NULL,
WordStartParagraphIndex int NULL,
WordEndParagraphIndex int NULL,
SourceKind nvarchar(80) NOT NULL CONSTRAINT DF_SceneManuscriptSources_SourceKind DEFAULT N'StructuralImport',
CreatedUtc datetime2 NOT NULL CONSTRAINT DF_SceneManuscriptSources_CreatedUtc DEFAULT SYSUTCDATETIME(),
UpdatedUtc datetime2 NOT NULL CONSTRAINT DF_SceneManuscriptSources_UpdatedUtc DEFAULT SYSUTCDATETIME(),
CONSTRAINT FK_SceneManuscriptSources_Scenes FOREIGN KEY (SceneID) REFERENCES dbo.Scenes(SceneID),
CONSTRAINT FK_SceneManuscriptSources_Projects FOREIGN KEY (ProjectID) REFERENCES dbo.Projects(ProjectID),
CONSTRAINT FK_SceneManuscriptSources_Books FOREIGN KEY (BookID) REFERENCES dbo.Books(BookID),
CONSTRAINT FK_SceneManuscriptSources_Chapters FOREIGN KEY (ChapterID) REFERENCES dbo.Chapters(ChapterID)
);
END;
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_SceneManuscriptSources_BookChapter' AND object_id = OBJECT_ID(N'dbo.SceneManuscriptSources'))
CREATE INDEX IX_SceneManuscriptSources_BookChapter ON dbo.SceneManuscriptSources(BookID, ChapterID, SceneID);
GO
CREATE OR ALTER PROCEDURE dbo.SceneManuscriptSource_Save
@SceneID int,
@ProjectID int,
@BookID int,
@ChapterID int,
@SourceText nvarchar(max),
@SourceWordCount int,
@SourceCharacterCount int,
@SourceStartParagraph int = NULL,
@SourceEndParagraph int = NULL,
@WordStartParagraphIndex int = NULL,
@WordEndParagraphIndex int = NULL,
@SourceKind nvarchar(80) = N'StructuralImport'
AS
BEGIN
SET NOCOUNT ON;
MERGE dbo.SceneManuscriptSources AS target
USING (SELECT @SceneID AS SceneID) AS source
ON target.SceneID = source.SceneID
WHEN MATCHED THEN
UPDATE SET ProjectID = @ProjectID,
BookID = @BookID,
ChapterID = @ChapterID,
SourceText = @SourceText,
SourceWordCount = @SourceWordCount,
SourceCharacterCount = @SourceCharacterCount,
SourceStartParagraph = @SourceStartParagraph,
SourceEndParagraph = @SourceEndParagraph,
WordStartParagraphIndex = @WordStartParagraphIndex,
WordEndParagraphIndex = @WordEndParagraphIndex,
SourceKind = @SourceKind,
UpdatedUtc = SYSUTCDATETIME()
WHEN NOT MATCHED THEN
INSERT
(
SceneID, ProjectID, BookID, ChapterID, SourceText, SourceWordCount, SourceCharacterCount,
SourceStartParagraph, SourceEndParagraph, WordStartParagraphIndex, WordEndParagraphIndex, SourceKind
)
VALUES
(
@SceneID, @ProjectID, @BookID, @ChapterID, @SourceText, @SourceWordCount, @SourceCharacterCount,
@SourceStartParagraph, @SourceEndParagraph, @WordStartParagraphIndex, @WordEndParagraphIndex, @SourceKind
);
END;
GO
CREATE OR ALTER PROCEDURE dbo.SceneManuscriptSource_GetByScene
@SceneID int
AS
BEGIN
SET NOCOUNT ON;
SELECT SceneID, ProjectID, BookID, ChapterID, SourceText, SourceWordCount, SourceCharacterCount,
SourceStartParagraph, SourceEndParagraph, WordStartParagraphIndex, WordEndParagraphIndex, SourceKind,
CreatedUtc, UpdatedUtc
FROM dbo.SceneManuscriptSources
WHERE SceneID = @SceneID;
END;
GO
CREATE OR ALTER PROCEDURE dbo.SceneManuscriptSource_ListByChapter
@ChapterID int
AS
BEGIN
SET NOCOUNT ON;
SELECT source.SceneID, source.ProjectID, source.BookID, source.ChapterID, source.SourceText,
source.SourceWordCount, source.SourceCharacterCount, source.SourceStartParagraph, source.SourceEndParagraph,
source.WordStartParagraphIndex, source.WordEndParagraphIndex, source.SourceKind, source.CreatedUtc, source.UpdatedUtc
FROM dbo.SceneManuscriptSources source
INNER JOIN dbo.Scenes scene ON scene.SceneID = source.SceneID
WHERE source.ChapterID = @ChapterID
AND scene.IsArchived = 0
ORDER BY scene.SortOrder, scene.SceneNumber, scene.SceneID;
END;
GO
CREATE OR ALTER PROCEDURE dbo.StoryIntelligenceSource_ChapterText_GetAdmin
@ChapterID int
AS
BEGIN
SET NOCOUNT ON;
SELECT
p.ProjectID,
p.ProjectName,
b.BookID,
b.BookTitle,
b.Subtitle AS BookSubtitle,
c.ChapterID,
c.ChapterNumber,
c.ChapterTitle,
sourceText.SourceText,
sourceText.SourceWordCount,
sourceText.SourceCharacterCount
FROM dbo.Chapters c
INNER JOIN dbo.Books b ON b.BookID = c.BookID
INNER JOIN dbo.Projects p ON p.ProjectID = b.ProjectID
OUTER APPLY
(
SELECT
STRING_AGG(CONVERT(nvarchar(max), sms.SourceText), CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10))
WITHIN GROUP (ORDER BY s.SortOrder, s.SceneNumber, s.SceneID) AS SourceText,
SUM(sms.SourceWordCount) AS SourceWordCount,
SUM(sms.SourceCharacterCount) AS SourceCharacterCount
FROM dbo.Scenes s
INNER JOIN dbo.SceneManuscriptSources sms ON sms.SceneID = s.SceneID
WHERE s.ChapterID = c.ChapterID
AND s.IsArchived = 0
) sourceText
WHERE c.ChapterID = @ChapterID
AND c.IsArchived = 0
AND b.IsArchived = 0
AND p.IsArchived = 0;
END;
GO