示例#1
0
        private void WriteFKs(string FullFKsDir, List <BaseStatement> statements, IScriptOutputHandler OutputGen)
        {
            List <string> tableNames =
                (from DBInfo.Core.Statement.BaseStatement s in statements
                 where s is CreateForeignKey
                 select(s as CreateForeignKey).ForeignKey.TableName).ToList <string>();

            foreach (string tableName in tableNames)
            {
                FileStream   fs = new FileStream(FullFKsDir + "\\" + tableName + ".fk.sql", FileMode.Create, FileAccess.Write);
                StreamWriter sw = new StreamWriter(fs);

                List <BaseStatement> tableStatements =
                    (from BaseStatement s in statements
                     where s is CreateForeignKey && ((s as CreateForeignKey).ForeignKey.TableName == tableName)
                     select s).ToList <BaseStatement>();

                foreach (BaseStatement s in tableStatements)
                {
                    sw.WriteLine(s.Script);
                    sw.WriteLine(OutputGen.ScriptTerminator);
                    sw.WriteLine("");
                }

                sw.Flush();
                sw.Close();
                fs.Close();
            }
        }
 private void WriteIndexes(StreamWriter sw, Table t, IScriptOutputHandler OutputGen)
 {
     foreach (Index i in t.Indexes)
     {
         sw.WriteLine(i.Script);
         sw.WriteLine(OutputGen.ScriptTerminator);
         sw.WriteLine("");
     }
 }
 private void WriteFKs(StreamWriter sw, Table t, IScriptOutputHandler OutputGen)
 {
     foreach (ForeignKey fk in t.ForeignKeys)
     {
         sw.WriteLine(fk.Script);
         sw.WriteLine(OutputGen.ScriptTerminator);
         sw.WriteLine("");
     }
 }
示例#4
0
        private void WriteView(string FileName, View v, IScriptOutputHandler OutputGen)
        {
            FileStream   fs = new FileStream(FileName, FileMode.Create, FileAccess.Write);
            StreamWriter sw = new StreamWriter(fs);

            sw.WriteLine(v.CreateViewScript);
            sw.WriteLine(OutputGen.ScriptTerminator);
            sw.Flush();
            sw.Close();
            fs.Close();
        }
 private void WriteConstraints(StreamWriter sw, Table t, IScriptOutputHandler OutputGen)
 {
     sw.WriteLine(t.PrimaryKeyScript);
     sw.WriteLine(OutputGen.ScriptTerminator);
     sw.WriteLine("");
     foreach (CheckConstraint cc in t.CheckConstraints)
     {
         sw.WriteLine(cc.Script);
         sw.WriteLine(OutputGen.ScriptTerminator);
         sw.WriteLine("");
     }
 }
 private void WriteTrigger(StreamWriter sw, Trigger t, IScriptOutputHandler OutputGen)
 {
     sw.WriteLine(t.CreateTriggerScript);
     sw.WriteLine(OutputGen.ScriptTerminator);
 }
 private void WriteView(StreamWriter sw, View v, IScriptOutputHandler OutputGen)
 {
     sw.WriteLine(v.CreateViewScript);
     sw.WriteLine(OutputGen.ScriptTerminator);
 }
 private void WriteProcedure(StreamWriter sw, Procedure p, IScriptOutputHandler OutputGen)
 {
     sw.WriteLine(p.CreateProcedureScript);
     sw.WriteLine(OutputGen.ScriptTerminator);
     sw.WriteLine("");
 }
 private void WriteFunction(StreamWriter sw, Function f, IScriptOutputHandler OutputGen)
 {
     sw.WriteLine(f.CreateFunctionScript);
     sw.WriteLine(OutputGen.ScriptTerminator);
     sw.WriteLine("");
 }
        public void GenerateFileOutput(string OutputDir, List <BaseStatement> statements, IScriptOutputHandler OutputGenerator)
        {
            FileStream   fs = new FileStream(OutputDir + "\\" + ScriptName, FileMode.Create, FileAccess.Write);
            StreamWriter sw = new StreamWriter(fs);

            foreach (BaseStatement s in statements)
            {
                sw.WriteLine(s.Script);
                sw.WriteLine(OutputGenerator.ScriptTerminator);
                sw.WriteLine("");
            }
            sw.Flush();
            sw.Close();
            fs.Close();
        }
