190 lines
8.2 KiB
Text
190 lines
8.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;
|
|
|
|
|
|
//***************************************************************************//
|
|
// Belépési pont //
|
|
//***************************************************************************//
|
|
proc main()
|
|
// initialize the output and other context information
|
|
Init();
|
|
info = "Skeleton DB Alter Table script generator STARTED at \t"time()"\n";
|
|
GenerateAlterTableScript();
|
|
info = "Skeleton DB Alter Table script generator STOPPED at \t"time()"\n";
|
|
|
|
info = "Skeleton DB Alter Table Check Constraint script generator STARTED at \t"time()"\n";
|
|
GenerateAlterTableCheckScript();
|
|
info = "Skeleton DB Alter Table Check Constraint script generator STOPPED at \t"time()"\n";
|
|
|
|
info = "Skeleton DB Alter Table Unique Constraint script generator STARTED at \t"time()"\n";
|
|
GenerateAlterTableUniqueScript();
|
|
info = "Skeleton DB Alter Table Unique Constraint script generator STOPPED at \t"time()"\n";
|
|
|
|
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] = "";
|
|
break;
|
|
|
|
//DB2 Type
|
|
case "DB2" :
|
|
[dbtag] = ".db2";
|
|
break;
|
|
end switch
|
|
|
|
setOutput( [OutputDir] "/" "alter.tables"[dbtag]".sql" );
|
|
|
|
// UTF-8 BOM bájtok
|
|
setVar("BOM", "\xEF\xBB\xBF");
|
|
end proc
|
|
|
|
|
|
//***************************************************************************//
|
|
// Legenerálja a kényszereket létrehozó SQL szkriptet: foreign key, unique //
|
|
// key, check constraint //
|
|
//***************************************************************************//
|
|
proc GenerateAlterTableScript()
|
|
local tablename = "";
|
|
local localkey = "";
|
|
local foreigntablename = "";
|
|
local pkcname = "";
|
|
local package = "";
|
|
local fkname = "";
|
|
local fknamepartial = "";
|
|
local foreignschema = "dbo";
|
|
local tpc = "false";
|
|
|
|
out = [BOM];
|
|
out = "--/* Modell verzio: " GetModelVersion() " */\n\n\n";
|
|
|
|
out = "--/*DictionaryItemType és Entitás attributuma közötti FK*/\n";
|
|
// A DictItemType és entitás táblák közötti
|
|
// foreign key constraintek
|
|
loop (Instances -> MClass Where(GetStereoType([MClass]) == "Entity" ) )
|
|
loop( MClass -> MAttribute Where ([MAttribute.type] == "DictionaryItem"))
|
|
// info = "Entity alter table script for DictItemTypeTranslatoin : "[MClass.name]" at \t"time()"\n";
|
|
|
|
[tablename] = ConvertNameToSQLTableScript([MClass.name]);
|
|
if(IsMasterEntity([MClass]) == "true")
|
|
[localkey] = ConvertNameToSQLColumnName([MAttribute.name]) ", C_INTEZMENYID, C_TANEVID";
|
|
[fknamepartial] = [MAttribute.name] "_IntezmenyId_TanevId";
|
|
else
|
|
[localkey] = ConvertNameToSQLColumnName([MAttribute.name]) ", C_ALINTEZMENYID, C_ALTANEVID";
|
|
[fknamepartial] = [MAttribute.name] "_AlintezmenyId_AltanevId";
|
|
end if
|
|
[pkcname] = ConvertNameToForeignKeyConstraint([MClass.name], "");
|
|
[foreigntablename] = ConvertDictItemTypeToItemTableName([MAttribute.defaultValue]);
|
|
if (TruncateString([foreigntablename], 4) == "T_DKT")
|
|
[tpc] = "true";
|
|
end if
|
|
[package] = GetSchemaName([MClass]);
|
|
[fkname] = ConvertNameToForeignKeyName([MClass.name], [fknamepartial], [MAttribute.defaultValue]);
|
|
out = AddForeignKeyConstraint([package], [foreignschema], [tablename],[pkcname],[localkey], [foreigntablename], [fkname], "true", [tpc]);
|
|
[tpc] = "false";
|
|
end loop
|
|
end loop
|
|
|
|
|
|
out = "--/*Entitások egyébb FK*/\n";
|
|
// Entitások foreign key konstraintjei.
|
|
// öröklődés
|
|
// asszociácios osztály nélküli asszociációk
|
|
// ha ez az osztály maga asszociációs osztály
|
|
loop (Instances->MClass WHERE GetStereoType([MClass]) == "Entity")
|
|
// info = "Entity alter table script: "[MClass.name]" at \t"time()"\n";
|
|
GenerateAlterDefinitionsForClass( [MClass] );
|
|
end loop
|
|
|
|
out = "--/*kapcsoló tábla FK*/\n";
|
|
// az asszociacios osztalyokon kivuli, csak kapcsolotablaval reprezentalhato
|
|
// relaciok eredmenyezte constraintek
|
|
local AssocClassCount = "";
|
|
loop (Instances -> MAssociation as CurrentAssoc -> MAssociationEnd as StartRole -> MClass as StartClass where (GetStereoType([StartClass])=="Entity" ))
|
|
loop ( CurrentAssoc -> MAssociationEnd as EndRole -> MClass as EndClass where (GetStereoType([EndClass])=="Entity" and [StartRole.id]<[EndRole.id]) )
|
|
[AssocClassCount] = HasAssociationClass([CurrentAssoc]);
|
|
if ( [AssocClassCount] == "" )
|
|
if (
|
|
//0..1-0..1
|
|
([StartRole.multiplicity]=="0..1" and [EndRole.multiplicity]=="0..1") or
|
|
//1..*-1..*
|
|
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="1..*") or
|
|
//1..*-*
|
|
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="*") or
|
|
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="0..*") or
|
|
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="1..*") or
|
|
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="1..*") or
|
|
//*-*
|
|
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="*") or
|
|
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="0..*") or
|
|
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="*") or
|
|
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="0..*")
|
|
)
|
|
// info = "Switch table alter table script for: ["[StartClass.name] "][" [EndClass.name]"] at \t"time()"\n";
|
|
out = GenerateAlterDefinitonsForSwitchTable([StartClass],[StartRole],[EndClass],[EndRole], [CurrentAssoc]);
|
|
end if
|
|
end if
|
|
end loop
|
|
end loop
|
|
end proc
|
|
|
|
|
|
//***************************************************************************//
|
|
// Legenerálja a check constraint-eket létrehozó SQL szkriptet. //
|
|
//***************************************************************************//
|
|
proc GenerateAlterTableCheckScript()
|
|
out = "\n--/*Entitások check constraintjei CK*/\n";
|
|
// Entitások check konstraintjei.
|
|
// öröklődés
|
|
// asszociácios osztály nélküli asszociációk
|
|
// ha ez az osztály maga asszociációs osztály
|
|
loop (Instances->MClass WHERE GetStereoType([MClass]) == "Entity")
|
|
// info = "Entity alter table check constraint script: "[MClass.name]" at \t"time()"\n";
|
|
GenerateAlterCheckDefinitionsForClass( [MClass] );
|
|
end loop
|
|
end proc
|
|
|
|
|
|
//***************************************************************************//
|
|
// Legenerálja a unique key constraint-eket létrehozó SQL szkriptet. //
|
|
//***************************************************************************//
|
|
proc GenerateAlterTableUniqueScript()
|
|
out = "\n--/*Entitások unique constraintjei UK*/\n";
|
|
// Entitások unique konstraintjei.
|
|
// öröklődés
|
|
// asszociácios osztály nélküli asszociációk
|
|
// ha ez az osztály maga asszociációs osztály
|
|
loop (Instances->MClass WHERE GetStereoType([MClass]) == "Entity")
|
|
// info = "Entity alter table unique constraint script: "[MClass.name]" at \t"time()"\n";
|
|
GenerateAlterUniqueDefinitionsForClass( [MClass] );
|
|
end loop
|
|
|
|
if ( [SQL_DBType] == "ORACLE")
|
|
out = "quit\n/";
|
|
end if
|
|
end proc
|