in src/PDWScripter/PDWscripter.cs [165:253]
private void CompareSchemas(StreamWriter sw, PDWscripter cSource, PDWscripter cTarget, Boolean SourceFromFile, FilterSettings FilterSet)
{
List<string> TargetSchemas = new List<string>();
List<string> SourceSchemas = new List<string>();
StringBuilder dropscript = new StringBuilder();
String createUseDbTxt = string.Empty;
String strStartWarningMessage = string.Empty;
String strEndWarningMessage = string.Empty;
cTarget.cmd.CommandText = "select name from sys.schemas where name not in ('dbo','sys','INFORMATION_SCHEMA')";
//==> SOURCE
if (SourceFromFile)
{
SourceSchemas.AddRange(dbstruct.schemas);
}
else
{
cSource.cmd.CommandText = "select name from sys.schemas where name not in ('dbo','sys','INFORMATION_SCHEMA')";
rdr = cSource.cmd.ExecuteReader();
while (rdr.Read())
{
SourceSchemas.Add(rdr.GetString(rdr.GetOrdinal("name")));
}
rdr.Close();
}
//==> TARGET
rdr = cTarget.cmd.ExecuteReader();
while (rdr.Read())
{
TargetSchemas.Add(rdr.GetString(rdr.GetOrdinal("name")));
}
rdr.Close();
List<string> ListSchemasToCreate;
List<string> ListSchemasToDelete;
// COMPARE
if (FilterSet.Granularity != "None")
{
ListSchemasToCreate = (SourceSchemas.Intersect(FilterSet.GetSchemas())).Except(TargetSchemas).ToList();
ListSchemasToDelete = new List<string>();
}
else
{
ListSchemasToCreate = SourceSchemas.Except(TargetSchemas).ToList();
ListSchemasToDelete = TargetSchemas.Except(SourceSchemas).ToList();
}
string description = "/*####################################################################################################################################################*/\r\n";
description += "--schemas - to create =" + ListSchemasToCreate.Count.ToString() + " - to delete = " + ListSchemasToDelete.Count.ToString() + "\r\n";
description += "PRINT 'schemas creation'\r\nGO\r\n";
sw.WriteLine(description);
if (ListSchemasToDelete.Count > 0)
writeWarningtxt(description);
foreach (string schemaTobeCreated in ListSchemasToCreate)
{
createSchemaTxt = "CREATE SCHEMA [" + schemaTobeCreated + "];\r\nGO\r\n";
sw.WriteLine(createSchemaTxt);
}
dropSchemaTxt = string.Empty;
foreach (string schemaTobeDeleted in ListSchemasToDelete)
{
dropSchemaTxt = "/* DROP SCHEMA " + schemaTobeDeleted + ";\r\nGO */\r\n";
dropscript.Append(dropSchemaTxt);
}
if (dropscript.Length > 0)
{
createUseDbTxt = "USE " + cTarget.sourceDb + "\r\nGO\r\n";
strStartWarningMessage = "/* WARNING !!!! ======: SCHEMAS TO DROP.\r\n";
strEndWarningMessage = "*/\r\n\r\n";
dropSchemaTxt = strStartWarningMessage + dropscript.ToString() + strEndWarningMessage;
sw.WriteLine(dropSchemaTxt);
dropSchemaTxt = strStartWarningMessage + createUseDbTxt + dropscript.ToString() + strEndWarningMessage;
writeWarningtxt(dropSchemaTxt);
}
}