in src/PDWScripter/PDWscripter.cs [388:485]
public void getDbstructure(string outFile, string wrkMode, bool generateFile)
{
if (wrkMode == "ALL" || wrkMode == "DDL")
{
Console.Write("Getting " + this.sourceDb + " database DDL structure");
string outDBJsonDDLStructureFile = outFile + "_STRUCT_DDL.json";
StreamWriter sw = null;
FileStream fs = null;
getDbTables(true);
Console.Write(".");
getSchemas(sw, true);
Console.Write(".");
getSourceColumnsGlobal();
Console.Write(".");
getClusteredIndexGlobal();
getNonclusteredIndexesGlobal();
Console.Write(".");
getStatsGlobal();
Console.Write(".");
getPartitioningGlobal();
Console.Write("\r\nDone\r\n");
if (generateFile)
{
Console.Write("PersistStructure DDL to JSON file :" + outDBJsonDDLStructureFile + ">");
if (outDBJsonDDLStructureFile != "")
{
fs = new FileStream(outDBJsonDDLStructureFile, FileMode.Create);
sw = new StreamWriter(fs);
}
sw.Write(JsonConvert.SerializeObject(dbstruct));
sw.Close();
}
}
if (wrkMode == "ALL" || wrkMode == "DML")
{
Console.Write("Getting " + this.sourceDb + " database DML structure");
cmd.CommandText = @" SELECT c.definition, b.name + '.' + a.name AS ObjectName
FROM
sys.sql_modules c
INNER JOIN sys.objects a ON a.object_id = c.object_id
INNER JOIN sys.schemas b
ON a.schema_id = b.schema_id";
rdr = cmd.ExecuteReader();
DbObjectDefinitions = new List<KeyValuePair<string, string>>();
Regex r = new Regex(this.ExcludeObjectSuffixList, RegexOptions.IgnoreCase);
string ModuleName;
while (rdr.Read())
{
IDataRecord record = (IDataRecord)rdr;
ModuleName = record[1].ToString();
if (!r.IsMatch(ModuleName))
{
KeyValuePair<String, String> kvpObjNameDef = new KeyValuePair<String, String>(String.Format("{0}", record[1]), String.Format("{0}", record[0]).TrimEnd(new char[] { '\r', '\n', ' ' }));
if (!DbObjectDefinitions.Exists(objDef => objDef.Key == kvpObjNameDef.Key))
{
// Object doesn't exist
if (!DbObjectDefinitions.Any(objDef => objDef.Value.Contains(kvpObjNameDef.Key)))
{
// Object never used by an other object
DbObjectDefinitions.Add(kvpObjNameDef);
}
else
{
// Object already used by an other object, we had it previously to the calling one
int idxCallingObj = DbObjectDefinitions.IndexOf(DbObjectDefinitions.First(objDef => objDef.Value.Contains(kvpObjNameDef.Key)));
DbObjectDefinitions.Insert(idxCallingObj, kvpObjNameDef);
}
}
Console.Write(".");
}
}
rdr.Close();
Console.Write("\r\nDone\r\n");
if (generateFile)
{
string outDBJsonDMLStructureFile = outFile + "_STRUCT_DML.json";
StreamWriter sw = null;
FileStream fs = null;
Console.Write("PersistStructure DML to JSON file :" + outDBJsonDMLStructureFile + ">");
if (outDBJsonDMLStructureFile != "")
{
fs = new FileStream(outDBJsonDMLStructureFile, FileMode.Create);
sw = new StreamWriter(fs);
}
sw.Write(JsonConvert.SerializeObject(DbObjectDefinitions));
sw.Close();
}
}
}