private void CompareSchemas()

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);
            }


        }