feat(db): add inline TVFs for simple array extraction from SearchCriteria
This commit is contained in:
@@ -0,0 +1,128 @@
|
|||||||
|
-- Migration: 046_CreateSimpleTableFunctions
|
||||||
|
-- Inline TVFs to extract simple arrays from Search.Criteria JSON
|
||||||
|
-- Pattern: CTE pre-filters valid JSON, OPENJSON...WITH for type-safe extraction
|
||||||
|
|
||||||
|
-- fn_GetSearchWorkOrders: Extract WorkOrderNumbers array
|
||||||
|
IF OBJECT_ID('dbo.fn_GetSearchWorkOrders', 'IF') IS NOT NULL
|
||||||
|
DROP FUNCTION dbo.fn_GetSearchWorkOrders;
|
||||||
|
GO
|
||||||
|
|
||||||
|
CREATE FUNCTION dbo.fn_GetSearchWorkOrders(@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.WorkOrderNumber
|
||||||
|
FROM ValidSearch s
|
||||||
|
CROSS APPLY OPENJSON(s.Criteria, '$.WorkOrderNumbers')
|
||||||
|
WITH (WorkOrderNumber BIGINT '$') j
|
||||||
|
WHERE j.WorkOrderNumber IS NOT NULL
|
||||||
|
);
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- fn_GetSearchItemNumbers: Extract ItemNumbers array
|
||||||
|
IF OBJECT_ID('dbo.fn_GetSearchItemNumbers', 'IF') IS NOT NULL
|
||||||
|
DROP FUNCTION dbo.fn_GetSearchItemNumbers;
|
||||||
|
GO
|
||||||
|
|
||||||
|
CREATE FUNCTION dbo.fn_GetSearchItemNumbers(@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
|
||||||
|
FROM ValidSearch s
|
||||||
|
CROSS APPLY OPENJSON(s.Criteria, '$.ItemNumbers')
|
||||||
|
WITH (ItemNumber VARCHAR(128) '$') j
|
||||||
|
WHERE j.ItemNumber IS NOT NULL
|
||||||
|
);
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- fn_GetSearchProfitCenters: Extract ProfitCenters array
|
||||||
|
IF OBJECT_ID('dbo.fn_GetSearchProfitCenters', 'IF') IS NOT NULL
|
||||||
|
DROP FUNCTION dbo.fn_GetSearchProfitCenters;
|
||||||
|
GO
|
||||||
|
|
||||||
|
CREATE FUNCTION dbo.fn_GetSearchProfitCenters(@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.Code
|
||||||
|
FROM ValidSearch s
|
||||||
|
CROSS APPLY OPENJSON(s.Criteria, '$.ProfitCenters')
|
||||||
|
WITH (Code VARCHAR(12) '$') j
|
||||||
|
WHERE j.Code IS NOT NULL
|
||||||
|
);
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- fn_GetSearchWorkCenters: Extract WorkCenters array
|
||||||
|
IF OBJECT_ID('dbo.fn_GetSearchWorkCenters', 'IF') IS NOT NULL
|
||||||
|
DROP FUNCTION dbo.fn_GetSearchWorkCenters;
|
||||||
|
GO
|
||||||
|
|
||||||
|
CREATE FUNCTION dbo.fn_GetSearchWorkCenters(@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.Code
|
||||||
|
FROM ValidSearch s
|
||||||
|
CROSS APPLY OPENJSON(s.Criteria, '$.WorkCenters')
|
||||||
|
WITH (Code VARCHAR(12) '$') j
|
||||||
|
WHERE j.Code IS NOT NULL
|
||||||
|
);
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- fn_GetSearchOperatorIDs: Extract OperatorIDs array
|
||||||
|
IF OBJECT_ID('dbo.fn_GetSearchOperatorIDs', 'IF') IS NOT NULL
|
||||||
|
DROP FUNCTION dbo.fn_GetSearchOperatorIDs;
|
||||||
|
GO
|
||||||
|
|
||||||
|
CREATE FUNCTION dbo.fn_GetSearchOperatorIDs(@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.OperatorID
|
||||||
|
FROM ValidSearch s
|
||||||
|
CROSS APPLY OPENJSON(s.Criteria, '$.OperatorIDs')
|
||||||
|
WITH (OperatorID VARCHAR(128) '$') j
|
||||||
|
WHERE j.OperatorID IS NOT NULL
|
||||||
|
);
|
||||||
|
GO
|
||||||
Reference in New Issue
Block a user