示例#11
0
        public override bool Execute()
        {
            List <DBObjectType> dataToExtract        = GetDataToExtractEnum();
            List <DBObjectType> dataToGenerateOutput = GetDataToGenerateOutputEnum();

            ExtractionType exType;

            if (this.extractiontype.ToLower() == "database")
            {
                exType = ExtractionType.Database;
            }
            else if (this.extractiontype == "script")
            {
                exType = ExtractionType.Script;
            }
            else
            {
                throw new Exception(String.Format("Invalid extraction type: {0}", this.extractiontype));
            }

            Database             db           = null;
            List <BaseStatement> statementCol = null;

            if (exType == ExtractionType.Database)
            {
                if (String.IsNullOrEmpty(_DBExtractorClass))
                {
                    throw new Exception("For database extraction type, dbextractorclass is required");
                }

                Type dbExtractorClass = Type.GetType(_DBExtractorClass);
                if (dbExtractorClass == null)
                {
                    throw new Exception(String.Format("Couldn't create instance for type {0}", _DBExtractorClass));
                }
                IDatabaseExtractor dbExtractor = (IDatabaseExtractor)Activator.CreateInstance(dbExtractorClass);

                DatabaseExtractor extractor = new DatabaseExtractor();
                extractor.Extractor             = dbExtractor;
                extractor.InputConnectionString = _InputConnectionString;

                db = extractor.Extract(dataToExtract);
            }
            else
            {
                if (String.IsNullOrEmpty(ScriptExtractorClass))
                {
                    throw new Exception("For script extraction type, scriptextractorclass is required");
                }

                Type scriptExtractorClass = Type.GetType(ScriptExtractorClass);
                if (scriptExtractorClass == null)
                {
                    throw new Exception(String.Format("Couldn't create instance for type {0}", scriptExtractorClass));
                }

                IScriptExtractor scriptExtractor = (IScriptExtractor)Activator.CreateInstance(scriptExtractorClass);

                if (_InputFiles == null)
                {
                    throw new Exception("InputFiles must be specified.");
                }

                foreach (ITaskItem file in _InputFiles)
                {
                    scriptExtractor.InputFiles.Add(file.ItemSpec);
                }
                statementCol = scriptExtractor.Extract(dataToExtract);
            }

            Type outputGenClass = Type.GetType(_OutputGeneratorClass);

            if (outputGenClass == null)
            {
                throw new Exception(String.Format("Couldn't create instance for type {0}", _OutputGeneratorClass));
            }
            IOutputGenerator gen = (IOutputGenerator)Activator.CreateInstance(outputGenClass);

            if (gen.ExpectedInputType == ExpectedInputType.StatementCollection)
            {
                if (statementCol == null)
                {
                    DatabaseToStatementCollectionConverter conv = new DatabaseToStatementCollectionConverter();
                    statementCol = conv.Convert(db);
                }

                Type scriptOutputGenClass = Type.GetType(_ScriptOutputGeneratorClass);

                if (((IStatementCollectionOutputGenerator)gen).RequiresScriptOutputHandler)
                {
                    if (scriptOutputGenClass == null)
                    {
                        throw new Exception(String.Format("Couldn't create instance for type {0}", _ScriptOutputGeneratorClass));
                    }
                    IScriptOutputHandler scriptOutputGen = (IScriptOutputHandler)Activator.CreateInstance(scriptOutputGenClass);
                    ((IStatementCollectionOutputGenerator)gen).ScriptOutputGen = scriptOutputGen;
                }

                if (String.IsNullOrEmpty(ScriptFileOutputGenerator))
                {
                    throw new Exception(String.Format("For output file type you must specify ScriptFileOutputGenerator"));
                }
                Type scriptFileOutputGeneratorType = Type.GetType(ScriptFileOutputGenerator);
                if (scriptFileOutputGeneratorType == null)
                {
                    throw new Exception(String.Format("Couldn't create instance for type {0}", ScriptFileOutputGenerator));
                }
                ((IStatementCollectionOutputGenerator)gen).ScriptFileOutputGenerator = (IScriptFileOutputGenerator)Activator.CreateInstance(scriptFileOutputGeneratorType);

                gen.OutputDir = OutputDir;
                ((IStatementCollectionOutputGenerator)gen).GenerateOutput(statementCol, dataToGenerateOutput);
            }
            else
            {
                StatementCollectionToDatabaseConverter conv = new StatementCollectionToDatabaseConverter();
                db = conv.Convert(statementCol);

                gen.OutputDir = OutputDir;
                ((IDBSchemaOutputGenerator)gen).GenerateOutput(db, dataToGenerateOutput);
            }

            return(true);
        }
