Example #1
0
        /// <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();
        }
Example #2
0
        /// <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();
            }
        }