From 5ee348dc9892c0d5375ad36d52d8335d6b204821 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Tue, 6 Jan 2026 13:11:11 -0500 Subject: [PATCH] feat(db): add scalar extraction functions for SearchCriteria JSON --- .../045_CreateScalarExtractionFunctions.sql | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 NEW/src/JdeScoping.Database/Scripts/045_CreateScalarExtractionFunctions.sql diff --git a/NEW/src/JdeScoping.Database/Scripts/045_CreateScalarExtractionFunctions.sql b/NEW/src/JdeScoping.Database/Scripts/045_CreateScalarExtractionFunctions.sql new file mode 100644 index 0000000..791bcf8 --- /dev/null +++ b/NEW/src/JdeScoping.Database/Scripts/045_CreateScalarExtractionFunctions.sql @@ -0,0 +1,65 @@ +-- Migration: 045_CreateScalarExtractionFunctions +-- Scalar functions to extract simple values from Search.Criteria JSON + +-- fn_GetSearchMinimumDt: Extract MinimumDt datetime +IF OBJECT_ID('dbo.fn_GetSearchMinimumDt', 'FN') IS NOT NULL + DROP FUNCTION dbo.fn_GetSearchMinimumDt; +GO + +CREATE FUNCTION dbo.fn_GetSearchMinimumDt(@SearchId INT) +RETURNS DATETIME2(7) +AS +BEGIN + DECLARE @Result DATETIME2(7); + + SELECT @Result = TRY_CONVERT(DATETIME2(7), JSON_VALUE(s.Criteria, '$.MinimumDt')) + FROM dbo.Search s + WHERE s.ID = @SearchId + AND s.Criteria IS NOT NULL + AND ISJSON(s.Criteria) = 1; + + RETURN @Result; +END +GO + +-- fn_GetSearchMaximumDt: Extract MaximumDt datetime +IF OBJECT_ID('dbo.fn_GetSearchMaximumDt', 'FN') IS NOT NULL + DROP FUNCTION dbo.fn_GetSearchMaximumDt; +GO + +CREATE FUNCTION dbo.fn_GetSearchMaximumDt(@SearchId INT) +RETURNS DATETIME2(7) +AS +BEGIN + DECLARE @Result DATETIME2(7); + + SELECT @Result = TRY_CONVERT(DATETIME2(7), JSON_VALUE(s.Criteria, '$.MaximumDt')) + FROM dbo.Search s + WHERE s.ID = @SearchId + AND s.Criteria IS NOT NULL + AND ISJSON(s.Criteria) = 1; + + RETURN @Result; +END +GO + +-- fn_GetSearchExtractMisData: Extract ExtractMisData boolean +IF OBJECT_ID('dbo.fn_GetSearchExtractMisData', 'FN') IS NOT NULL + DROP FUNCTION dbo.fn_GetSearchExtractMisData; +GO + +CREATE FUNCTION dbo.fn_GetSearchExtractMisData(@SearchId INT) +RETURNS BIT +AS +BEGIN + DECLARE @Result BIT; + + SELECT @Result = TRY_CONVERT(BIT, JSON_VALUE(s.Criteria, '$.ExtractMisData')) + FROM dbo.Search s + WHERE s.ID = @SearchId + AND s.Criteria IS NOT NULL + AND ISJSON(s.Criteria) = 1; + + RETURN @Result; +END +GO