private void getDML()

in src/PDWScripter/PDWscripter.cs [1479:1602]


        private void getDML(PDWscripter c, string outFile)
        {


            StreamWriter sw = null;
            FileStream fs = null;
            Regex r = new Regex(this.ExcludeObjectSuffixList, RegexOptions.IgnoreCase);
            string ModuleName;

            if (outFile != "")
            {
                fs = new FileStream(outFile, FileMode.Create);
                sw = new StreamWriter(fs);
            }

            Console.Write("DML>");


            // get generated statistics
            String description = "-- script generated the : " + String.Format("{0:d/M/yyyy HH:mm:ss}", DateTime.Now);
            cmd.CommandText = "select count(1) from sys.sql_modules";
            int objectcount = (int)cmd.ExecuteScalar();
            description += "\r\n-- objects scripted - objects = " + objectcount.ToString();
            Console.Write("objects scripted - objects = " + objectcount.ToString());
            sw.WriteLine(description);



            // Adaptation to sort by dependency
            cmd.CommandText = "SELECT definition, object_name(M.object_id) from sys.sql_modules m JOIN SYS.OBJECTS o ON M.OBJECT_ID = o.OBJECT_ID " +
            "WHERE SCHEMA_NAME(SCHEMA_ID) +'.' + object_name(M.object_id) LIKE '" + filterSpec + "' order by definition;";
            //cmd.CommandText = "select definition, object_name(object_id) from sys.sql_modules order by definition;";

            rdr = cmd.ExecuteReader();




            String createUseDbTxt = "USE " + c.sourceDb + "\r\nGO\r\n";
            sw.WriteLine(createUseDbTxt);

            List<KeyValuePair<String, String>> lstDbObjectDefinitions = new List<KeyValuePair<string, string>>();



            while (rdr.Read())
            {

                ModuleName = rdr.GetString(1);
                if (!r.IsMatch(ModuleName))
                {
                    IDataRecord record = (IDataRecord)rdr;
                    KeyValuePair<String, String> kvpObjNameDef = new KeyValuePair<String, String>(String.Format("{0}", record[1]), String.Format("{0}", record[0]));


                    if (!lstDbObjectDefinitions.Exists(objDef => objDef.Key == kvpObjNameDef.Key))
                    {

                        // Object doesn't exist
                        if (!lstDbObjectDefinitions.Any(objDef => objDef.Value.Contains(kvpObjNameDef.Key)))
                        {
                            // Object never used by an other object

                            lstDbObjectDefinitions.Add(kvpObjNameDef);
                        }
                        else
                        {
                            // Object already used by an other object, we had it previously to the calling one
                            int idxCallingObj = lstDbObjectDefinitions.IndexOf(lstDbObjectDefinitions.First(objDef => objDef.Value.Contains(kvpObjNameDef.Key)));

                            lstDbObjectDefinitions.Insert(idxCallingObj, kvpObjNameDef);
                        }
                    }
                }
            }
            int nbObjectDefinitions = lstDbObjectDefinitions.Count();
            int index = 0;
            string prevDbObjectDefinition = String.Empty;
            foreach (KeyValuePair<String, String> dbObjectDefinition in lstDbObjectDefinitions)
            {
                if (prevDbObjectDefinition != dbObjectDefinition.Value)
                {
                    prevDbObjectDefinition = dbObjectDefinition.Value;

                    if (scriptMode == "Delta")
                    {
                        // Add object Drop
                        string strObjectFullName = dbObjectDefinition.Value.Substring(12, dbObjectDefinition.Value.IndexOf(' ', 13) - 12);

                        string strObjectType = dbObjectDefinition.Value.Substring(7, 4);

                        string strDropObjectQuery = "DROP " + strObjectType + " " + strObjectFullName + ";";
                        sw.WriteLine(strDropObjectQuery);
                        sw.WriteLine("");
                        if (index != nbObjectDefinitions - 1)
                        {
                            sw.WriteLine("GO");
                        }

                        sw.WriteLine("");
                        sw.WriteLine("");
                    }

                    // Add object Create
                    sw.WriteLine(dbObjectDefinition.Value.ToString());
                    sw.WriteLine("");

                    sw.WriteLine("GO");

                    sw.WriteLine("");
                    sw.WriteLine("");
                    Console.Write(".");
                }
                index++;
            }
            sw.WriteLine("PRINT 'END'");
            if (outFile != "")
            {
                sw.Close();
            }
            rdr.Close();
            Console.WriteLine("done");

        }