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,170 @@
|
||||
-- =============================================
|
||||
-- Author: <Author,,Name>
|
||||
-- Create date: <Create Date,,>
|
||||
-- Description: <Description,,>
|
||||
-- =============================================
|
||||
CREATE PROCEDURE [dbo].[mfr__getSchema]
|
||||
@info varchar(25)
|
||||
,@tgttype varchar(50)
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARe @AS XML = [dbo].[mfr__schema]();
|
||||
|
||||
IF @info = 'table'
|
||||
BEGIN
|
||||
DECLARE @AssociationSets TABLE([#] int, [name] varchar(255), [set] varchar(255), [Association] varchar(255), [role1] varchar(255), [role2] varchar(255), [set1] varchar(255), [set2] varchar(255), [arole1] varchar(255), [arole2] varchar(255), [multi1] varchar(255), [multi2] varchar(255), [tablename] varchar(255));
|
||||
DECLARE @ComplexProps TABLE([#] int, [Type] varchar(255), [typ] varchar(50), [name] varchar(255), [EntityType] varchar(255), [tablename] varchar(255));
|
||||
DECLARE @NavigationProps TABLE([#] int, [Type] varchar(255), [typ] varchar(50), [name] varchar(255), [ToRole] varchar(255), [FromRole] varchar(255), [countertype] varchar(255), [counterset] varchar(255), [tablename] varchar(255), [countertable] varchar(255), [Association] varchar(255));
|
||||
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), [DateSQL] varchar(1000));
|
||||
|
||||
WITH XMLNAMESPACES
|
||||
(
|
||||
|
||||
'http://schemas.microsoft.com/ado/2007/06/edmx' as edmx,
|
||||
'http://schemas.microsoft.com/ado/2007/08/dataservices/metadata' as m
|
||||
) , x as (
|
||||
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) as '#'
|
||||
, xD.value('@Name', 'varchar(255)') as 'set'
|
||||
, xD.value('@Association', 'varchar(255)') as 'association'
|
||||
, xD.value('End[1]/@Role', 'varchar(255)') as 'role1'
|
||||
, xD.value('End[2]/@Role', 'varchar(255)') as 'role2'
|
||||
, LOWER(xD.value('End[1]/@EntitySet', 'varchar(255)')) as 'set1'
|
||||
, LOWER(xD.value('End[2]/@EntitySet', 'varchar(255)')) as 'set2'
|
||||
--, xD.query('.') as 'q'
|
||||
from @as.nodes('/Schema/EntityContainer/AssociationSet') as xm(xD)
|
||||
) , y as (
|
||||
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) as '#'
|
||||
, xD.value('@Name', 'varchar(255)') as 'association'
|
||||
, xD.value('End[1]/@Role', 'varchar(255)') as 'arole1'
|
||||
, xD.value('End[2]/@Role', 'varchar(255)') as 'arole2'
|
||||
, xD.value('End[1]/@Multiplicity', 'varchar(255)') as 'multi1'
|
||||
, xD.value('End[2]/@Multiplicity', 'varchar(255)') as 'multi2'
|
||||
--, xD.query('.') as 'q'
|
||||
from @as.nodes('/Schema/Association') as xm(xD)
|
||||
), z as (
|
||||
select x.[#], x.[role1], x.[role2], x.[set1], x.[set2], RIGHT(x.[set],CHARINDEX('_', REVERSE(x.[set])) - 1) as [name],x.[set],x.[association], y.[arole1], y.[arole2], y.[multi1], y.[multi2]
|
||||
from x LEFT JOIN y on x.association like ('%[.]' + y.[association])
|
||||
)
|
||||
INSERT INTO @AssociationSets
|
||||
SELECT [#], z.[name],[set], [association],[role1],[role2], [set1], [set2] , [arole1], [arole2], [multi1], [multi2], 'mfr__*PartnerSet' as [tablename]
|
||||
FROM z
|
||||
LEFT JOIN sys.objects as o ON o.[name] like ('mfr__[*]' + (LOWER(z.[name])));
|
||||
|
||||
|
||||
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, null FROM et;
|
||||
|
||||
WITH XMLNAMESPACES
|
||||
(
|
||||
'http://schemas.microsoft.com/ado/2007/06/edmx' as edmx,
|
||||
'http://schemas.microsoft.com/ado/2007/08/dataservices/metadata' as m
|
||||
), np as (
|
||||
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) as '#'
|
||||
, xD.value('../@Name', 'varchar(255)') as [property]
|
||||
, xD.value('@Type', 'varchar(255)') as [nodetype]
|
||||
|
||||
, xD.value('@Name', 'varchar(255)') as [name]
|
||||
from @as.nodes('/Schema[1]/EntityType/Property') as xm(xD)
|
||||
)
|
||||
INSERT INTO @ComplexProps
|
||||
SELECT np.[#]
|
||||
, [property]
|
||||
, [type] = CASE WHEN [nodetype] like 'collection%' THEN 'array' ELSE '' END
|
||||
, np.[name]
|
||||
, [EntityType] = et.[name]
|
||||
, et.[tablename]
|
||||
from np LEFT JOIN @EntityTypes as et on np.[name] like (et.[name] + '%')
|
||||
WHERE nodetype like '%MFR[.]%';
|
||||
|
||||
WITH XMLNAMESPACES
|
||||
(
|
||||
'http://schemas.microsoft.com/ado/2007/06/edmx' as edmx,
|
||||
'http://schemas.microsoft.com/ado/2007/08/dataservices/metadata' as m
|
||||
), np as (
|
||||
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) as '#'
|
||||
, xD.value('../@Name', 'varchar(255)') as [property]
|
||||
, CASE WHEN a.[arole1] = xD.value('@ToRole', 'varchar(255)') AND a.[multi1] = '*' THEN 'array'
|
||||
WHEN a.[arole1] = xD.value('@ToRole', 'varchar(255)') AND a.[multi1] = '0..1' THEN 'ref'
|
||||
WHEN a.[arole2] = xD.value('@ToRole', 'varchar(255)') AND a.[multi2] = '*' THEN 'array'
|
||||
WHEN a.[arole2] = xD.value('@ToRole', 'varchar(255)') AND a.[multi2] = '0..1' THEN 'ref'
|
||||
END as [typ]
|
||||
, xD.value('@Name', 'varchar(255)') as [name]
|
||||
, xD.value('@ToRole', 'varchar(255)') as [ToRole]
|
||||
, xD.value('@FromRole', 'varchar(255)') as [FromRole]
|
||||
, CASE WHEN xD.value('@ToRole', 'varchar(255)') = a.[role2] THEN [set2] ELSE [set1] END [counterset]
|
||||
, a.[tablename] --xD.value('@Relationship', 'varchar(255)') as
|
||||
, a.[Association]
|
||||
-- , xD.query('.') as 'q'
|
||||
from @as.nodes('/Schema[1]/EntityType/NavigationProperty') as xm(xD)
|
||||
LEFT JOIN @AssociationSets as a on (xD.value('@Relationship', 'varchar(255)')) like a.[Association]
|
||||
)
|
||||
INSERT INTO @NavigationProps SELECT np.[#], [property], np.[typ],np.[name],[ToRole], [FromRole],[countertype] = et.[name], [counterset],np.[tablename], [countertable] = et.tablename, [Association] = NULL
|
||||
from np LEFT JOIN @EntityTypes as et on np.counterset = et.[set];
|
||||
|
||||
|
||||
UPDATE et SET
|
||||
[url] = [EntitySet] +
|
||||
CASE WHEN EXISTS (SELECT * FROM @NavigationProps as np WHERE np.[type] = et.[name])
|
||||
THEN '?$expand=' + STUFF((SELECT ',' + [name] as [text()] FROM @NavigationProps as np WHERE np.[type] = et.[name] ORDER BY [#] FOR XML PATH('')),1,1, '')
|
||||
ELSE '' END
|
||||
,[DateColumn] = (SELECT TOP(1) cols.[COLUMN_NAME] FROM INFORMATION_SCHEMA.COLUMNS as cols WHERE cols.[TABLE_NAME] = et.[tablename] AND ([COLUMN_NAME] COLLATE Latin1_General_CI_AS IN ('DateModified','DateCreated','DateOfCreation')) ORDER BY cols.[COLUMN_NAME] DESC)
|
||||
,[DateSQL] = IIF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS as cols WHERE cols.[TABLE_NAME] = et.[tablename] AND ([COLUMN_NAME] COLLATE Latin1_General_CI_AS IN ('DateModified','DateOfCreation'))) = 2,
|
||||
'SELECT [dbo].[ott_min_date](MAX([DateModified]),MAX([DateOfCreation])) FROM [dbo].[' + et.[tablename] + '];','')
|
||||
FROM @EntityTypes as et;
|
||||
|
||||
|
||||
SELECT * FROM @EntityTypes as et WHERE @tgttype is null or et.name = @tgttype;
|
||||
SELECT * FROM @ComplexProps as cp where @tgttype is null or cp.[type] = @tgttype;
|
||||
SELECT n.* FROM @NavigationProps as n WHERE @tgttype is null or n.[type] = @tgttype;
|
||||
--SELECT * FROM @AssociationSets;
|
||||
|
||||
with tt as (
|
||||
--SELECT [tablename] FROM @EntityTypes
|
||||
--UNION
|
||||
SELECT [tablename] FROM @ComplexProps as cp where @tgttype is null or cp.[type] = @tgttype
|
||||
UNION
|
||||
SELECT [tablename] FROM @NavigationProps as n WHERE @tgttype is null or n.[type] = @tgttype
|
||||
UNION
|
||||
SELECT [tablename] = [countertable] FROM @NavigationProps as n WHERE @tgttype is null or n.[type] = @tgttype
|
||||
)
|
||||
SELECT DISTINCT [tablename] from tt
|
||||
where not exists(SELECT * FROM @EntityTypes as et where et.tablename = tt.[tablename] AND (@tgttype is null or et.name = @tgttype));
|
||||
|
||||
END
|
||||
ELSE IF @info = 'tabledef'
|
||||
BEGIN
|
||||
DECLARE @types TABLE ([edm] varchar(100), [sql] varchar(50));
|
||||
INSERT INTO @types VALUES ('Edm.Boolean', 'bit'),
|
||||
('Edm.DateTime', 'DateTime'),
|
||||
('Edm.Decimal', 'decimal'),
|
||||
('Edm.Double', 'float'),
|
||||
('Edm.Int32', 'int'),
|
||||
('Edm.Int64', 'bigint'),
|
||||
('Edm.String', 'varchar(255)');
|
||||
|
||||
|
||||
END
|
||||
END
|
||||
Reference in New Issue
Block a user