/// <summary> /// Instance main execution method /// </summary> /// <param name="logger">The logger.</param> private static void Run(Logger logger) { // Parse command line OptionParser op = new OptionParser(); ParseForTypeResults parseResults = op.ParseForType(typeof(Config)); if (parseResults == null) { DisplayUsage(logger); return; } Config config = new Config(); parseResults.Apply(config); Exporter scripter = new Exporter(logger, config); scripter.Run(); }
/// <summary> /// Instance main execution method /// </summary> private void Run() { //Parse command line OptionParser op = new OptionParser(); ParseForTypeResults parseResults = op.ParseForType(typeof(Config)); if (parseResults == null) { DisplayUsage(); return; } parseResults.Apply(config); //Create server and database connection server = new Server(config.server); Database db = server.Databases[config.database]; //Collections for objects with and without dependancies List <Urn> dependentObjects = new List <Urn>(); List <SqlSmoObject> independentObjectsFirst = new List <SqlSmoObject>(); List <DataTable> dtList = new List <DataTable>(); string[] names = Enum.GetNames(typeof(DatabaseObjectTypes)); DatabaseObjectTypes[] values = (DatabaseObjectTypes[])Enum.GetValues(typeof(DatabaseObjectTypes)); for (int i = 0; i < names.Length; i++) { string Name = names[i]; if (Name != "All" && Array.IndexOf(config.excludeTypes.ToUpper().Split(','), Name.ToUpper()) == -1) { writeStdError("Getting objects: " + Name); dtList.Add(db.EnumObjects(values[i])); } } foreach (DataTable dt in dtList) { foreach (DataRow dr in dt.Rows) { //Select all objects, or only the named object if (config.objectName == null || dr["Name"].Equals(config.objectName)) { //Ignore excluded schemas if (Array.IndexOf(Config.aExcludedSchemas, dr["Schema"]) == -1) { Urn urn = new Urn(dr["Urn"].ToString()); //Ignore excluded types if (Array.IndexOf(config.excludeTypes.ToUpper().Split(','), urn.Type.ToUpper()) == -1) //if ( Array.IndexOf(config.excludeTypes, Enum.Parse(typeof(DatabaseObjectTypes), urn.Type, true))==-1) { //Split into dependant / independant types if (Array.IndexOf(Config.aDependentTypeOrder, dr["DatabaseObjectTypes"].ToString()) != -1) { //Add the URN to the dependent object list dependentObjects.Add(urn); } else { //Add the sqlSmoObject to the independent object list SqlSmoObject sqlSmoObject = server.GetSmoObject(urn); if (sqlSmoObject is ServiceBroker) { //For ServiceBroker object, add child BrokerServices and not self foreach (BrokerService brokerService in (sqlSmoObject as ServiceBroker).Services) { independentObjectsLast.Add(brokerService); } } else { //Other objects independentObjectsFirst.Add(sqlSmoObject); } } } } } } } //Export database creation if (config.scriptDatabase) { ScriptObject(db); } //Sort independent objects SMOObjectComparer smoObjectComparer = new SMOObjectComparer(); independentObjectsFirst.Sort(smoObjectComparer); independentObjectsLast.Sort(smoObjectComparer); //Export starting independent objects foreach (SqlSmoObject sqlSmoObject in independentObjectsFirst) { ScriptObject(sqlSmoObject); } //Get dependancy information, sort and export dependent objects if (dependentObjects.Count > 0) { //Sort and export dependent objects types DependencyWalker dependencyWalker = new DependencyWalker(server); DependencyTree dependencyTree = dependencyWalker.DiscoverDependencies(dependentObjects.ToArray(), DependencyType.Parents); ScriptDependencyTreeNode(dependencyTree); } //Export ending independent objects foreach (SqlSmoObject sqlSmoObject in independentObjectsLast) { ScriptObject(sqlSmoObject); } //Output file order information if (fileBuildOrder.Count > 0) { //Get filename string fileName = config.orderFilename; writeStdError("Creating Order file: " + fileName); if (config.outputDirectory != null) { fileName = Path.Combine(config.outputDirectory, fileName); } //Create output directory if needed string g = Path.GetDirectoryName(fileName); if (g.Length != 0) { Directory.CreateDirectory(g); } StreamWriter sw = new StreamWriter(fileName); foreach (string s in fileBuildOrder) { sw.WriteLine(s); } sw.Close(); } }