feat(db): add inline TVFs for complex object extraction from SearchCriteria
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
-- Migration: 047_CreateComplexTableFunctions
|
||||
-- Inline TVFs to extract complex object arrays from Search.Criteria JSON
|
||||
-- Pattern: CTE pre-filters valid JSON, OPENJSON...WITH for type-safe extraction
|
||||
|
||||
-- fn_GetSearchComponentLots: Extract ComponentLotNumbers array of objects
|
||||
IF OBJECT_ID('dbo.fn_GetSearchComponentLots', 'IF') IS NOT NULL
|
||||
DROP FUNCTION dbo.fn_GetSearchComponentLots;
|
||||
GO
|
||||
|
||||
CREATE FUNCTION dbo.fn_GetSearchComponentLots(@SearchId INT)
|
||||
RETURNS TABLE
|
||||
AS
|
||||
RETURN
|
||||
(
|
||||
WITH ValidSearch AS (
|
||||
SELECT Criteria
|
||||
FROM dbo.Search
|
||||
WHERE ID = @SearchId
|
||||
AND Criteria IS NOT NULL
|
||||
AND ISJSON(Criteria) = 1
|
||||
)
|
||||
SELECT j.LotNumber, j.ItemNumber
|
||||
FROM ValidSearch s
|
||||
CROSS APPLY OPENJSON(s.Criteria, '$.ComponentLotNumbers')
|
||||
WITH (
|
||||
LotNumber VARCHAR(30) '$.LotNumber',
|
||||
ItemNumber VARCHAR(128) '$.ItemNumber'
|
||||
) j
|
||||
);
|
||||
GO
|
||||
|
||||
-- fn_GetSearchPartOperations: Extract PartOperations array of objects
|
||||
IF OBJECT_ID('dbo.fn_GetSearchPartOperations', 'IF') IS NOT NULL
|
||||
DROP FUNCTION dbo.fn_GetSearchPartOperations;
|
||||
GO
|
||||
|
||||
CREATE FUNCTION dbo.fn_GetSearchPartOperations(@SearchId INT)
|
||||
RETURNS TABLE
|
||||
AS
|
||||
RETURN
|
||||
(
|
||||
WITH ValidSearch AS (
|
||||
SELECT Criteria
|
||||
FROM dbo.Search
|
||||
WHERE ID = @SearchId
|
||||
AND Criteria IS NOT NULL
|
||||
AND ISJSON(Criteria) = 1
|
||||
)
|
||||
SELECT j.ItemNumber, j.OperationNumber, j.MisNumber, j.MisRevision
|
||||
FROM ValidSearch s
|
||||
CROSS APPLY OPENJSON(s.Criteria, '$.PartOperations')
|
||||
WITH (
|
||||
ItemNumber VARCHAR(128) '$.ItemNumber',
|
||||
OperationNumber VARCHAR(10) '$.OperationNumber',
|
||||
MisNumber VARCHAR(10) '$.MisNumber',
|
||||
MisRevision VARCHAR(10) '$.MisRevision'
|
||||
) j
|
||||
);
|
||||
GO
|
||||
Reference in New Issue
Block a user