public void getDbstructure()

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