示例#12
0
        public void GenerateFileOutput(string OutputDir, List <BaseStatement> statements, IScriptOutputHandler OutputGenerator)
        {
            string FullTableDir = OutputDir + "\\" + TablesDir;

            Directory.CreateDirectory(FullTableDir);

            string FullFKDir = OutputDir + "\\" + ForeignKeysDir;

            Directory.CreateDirectory(FullFKDir);

            string FullConstraintsDir = OutputDir + "\\" + ConstraintsDir;

            Directory.CreateDirectory(FullConstraintsDir);

            string FullFunctionsDir = OutputDir + "\\" + FunctionsDir;

            Directory.CreateDirectory(FullFunctionsDir);

            string FullIndexesDir = OutputDir + "\\" + IndexesDir;

            Directory.CreateDirectory(FullIndexesDir);

            string FullProceduresDir = OutputDir + "\\" + ProceduresDir;

            Directory.CreateDirectory(FullProceduresDir);

            string FullSequencesDir = OutputDir + "\\" + SequencesDir;

            Directory.CreateDirectory(FullSequencesDir);

            string FullTriggersDir = OutputDir + "\\" + TriggersDir;

            Directory.CreateDirectory(FullTriggersDir);

            string FullViewsDir = OutputDir + "\\" + ViewsDir;

            Directory.CreateDirectory(FullViewsDir);

            foreach (BaseStatement s in statements)
            {
                if (s is CreateTable)
                {
                    WriteScript(FullTableDir + "\\" + ((CreateTable)s).Table.TableName + ".table.sql", s.Script);
                }
                if (s is CreateTrigger)
                {
                    WriteScript(FullTriggersDir + "\\" + ((CreateTrigger)s).Trigger.TableName + "." + ((CreateTrigger)s).Trigger.TriggerName + ".trigger.sql", s.Script);
                }
                if (s is CreateFunction)
                {
                    WriteScript(FullFunctionsDir + "\\" + ((CreateFunction)s).Function.Name + ".function.sql", s.Script);
                }
                if (s is CreateProcedure)
                {
                    WriteScript(FullProceduresDir + "\\" + ((CreateProcedure)s).Procedure.Name + ".procedure.sql", s.Script);
                }
                if (s is CreateView)
                {
                    WriteScript(FullViewsDir + "\\" + ((CreateView)s).View.Name + ".view.sql", s.Script);
                }
            }

            WriteConstraints(FullConstraintsDir, statements, OutputGenerator);
            WriteFKs(FullFKDir, statements, OutputGenerator);
            //WriteIndexes(FullIndexesDir + "\\" + t.TableName + ".indexes.sql", t, OutputGenerator);
        }
示例#13
0
        private void WriteConstraints(string FullConstraintsDir, List <BaseStatement> statements, IScriptOutputHandler OutputGen)
        {
            List <string> tableNames =
                (from DBInfo.Core.Statement.BaseStatement s in statements
                 where s is CreatePrimaryKey
                 select(s as CreatePrimaryKey).Table.TableName).Union <string>(
                    from BaseStatement s2 in statements
                    where s2 is CreateCheckConstraint
                    select(s2 as CreateCheckConstraint).CheckConstraint.TableName).Distinct <string>().ToList <string>();

            foreach (string tableName in tableNames)
            {
                FileStream   fs = new FileStream(FullConstraintsDir + "\\" + tableName + ".constraints.sql", FileMode.Create, FileAccess.Write);
                StreamWriter sw = new StreamWriter(fs);

                List <BaseStatement> tableStatements =
                    (from BaseStatement s in statements
                     where s is CreatePrimaryKey && ((s as CreatePrimaryKey).Table.TableName == tableName)
                     select s).Union <BaseStatement>(
                        from BaseStatement s2 in statements
                        where s2 is CreateCheckConstraint && ((s2 as CreateCheckConstraint).CheckConstraint.TableName == tableName)
                        select s2).ToList <BaseStatement>();

                foreach (BaseStatement s in tableStatements)
                {
                    sw.WriteLine(s.Script);
                    sw.WriteLine(OutputGen.ScriptTerminator);
                    sw.WriteLine("");
                }

                sw.Flush();
                sw.Close();
                fs.Close();
            }
        }