Add Fuchs_Database SSDT project (schema source of truth)
Adds the SQL Server Data Tools project for the fuchs_fds database — tables, table types, functions and stored procedures that the backend calls (e.g. fds__getInvoice, fds__merge_bankingtransactions, fds__tt__bankingtransactions, fds__admin_getReportCatalog, fis_* auth). Build/model caches (bin, obj, *.dbmdl, *.jfm, *.user) are git-ignored. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
-- =============================================
|
||||
-- Author: <Author,,Name>
|
||||
-- Create date: <Create Date,,>
|
||||
-- Description: <Description,,>
|
||||
-- =============================================
|
||||
CREATE FUNCTION [dbo].[fds__getUpdateableRequests]
|
||||
(
|
||||
)
|
||||
RETURNS @RET TABLE
|
||||
(
|
||||
[entity_name] varchar(255)
|
||||
,[Id] bigint
|
||||
,[order] bigint
|
||||
)
|
||||
AS
|
||||
BEGIN
|
||||
DECLARE @threshold_minutes_full int = 60, @threshold_minutes_short int = 8;
|
||||
|
||||
DECLARE @utcnow datetime = GETUTCDATE();
|
||||
DECLARE @UTCTimeInMinutes int = DATEDIFF(MINUTE, CAST(CAST(@utcnow as date) as datetime), @utcnow);
|
||||
|
||||
DECLARe @AS XML = [dbo].[mfr__schema]();
|
||||
|
||||
DECLARE @EntityTypes TABLE([#] int, [typ] varchar(50), [name] varchar(255), [set] varchar(255), [EntitySet] varchar(255), [tablename] varchar(255), [url] varchar(500), [DateColumn] varchar(25));
|
||||
WITH XMLNAMESPACES
|
||||
(
|
||||
'http://schemas.microsoft.com/ado/2007/06/edmx' as edmx,
|
||||
'http://schemas.microsoft.com/ado/2007/08/dataservices/metadata' as m
|
||||
), et as (
|
||||
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) as '#'
|
||||
, xD.value('local-name(.)', 'varchar(50)') as [type]
|
||||
, xD.value('@Name', 'varchar(255)') as [EntityType] --, xD.query('.') as 'q'
|
||||
, xS.value('@Name', 'varchar(255)') as [Set]
|
||||
, o.[name] as [tablename]
|
||||
from @as.nodes('/Schema[1]/EntityType') as xm(xD)
|
||||
JOIN @as.nodes('/Schema/EntityContainer/EntitySet') as xn(xS) ON (xS.value('@EntityType', 'varchar(255)')) like ('MFR.%[.]' + (xD.value('@Name', 'varchar(255)')))
|
||||
JOIN sys.objects as o ON o.[name] like ('mfr__' + (LOWER(xS.value('@Name', 'varchar(255)'))))
|
||||
union
|
||||
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) as '#'
|
||||
, xD.value('local-name(.)', 'varchar(50)') as [type]
|
||||
, xD.value('@Name', 'varchar(255)') as [EntityType] --, xD.query('.') as 'q'
|
||||
, '' as [Set]
|
||||
, o.[name] as [tablename]
|
||||
from @as.nodes('/Schema[1]/ComplexType') as xm(xD)
|
||||
JOIN sys.objects as o ON o.[name] like ('mfr__[#]' + (LOWER(xD.value('@Name', 'varchar(255)'))) + 's')
|
||||
)
|
||||
INSERT INTO @EntityTypes SELECT [#],[type],[EntityType],[set] = LOWER([set]), [EntitySet] = [set], [tablename], null, null FROM et;
|
||||
|
||||
WITH tbl as(
|
||||
SELECT
|
||||
--QUOTENAME(SCHEMA_NAME(sOBJ.schema_id)) + '.' + QUOTENAME(sOBJ.[name]) AS [TABLE_NAME]
|
||||
sOBJ.[name] AS [TABLE_NAME]
|
||||
, SUM(sPTN.Rows) AS [RowCount]
|
||||
,sOBJ.[create_date]
|
||||
FROM
|
||||
sys.objects AS sOBJ
|
||||
INNER JOIN sys.partitions AS sPTN
|
||||
ON sOBJ.object_id = sPTN.object_id
|
||||
AND sOBJ.[name] like 'mfr__%'
|
||||
WHERE
|
||||
sOBJ.[type] = 'U'
|
||||
AND sOBJ.is_ms_shipped = 0x0
|
||||
AND index_id < 2 -- 0:Heap, 1:Clustered
|
||||
GROUP BY
|
||||
sOBJ.schema_id
|
||||
, sOBJ.name
|
||||
, sObj.[create_date]
|
||||
), pro as (SELECT *
|
||||
FROM sys.procedures WHERE LEFT([name], 11) = 'mfr__updt__')
|
||||
, lu as (SELECT [table], MAX([timestamp]) as 'lu' FROM [dbo].[fds__status] WHERE [action] like 'update%' group by [table])
|
||||
, luf as (SELECT [table], MAX([timestamp]) as 'luf' FROM [dbo].[fds__status] WHERE [action] like 'update_full' group by [table])
|
||||
, lur as (SELECT [table], MAX([timestamp]) as 'lur' FROM [dbo].[fds__status] WHERE [action] like 'update_reset' group by [table])
|
||||
, luc as (SELECT lu.[table], [lu], [luf], [lur]
|
||||
, DATEDIFF(MINUTE, [lu], @utcnow) as [dlu]
|
||||
, DATEDIFF(MINUTE, [lur], @utcnow) as [dlr]
|
||||
, DATEDIFF(MINUTE, [luf], @utcnow) as [dluf]
|
||||
, CASE --WHEN [dbo].[ctm__getUpdateLockStatus] () = Cast(1 as bit) THEN 0
|
||||
WHEN [lu] is null then 5
|
||||
--WHEN DATEDIFF(MINUTE, [lu], @utcnow) > @threshold_minutes_full
|
||||
-- OR DATEDIFF(MINUTE, [luf], @utcnow) > @threshold_minutes_full
|
||||
-- THEN 2
|
||||
WHEN DATEDIFF(MINUTE, [lu], @utcnow) > @threshold_minutes_short THEN 1
|
||||
ELSE 0
|
||||
END as 'need'
|
||||
from lu LEFT JOIN luf on lu.[table] = luf.[table] LEFT JOIN lur on lu.[table] = lur.[table]
|
||||
), cols as (SELECT DISTINCT [TABLE_NAME] FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE LEFT(TABLE_NAME, 5) = N'mfr__' AND ([column_name] COLLATE Latin1_General_CI_AS in ('DateModified', 'DateCreated', 'DateOfCreation')))
|
||||
, updateabletables as (
|
||||
SELECT DISTINCT [entity_name] = et.[name]
|
||||
, 'table_name' = tbl.[table_name]
|
||||
, 'temp_table' = pro.[name]
|
||||
, 'locked' = 0 --ISNULL([dbo].[ctm__getUpdateLockStatus_tbl](REPLACE(tbl.[TABLE_NAME], 'mfr__', '')), 0)
|
||||
, 'locked_reset' = 0 --ISNULL([dbo].[ctm__getUpdateLockStatus_reset_tbl](REPLACE(tbl.[TABLE_NAME], 'mfr__', '')), 0)
|
||||
, 'updateneed' = CASE
|
||||
--WHEN [dbo].[ctm__getUpdateLockStatus_tbl](REPLACE(tbl.[TABLE_NAME], 'mfr__', '')) = Cast(1 as bit) THEN 0
|
||||
WHEN et.[name] COLLATE Latin1_General_CI_AS IN ('Attachment','Comment','Item','StepListTemplateInstance','Step') THEN 0
|
||||
WHEN tbl.[RowCount] = 0 THEN 5
|
||||
WHEN NOT EXISTS (SELECT * FROM cols WHERE tbl.[TABLE_NAME] = cols.[TABLE_NAME]) THEN 0
|
||||
WHEN luc.need is null then 5
|
||||
WHEN tbl.[TABLE_NAME] COLLATE Latin1_General_CI_AS in ('') AND ISNULL(luc.[dlr], 1440) >= 720 AND @UTCTimeInMinutes BETWEEN 45 AND 90 THEN 5 -- once every day, between 02:45 and 03:30 in the morning
|
||||
ELSE luc.[need]--ISNULL(luc.[need], 0)
|
||||
END
|
||||
, 'datebased' = CASE WHEN EXISTS (SELECT * FROM cols WHERE tbl.[TABLE_NAME] = cols.[TABLE_NAME]) THEN 1 ELSE 0 END
|
||||
FROM tbl
|
||||
JOIN @EntityTypes as et on tbl.[TABLE_NAME] = et.[tablename]
|
||||
JOIN pro on REPLACE(pro.[name], 'mfr__updt__', 'mfr__') = tbl.[TABLE_NAME]
|
||||
LEFT JOIN luc on tbl.[table_name] = luc.[table]
|
||||
)
|
||||
insert into @RET
|
||||
SELECT rq.[entity_name], rq.[Id], ROW_NUMBER() OVER (ORDER BY [date_requested])
|
||||
FROM [dbo].[fds__mfr_updaterequests] as rq JOIN updateabletables ON rq.[entity_name] = updateabletables.[entity_name] AND rq.Id is not null
|
||||
;
|
||||
|
||||
RETURN
|
||||
END
|
||||
Reference in New Issue
Block a user