Hi Daril,
Thanks for your reply. I am using version 6.5. Similar scripts i used to generate DDL without Data model conversion was running from Scripting Windows well without errors.
Two questions:
1.) Why my original script works in Oracle DDL generation but not in Postgresql?
2.) The original purpose was to convert Oracle Data Model to Postgresql from a list of Oracle file paths, then generate the Postgre DDL.
e.g.
function Convert(Model, App)
{
var Convertor = Model.CreateNewObjectInternal(25000);
Convertor.Model2ToAlter = false;
Convertor.Model2ToConvert = true;
Convertor.Model2ModelTemp = true;
Convertor.Converting = true; //Do not modify
Convertor.Altering = false; //Do not modify
Convertor.Model1Model = Model;
var PM = App.System.GetInterface('PackageManager');
var DestinationMDef = PM.ModelDefs.GetObjectByName('PostgreSQL 10');
//Target database platform and version
DestinationMDef.LoadPackages();
Convertor.Model2ModelDef = DestinationMDef;
Convertor.Model2Model = App.NewModel(2001, DestinationMDef, true, true);
//2001 = Physical ER Model (PERModel)
Convertor.CreateDefaultAlterScriptSetting();
Convertor.InitSelectedOTPs();
Convertor.InitAvailableOTPs();
Convertor.SynchronizeModels();
Convertor.LoadAllDifferences();
Convertor.SelectAllModel1ToModel2(true, false);
Convertor.RunConvert();
var Result = Convertor.Model2Model;
Convertor.Delete();
return Result;
}
function Generate(l_Model, l_Output){
var v_Generator = l_Model.DefaultCodeGenerator;
v_Generator.CreateComments = false;
v_Generator.GenerateToFile(l_Output);
}
function main(){
var v_App; //application object
var v_Fso;
var v_Model; //data model object
var v_ModelTxtFileName;
var v_ModelTxtFile;
var v_TxtFileLine;
var v_TxtFileLineSubstr1;
var v_TxtFileLineSubstr2;
var v_Delimiter;
var v_ModelTxtFilePath = "C:\test";
var v_ModelSQLFilePath = v_ModelTxtFilePath+"\PostgreSQL";
//v_ModelTxtFilePath = v_ModelTxtFilePath.replace(/\/g, "\\");
v_ModelTxtFileName = v_ModelTxtFilePath+"\model_postgresql_ddl_list.txt";
v_App = new ActiveXObject("TDM.App");
v_Fso = new ActiveXObject("Scripting.FileSystemObject");
//Wait until all TDM packages are loaded
while(!v_App.Application.IsPackagesLoaded)
{
WScript.Sleep(1000);
}
v_ModelTxtFile = v_Fso.OpenTextFile(v_ModelTxtFileName,1,false);
while(!v_ModelTxtFile.AtEndOfStream){
v_TxtFileLine = v_ModelTxtFile.ReadLine();
//Log.Information("Line "+v_TxtFileLine);
v_Delimiter = v_TxtFileLine.indexOf(";");
//Log.Information("Index of Delimiter "+v_Delimiter);
if (v_Delimiter > 0) {
v_TxtFileLineSubstr1 = v_TxtFileLine.substring(0,v_Delimiter);
v_TxtFileLineSubstr2 = v_TxtFileLine.substring(v_Delimiter+1,v_TxtFileLine.Length);
//Log.Information(v_TxtFileLineSubstr1 + " " + v_TxtFileLineSubstr2);
v_TxtFileLineTwoSlash = v_TxtFileLineSubstr1.replace(/\\/g, "\\\\");
//Log.Information(v_TxtFileLineTwoSlash);
v_Model = v_App.OpenModelFromFile(v_TxtFileLineTwoSlash);
//Log.Information(v_ModelSQLFilePath);
//v_ModelSQLFilePath = v_ModelSQLFilePath.replace(/\\/g, "\\\\");
if(!v_Fso.FolderExists(v_ModelSQLFilePath)){
v_Fso.CreateFolder (v_ModelSQLFilePath);
}
//Convert Model
var v_ModelPG = Convert(v_Model, v_App);
// Save model
v_App.SaveModelToFile(v_ModelPG, 'C:\\test\\Auth_postgresql.txp');
// Generate SQL
Generate(v_ModelPG, v_ModelSQLFilePath+"\\"+v_TxtFileLineSubstr2);
// Delete only from memory.
v_ModelPG.Delete();
v_Model.Delete();
}
}
v_ModelTxtFile.Close();
}
Do i need to split into two scripts if i need to convert and generate DDL?
Thanks.
David