kreta/Tools/CodeGeneration/Templates/Database/SQL_MultiLanguageViews.tdl
2024-03-13 00:33:46 +01:00

184 lines
6.2 KiB
Text

//***************************************************************************//
// A használt fájlok //
//***************************************************************************//
USES Common/std;
USES Common/Converters;
USES Common/CommonUtil;
USES Common/StringUtil;
USES Common/ModelDataRetreive;
USES Common/DBUtil;
USES Database/SQLGenerator;
proc main()
Init();
// info = "";
if ([SQL_DBType] == "MSSQL")
out = MultiLanguageViews_Mssql();
else
if ([SQL_DBType] == "ORACLE")
out = MultiLanguageViews_Oracle();
end if
end if
// info = "";
end proc
//***************************************************************************//
// Általános inicializálás //
//***************************************************************************//
proc Init()
local dbtag = "";
//current language
setLanguage("SQL");
//mkdir([OutputDir]);
switch( [SQL_DBType] )
//ORACLE Type
case "ORACLE" :
[dbtag] = "ora";
break;
//MSSQL Type
case "MSSQL" :
[dbtag] = "mssql";
break;
//DB2 Type
case "DB2" :
[dbtag] = "db2";
break;
end switch
setOutput( [OutputDir] "/" "create.multilang." [dbtag] ".sql");
// UTF-8 BOM bájtok
setVar("BOM", "\xEF\xBB\xBF");
end proc
template MultiLanguageViews_Oracle()
[BOM]
[loop (Instances -> MClass as ENTITY where GetStereoType([ENTITY]) == "Entity" and HasMultiLanguageAttributes([ENTITY]) == _True())]
[GenerateMultiLanguageView_Oracle([ENTITY], 1)]
/
[GenerateMultiLanguageView_Oracle([ENTITY], 2)]
/
[GenerateMultiLanguageView_Oracle([ENTITY], 3)]
/
[GenerateMultiLanguageView_Oracle([ENTITY], 4)]
/
[end loop]
QUIT
end template
template GenerateMultiLanguageView_Oracle(MClass as ENTITY, LANGUAGEINDEX)
create or replace view [ConvertNameToSQLTableName([ENTITY.name])]_[LANGUAGEINDEX] as
select
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
[if (IsMultiLanguage([ATTRIBUTE]) == _True() and GetLanguageIndex([ATTRIBUTE]) == 0)]
nvl([ConvertNameToSQLColumnName([ATTRIBUTE.name])]_[LANGUAGEINDEX], [ConvertNameToSQLColumnName([ATTRIBUTE.name])]) "[ConvertNameToSQLColumnName([ATTRIBUTE.name])]",
[else]
[ConvertNameToSQLColumnName([ATTRIBUTE.name])],
[end if]
[end loop]
[loop (ENTITY -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))]
[if (HasAssociationClass([CurrentAssoc]) == "")]
[if (([EndRole.multiplicity] == "1") or (([EndRole.multiplicity] == "0..1") and (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*") or ([StartRole.multiplicity] == "0..*"))))]
[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))],
[end if]
[end if]
[end loop]
[loop (ENTITY -> MAssociation as CurrentAssoc -> MAssociationEnd as StartRole -> MClass as StartClass where (GetStereoType([StartClass]) == "Entity"))]
[loop (CurrentAssoc -> MAssociationEnd as EndRole -> MClass as EndClass where([StartRole.id] < [EndRole.id] and GetStereoType([EndClass]) == "Entity" ))]
[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))],
[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))],
[end loop]
[end loop]
[if (IsMasterEntity([ENTITY]) == "true")]
SERIAL,
LASTCHANGED,
MODIFIER,
CREATED,
CREATOR,
[end if]
ID
from
[ConvertNameToSQLTableName([ENTITY.name])]
end template
template MultiLanguageViews_Mssql()
[BOM]
[loop (Instances -> MClass as ENTITY where GetStereoType([ENTITY]) == "Entity" and HasMultiLanguageAttributes([ENTITY]) == _True())]
[GenerateMultiLanguageView_Mssql([ENTITY], 1)]
go
[GenerateMultiLanguageView_Mssql([ENTITY], 2)]
go
[GenerateMultiLanguageView_Mssql([ENTITY], 3)]
go
[GenerateMultiLanguageView_Mssql([ENTITY], 4)]
go
[end loop]
end template
template GenerateMultiLanguageView_Mssql(MClass as ENTITY, LANGUAGEINDEX)
if exists ( select name from sysobjects where name = '[ConvertNameToSQLTableName([ENTITY.name])]_[LANGUAGEINDEX]' and type = 'V')
drop view [ConvertNameToSQLTableName([ENTITY.name])]_[LANGUAGEINDEX]
go
create view [ConvertNameToSQLTableName([ENTITY.name])]_[LANGUAGEINDEX] as
select
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
[if (IsMultiLanguage([ATTRIBUTE]) == _True() and GetLanguageIndex([ATTRIBUTE]) == 0)]
isnull([ConvertNameToSQLColumnName([ATTRIBUTE.name])]_[LANGUAGEINDEX], [ConvertNameToSQLColumnName([ATTRIBUTE.name])]) "[ConvertNameToSQLColumnName([ATTRIBUTE.name])]",
[else]
[ConvertNameToSQLColumnName([ATTRIBUTE.name])],
[end if]
[end loop]
[loop (ENTITY -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))]
[if (HasAssociationClass([CurrentAssoc]) == "")]
[if (([EndRole.multiplicity] == "1") or (([EndRole.multiplicity] == "0..1") and (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*") or ([StartRole.multiplicity] == "0..*"))))]
[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))],
[end if]
[end if]
[end loop]
[loop (ENTITY -> MAssociation as CurrentAssoc -> MAssociationEnd as StartRole -> MClass as StartClass where (GetStereoType([StartClass]) == "Entity"))]
[loop (CurrentAssoc -> MAssociationEnd as EndRole -> MClass as EndClass where([StartRole.id] < [EndRole.id] and GetStereoType([EndClass]) == "Entity" ))]
[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))],
[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))],
[end loop]
[end loop]
[if (IsMasterEntity([ENTITY]) == "true")]
SERIAL,
LASTCHANGED,
MODIFIER,
CREATED,
CREATOR,
[end if]
ID
from
[ConvertNameToSQLTableName([ENTITY.name])]
end template
proc HasMultiLanguageAttributes(MClass as ENTITY)
loop (ENTITY -> MAttribute as ATTRIBUTE where IsMultiLanguage([ATTRIBUTE]) == _True())
return _True();
end loop
return _False();
end proc