Example #1
0
 public void Fill(Database database, string connectioString)
 {
     if (database.Options.Ignore.FilterSchema)
     {
         using (SqlConnection conn = new SqlConnection(connectioString))
         {
             using (SqlCommand command = new SqlCommand(GetSQL(), conn))
             {
                 conn.Open();
                 command.CommandTimeout = 0;
                 using (SqlDataReader reader = command.ExecuteReader())
                 {
                     while (reader.Read())
                     {
                         Model.Schema item = new Model.Schema(database);
                         item.Id = (int)reader["schema_id"];
                         item.Name = reader["name"].ToString();
                         item.Owner = reader["owner"].ToString();
                         item.CreateDate = (DateTime) reader["create_date"];
                         item.ModifyDate = (DateTime) reader["modify_date"];
                         database.Schemas.Add(item);
                     }
                 }
             }
         }
     }
 }
Example #2
0
 public void Fill(Database database, string connectionString)
 {
     if (database.Options.Ignore.FilterFullText)
     {
         using (SqlConnection conn = new SqlConnection(connectionString))
         {
             using (SqlCommand command = new SqlCommand(GetSQL(), conn))
             {
                 conn.Open();
                 using (SqlDataReader reader = command.ExecuteReader())
                 {
                     while (reader.Read())
                     {
                         FullText item = new FullText(database);
                         item.Id = (int)reader["fulltext_catalog_id"];
                         item.Name = reader["Name"].ToString();
                         item.Owner = reader["Owner"].ToString();
                         item.IsAccentSensity = (bool)reader["is_accent_sensitivity_on"];
                         item.IsDefault = (bool)reader["is_default"];
                         if (!reader.IsDBNull(reader.GetOrdinal("path")))
                             item.Path = reader["path"].ToString().Substring(0, reader["path"].ToString().Length - item.Name.Length);
                         if (!reader.IsDBNull(reader.GetOrdinal("FileGroupName")))
                             item.FileGroupName = reader["FileGroupName"].ToString();
                         database.FullText.Add(item);
                     }
                 }
             }
         }
     }
 }
Example #3
0
 public void Fill(Database database, string connectionString)
 {
     if (database.Options.Ignore.FilterSynonyms)
     {
         using (SqlConnection conn = new SqlConnection(connectionString))
         {
             using (SqlCommand command = new SqlCommand(GetSQL(), conn))
             {
                 conn.Open();
                 command.CommandTimeout = 0;
                 using (SqlDataReader reader = command.ExecuteReader())
                 {
                     while (reader.Read())
                     {
                         Synonym item = new Synonym(database) {
                             Id = (int) reader["object_id"],
                             Name = reader["Name"].ToString(),
                             Owner = reader["Owner"].ToString(),
                             Value = reader["base_object_name"].ToString(),
                             CreateDate = (DateTime) reader["create_date"],
                             ModifyDate = (DateTime) reader["modify_date"]
                         };
                         database.Synonyms.Add(item);
                     }
                 }
             }
         }
     }
 }
 private static void FillParameters(Database database, string connectionString)
 {
     using (SqlConnection conn = new SqlConnection(connectionString))
     {
         using (SqlCommand command = new SqlCommand(GetSQLParameters(), conn))
         {
             conn.Open();
             command.CommandTimeout = 0;
             using (SqlDataReader reader = command.ExecuteReader())
             {
                 while (reader.Read())
                 {
                     Parameter param = new Parameter();
                     param.Name = reader["Name"].ToString();
                     param.Type = reader["TypeName"].ToString();
                     param.Size = (short)reader["max_length"];
                     param.Scale = (byte)reader["scale"];
                     param.Precision = (byte)reader["precision"];
                     param.Output = (bool)reader["is_output"];
                     if (param.Type.Equals("nchar") || param.Type.Equals("nvarchar"))
                     {
                         if (param.Size != -1)
                             param.Size = param.Size / 2;
                     }
                     database.CLRFunctions[reader["ObjectName"].ToString()].Parameters.Add(param);
                 }
             }
         }
     }
 }
 public void Fill(Database database, string connectionString)
 {
     if (database.Options.Ignore.FilterDDLTriggers)
     {
         using (SqlConnection conn = new SqlConnection(connectionString))
         {
             conn.Open();
             using (SqlCommand command = new SqlCommand(GetSQL(), conn))
             {
                 command.CommandTimeout = 0;
                 using (SqlDataReader reader = command.ExecuteReader())
                 {
                     while (reader.Read())
                     {
                         Trigger trigger = new Trigger(database);
                         trigger.Text = reader["Text"].ToString();
                         trigger.Name = reader["Name"].ToString();
                         trigger.InsteadOf = (bool)reader["is_instead_of_trigger"];
                         trigger.IsDisabled = (bool)reader["is_disabled"];
                         trigger.IsDDLTrigger = true;
                         trigger.NotForReplication = (bool)reader["is_not_for_replication"];
                         trigger.Owner = "";
                         database.DDLTriggers.Add(trigger);
                     }
                 }
             }
         }
     }
 }
 public void Fill(Database database, string connectioString)
 {
     int lastObjectId = 0;
     PartitionScheme item = null;
     if (database.Options.Ignore.FilterPartitionScheme)
     {
         using (SqlConnection conn = new SqlConnection(connectioString))
         {
             using (SqlCommand command = new SqlCommand(GetSQL(), conn))
             {
                 conn.Open();
                 command.CommandTimeout = 0;
                 using (SqlDataReader reader = command.ExecuteReader())
                 {
                     while (reader.Read())
                     {
                         if (lastObjectId != (int)reader["ID"])
                         {
                             lastObjectId = (int)reader["ID"];
                             item = new PartitionScheme(database);
                             item.Id = (int)reader["ID"];
                             item.Name = reader["name"].ToString();
                             item.PartitionFunction = reader["FunctionName"].ToString();
                             database.PartitionSchemes.Add(item);
                         }
                         item.FileGroups.Add(reader["FileGroupName"].ToString());
                     }
                 }
             }
         }
     }
 }
 private static void FillFiles(Database database, string connectionString)
 {
     if (database.Options.Ignore.FilterAssemblies)
     {
         using (SqlConnection conn = new SqlConnection(connectionString))
         {
             using (SqlCommand command = new SqlCommand(GetSQLFiles(), conn))
             {
                 conn.Open();
                 command.CommandTimeout = 0;
                 using (SqlDataReader reader = command.ExecuteReader())
                 {
                     while (reader.Read())
                     {
                         if (((int)reader["FileId"]) != 1)
                         {
                             Assembly assem = database.Assemblies[reader["Name"].ToString()];
                             AssemblyFile file = new AssemblyFile(assem,reader["FileName"].ToString(), ToHex((byte[])reader["FileContent"]));
                             assem.Files.Add(file);
                         }
                     }
                 }
             }
         }
     }
 }
Example #8
0
 public void Fill(Database database, string connectionString)
 {
     if (database.Options.Ignore.FilterRules)
     {
         using (SqlConnection conn = new SqlConnection(connectionString))
         {
             using (SqlCommand command = new SqlCommand(GetSQL(), conn))
             {
                 conn.Open();
                 using (SqlDataReader reader = command.ExecuteReader())
                 {
                     while (reader.Read())
                     {
                         Rule item = new Rule(database);
                         item.Id = (int)reader["object_id"];
                         item.Name = reader["Name"].ToString();
                         item.Owner = reader["Owner"].ToString();
                         item.Text = reader["Definition"].ToString();
                         database.Rules.Add(item);
                     }
                 }
             }
         }
     }
 }
 public void Fill(Database database, string connectionString)
 {
     try
     {
         if (database.Options.Ignore.FilterTableFileGroup)
         {
             using (SqlConnection conn = new SqlConnection(connectionString))
             {
                 using (SqlCommand command = new SqlCommand(GetSQL(), conn))
                 {
                     conn.Open();
                     using (SqlDataReader reader = command.ExecuteReader())
                     {
                         while (reader.Read())
                         {
                             FileGroup item = new FileGroup(database);
                             item.Id = (int)reader["ID"];
                             item.Name = reader["name"].ToString();
                             item.Owner = "";
                             item.IsDefaultFileGroup = (bool)reader["is_default"];
                             item.IsReadOnly = (bool)reader["is_read_only"];
                             item.IsFileStream = reader["type"].Equals("FD");
                             FillFiles(item,connectionString);
                             database.FileGroups.Add(item);
                         }
                     }
                 }
             }
         }
     }
     catch
     {
         throw;
     }
 }
Example #10
0
        public void Fill(Database database, string connectionString)
        {
            if (database.Options.Ignore.FilterRules)
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    using (SqlCommand command = new SqlCommand(GetSQL(), conn))
                    {
                        conn.Open();
                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                var name = reader["Name"].ToString();
                                var owner = reader["Owner"].ToString();

                                Default item = new Default(database);
                                item.Id = (int)reader["object_id"];
                                item.Name = Util.SqlStrings.HasHexEnding(name) ? AlternateName(owner, reader["TableName"].ToString(), reader["ColumnName"].ToString()) : name;
                                item.Owner = owner;
                                item.Value = reader["Definition"].ToString();
                                database.Defaults.Add(item);
                            }
                        }
                    }
                }
            }
        }
 public static string Get(DatabaseInfo.VersionTypeEnum version, Database databaseSchema)
 {
     if (version == DatabaseInfo.VersionTypeEnum.SQLServer2005) return Get2005(databaseSchema);
     if (version == DatabaseInfo.VersionTypeEnum.SQLServer2008) return Get2008(databaseSchema);
     if (version == DatabaseInfo.VersionTypeEnum.SQLServer2008R2) return Get2008R2(databaseSchema);
     if (version == DatabaseInfo.VersionTypeEnum.SQLServerAzure10) return GetAzure(databaseSchema);
     return "";
 }
 public void Fill(Database database, string connectionString, List<MessageLog> messages)
 {
     //not supported in azure yet http://msdn.microsoft.com/en-us/library/ee336233.aspx
     if (database.Info.Version == DatabaseInfo.VersionTypeEnum.SQLServerAzure10) return;
     
     try
     {
         if (database.Options.Ignore.FilterUserDataType)
         {
             root.RaiseOnReading(new ProgressEventArgs("Reading UDT...", Constants.READING_UDT));
             using (SqlConnection conn = new SqlConnection(connectionString))
             {
                 using (SqlCommand command = new SqlCommand(UserDataTypeCommand.Get(database.Info.Version), conn))
                 {
                     conn.Open();
                     command.CommandTimeout = 0;
                     using (SqlDataReader reader = command.ExecuteReader())
                     {
                         while (reader.Read())
                         {
                             root.RaiseOnReadingOne(reader["Name"]);
                             UserDataType item = new UserDataType(database);
                             item.Id = (int)reader["tid"];
                             item.AllowNull = (bool)reader["is_nullable"];
                             item.Size = (short)reader["max_length"];
                             item.Name = reader["Name"].ToString();
                             item.Owner = reader["owner"].ToString();
                             item.Precision = int.Parse(reader["precision"].ToString());
                             item.Scale = int.Parse(reader["scale"].ToString());
                             if (!String.IsNullOrEmpty(reader["defaultname"].ToString()))
                             {
                                 item.Default.Name = reader["defaultname"].ToString();
                                 item.Default.Owner = reader["defaultowner"].ToString();
                             }
                             if (!String.IsNullOrEmpty(reader["rulename"].ToString()))
                             {
                                 item.Rule.Name = reader["rulename"].ToString();
                                 item.Rule.Owner = reader["ruleowner"].ToString();
                             }
                             item.Type = reader["basetypename"].ToString();
                             item.IsAssembly = (bool)reader["is_assembly_type"];
                             item.AssemblyId = (int)reader["assembly_id"];
                             item.AssemblyName = reader["assembly_name"].ToString();
                             item.AssemblyClass = reader["assembly_class"].ToString();
                             database.UserTypes.Add(item);
                         }
                     }
                 }
             }
             if (database.Options.Ignore.FilterTable)
                 FillColumnsDependencies(database.UserTypes, connectionString);
         }
     }
     catch (Exception ex)
     {
         messages.Add(new MessageLog(ex.Message, ex.StackTrace, MessageLog.LogType.Error));
     }
 }
 public void Fill(Database database, string connectionString)
 {
     //not supported in azure yet
     if (database.Info.Version == DatabaseInfo.VersionTypeEnum.SQLServerAzure10) return;
     
     int parentId = 0;
     bool change = false;
     Table parent = null;
     root.RaiseOnReading(new ProgressEventArgs("Reading FullText Index...", Constants.READING_INDEXES));                      
     using (SqlConnection conn = new SqlConnection(connectionString))
     {
         using (SqlCommand command = new SqlCommand(FullTextIndexSQLCommand.Get(database.Info.Version), conn))
         {
             conn.Open();
             command.CommandTimeout = 0;
             using (SqlDataReader reader = command.ExecuteReader())
             {
                 FullTextIndex item = null;
                 while (reader.Read())
                 {
                     root.RaiseOnReadingOne(reader["Name"]);
                     if (parentId != (int)reader["object_id"])
                     {
                         parentId = (int)reader["object_id"];
                         parent = database.Tables.Find(parentId);
                         change = true;
                     }
                     else
                         change = false;
                     if (change)
                     {
                         item = new FullTextIndex(parent);
                         item.Name = reader["Name"].ToString();
                         item.Owner = parent.Owner;
                         item.FullText = reader["FullTextCatalogName"].ToString();
                         item.Index = reader["IndexName"].ToString();
                         item.IsDisabled = !(bool)reader["is_enabled"];
                         item.ChangeTrackingState = reader["ChangeTracking"].ToString();
                         if (database.Info.Version == DatabaseInfo.VersionTypeEnum.SQLServer2008)
                             item.FileGroup = reader["FileGroupName"].ToString();
                         ((Table)parent).FullTextIndex.Add(item);
                     }
                     FullTextIndexColumn ccon = new FullTextIndexColumn();
                     ccon.ColumnName = reader["ColumnName"].ToString();
                     ccon.Language = reader["LanguageName"].ToString();
                     item.Columns.Add(ccon);
                 }
             }
         }
     }
 }
        public void Fill(Database database, string connectionString)
        {
            ICode code = null;
            try
            {
                if ((database.Options.Ignore.FilterStoreProcedure) || (database.Options.Ignore.FilterView) || (database.Options.Ignore.FilterFunction) || (database.Options.Ignore.FilterTrigger))
                {
                    root.RaiseOnReading(new ProgressEventArgs("Reading Text Objects...", Constants.READING_TEXTOBJECTS));
                    using (SqlConnection conn = new SqlConnection(connectionString))
                    {
                        using (SqlCommand command = new SqlCommand(GetSQL(database.Options), conn))
                        {
                            conn.Open();
                            command.CommandTimeout = 0;
                            using (SqlDataReader reader = command.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    code = null;
                                    root.RaiseOnReadingOne(reader["name"]);
                                    string type = reader["Type"].ToString().Trim();
                                    string name = reader["name"].ToString();
                                    string definition = reader["Text"].ToString();
                                    int id = (int)reader["object_id"];
                                    if (type.Equals("V"))
                                        code = (ICode)database.Views.Find(id);

                                    if (type.Equals("TR"))
                                        code = (ICode)database.Find(id);

                                    if (type.Equals("P"))
                                        ((ICode)database.Procedures.Find(id)).Text = GetObjectDefinition(type, name, definition);

                                    if (type.Equals("IF") || type.Equals("FN") || type.Equals("TF"))
                                        code = (ICode)database.Functions.Find(id);

                                    if (code != null)
                                        code.Text = reader["Text"].ToString();
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Example #15
0
 public void Fill(Database database, string connectionString, List<MessageLog> messages)
 {
     try
     {
         root.RaiseOnReading(new ProgressEventArgs("Reading views...", Constants.READING_VIEWS));
         if (database.Options.Ignore.FilterView)
         {
             FillView(database,connectionString);
         }
     }
     catch (Exception ex)
     {
         messages.Add(new MessageLog(ex.Message, ex.StackTrace, MessageLog.LogType.Error));
     }
 }
        public void FillCheck(Database database, string connectionString)
        {
            int parentId = 0;
            ISchemaBase table = null;

            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                using (SqlCommand command = new SqlCommand(ConstraintSQLCommand.GetCheck(database.Info.Version), conn))
                {
                    root.RaiseOnReading(new ProgressEventArgs("Reading constraint...", Constants.READING_CONSTRAINTS));
                    conn.Open();
                    command.CommandTimeout = 0;
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        Constraint item = null;
                        while (reader.Read())
                        {
                            root.RaiseOnReadingOne(reader["Name"]);
                            if (parentId != (int)reader["parent_object_id"])
                            {
                                parentId = (int)reader["parent_object_id"];
                                if (reader["ObjectType"].ToString().Trim().Equals("U"))
                                    table = database.Tables.Find(parentId);
                                else
                                    table = database.TablesTypes.Find(parentId);
                            } 
                            item = new Constraint(table);
                            item.Id = (int)reader["id"];
                            item.Name = reader["Name"].ToString();
                            item.Type = Constraint.ConstraintType.Check;
                            item.Definition = reader["Definition"].ToString();
                            item.WithNoCheck = (bool)reader["WithCheck"];
                            item.IsDisabled = (bool)reader["is_disabled"];
                            item.Owner = reader["Owner"].ToString();
                            if (database.Options.Ignore.FilterNotForReplication)
                                item.NotForReplication = (bool)reader["is_not_for_replication"];
                            if (reader["ObjectType"].ToString().Trim().Equals("U"))
                                ((Table)table).Constraints.Add(item);
                            else
                                ((TableType)table).Constraints.Add(item);
                        }
                    }
                }
            }
        }
Example #17
0
 public void Fill(Database database, string connectioString)
 {
     string type;
     if ((database.Options.Ignore.FilterUsers) || (database.Options.Ignore.FilterRoles))
     {
         using (SqlConnection conn = new SqlConnection(connectioString))
         {
             using (SqlCommand command = new SqlCommand(UserSQLCommand.Get(database.Info.Version), conn))
             {
                 conn.Open();
                 command.CommandTimeout = 0;
                 using (SqlDataReader reader = command.ExecuteReader())
                 {
                     while (reader.Read())
                     {
                         type = reader["type"].ToString();
                         if (database.Options.Ignore.FilterUsers && (type.Equals("S") || type.Equals("U")))
                         {
                             User item = new User(database);
                             item.Id = (int)reader["principal_id"];
                             item.Name = reader["name"].ToString();
                             item.Login = reader["Login"].ToString();
                             item.Owner = reader["default_schema_name"].ToString();
                             database.Users.Add(item);
                         }
                         if (database.Options.Ignore.FilterRoles && (type.Equals("A") || type.Equals("R")))
                         {
                             Role item = new Role(database);
                             item.Id = (int)reader["principal_id"];
                             item.Name = reader["name"].ToString();
                             item.Owner = reader["default_schema_name"].ToString();
                             item.Password = "";
                             item.IsSystem = (Boolean)reader["is_fixed_role"];
                             if (type.Equals("A"))
                                 item.Type = Role.RoleTypeEnum.ApplicationRole;
                             else
                                 item.Type = Role.RoleTypeEnum.DatabaseRole;
                             database.Roles.Add(item);
                         }
                     }
                 }
             }
         }
     }
 }
 public void Fill(Database database, string connectionString)
 {
     int lastViewId = 0;
     if (database.Options.Ignore.FilterAssemblies)
     {
         using (SqlConnection conn = new SqlConnection(connectionString))
         {
             using (SqlCommand command = new SqlCommand(GetSQL(), conn))
             {
                 conn.Open();
                 command.CommandTimeout = 0;
                 using (SqlDataReader reader = command.ExecuteReader())
                 {
                     Assembly item = null;
                     while (reader.Read())
                     {                                
                         if (lastViewId != (int)reader["assembly_id"])
                         {
                             item = new Assembly(database)
                                        {
                                            Id = (int) reader["assembly_id"],
                                            Name = reader["Name"].ToString(),
                                            Owner = reader["Owner"].ToString(),
                                            CLRName = reader["clr_name"].ToString(),
                                            PermissionSet = reader["permission_set_desc"].ToString(),
                                            Text = ToHex((byte[]) reader["content"]),
                                            Visible = (bool) reader["is_visible"]
                                        };
                             lastViewId = item.Id;
                             database.Assemblies.Add(item);
                         }
                         if (!String.IsNullOrEmpty(reader["Dependency"].ToString()))
                             item.DependenciesOut.Add(reader["Dependency"].ToString());
                         if (!String.IsNullOrEmpty(reader["ObjectDependency"].ToString()))
                             item.DependenciesOut.Add(reader["ObjectDependency"].ToString());
                         if (!String.IsNullOrEmpty(reader["UDTName"].ToString()))
                             item.DependenciesOut.Add(reader["UDTName"].ToString());
                     }
                 }
             }
             FillFiles(database, connectionString);
         }
     }
 }
Example #19
0
 private void FillView(Database database, string connectionString)
 {
     int lastViewId = 0;
     using (var conn = new SqlConnection(connectionString))
     {
         using (var command = new SqlCommand(ViewSQLCommand.GetView(database.Info.Version), conn))
         {
             conn.Open();
             command.CommandTimeout = 0;
             using (SqlDataReader reader = command.ExecuteReader())
             {
                 View item = null;                        
                 while (reader.Read())
                 {
                     root.RaiseOnReadingOne(reader["name"]);
                     if (lastViewId != (int)reader["object_id"]) {
                         item = new View(database) {
                             Id = (int) reader["object_id"],
                             Name = reader["name"].ToString(),
                             Owner = reader["owner"].ToString(),
                             IsSchemaBinding = reader["IsSchemaBound"].ToString().Equals("1"),
                             CreateDate = (DateTime) reader["create_date"],
                             ModifyDate = (DateTime) reader["modify_date"]
                         };
                         database.Views.Add(item);
                         lastViewId = item.Id;
                     }
                     if (item.IsSchemaBinding)
                     {
                         if (!reader.IsDBNull(reader.GetOrdinal("referenced_major_id")))
                             database.Dependencies.Add(database,(int)reader["referenced_major_id"], item);
                         if (!String.IsNullOrEmpty(reader["TableName"].ToString()))
                             item.DependenciesIn.Add(reader["TableName"].ToString());
                         if (!String.IsNullOrEmpty(reader["DependOut"].ToString()))
                             item.DependenciesOut.Add(reader["DependOut"].ToString());
                     }                            
                 }
             }
         }                    
     }
 }
 public void Fill(Database database, string connectioString)
 {
     int lastObjectId = 0;
     PartitionFunction item = null;
     if (database.Options.Ignore.FilterPartitionFunction)
     {
         using (SqlConnection conn = new SqlConnection(connectioString))
         {
             using (SqlCommand command = new SqlCommand(GetSQL(), conn))
             {
                 conn.Open();
                 command.CommandTimeout = 0;
                 using (SqlDataReader reader = command.ExecuteReader())
                 {
                     while (reader.Read())
                     {
                         if (lastObjectId != (int)reader["function_id"])
                         {
                             lastObjectId = (int)reader["function_id"];
                             item = new PartitionFunction(database);
                             item.Id = (int)reader["function_id"];
                             item.Name = reader["name"].ToString();
                             item.IsBoundaryRight = (bool)reader["IsRight"];
                             item.Precision = (byte)reader["precision"];
                             item.Scale = (byte)reader["scale"];
                             item.Size = (short)reader["max_length"];
                             item.Type = reader["TypeName"].ToString();
                             database.PartitionFunctions.Add(item);
                         }
                         if (item.Type.Equals("binary") || item.Type.Equals("varbinary"))
                             item.Values.Add(ToHex((byte[])reader["value"]));
                         else
                             item.Values.Add(reader["value"].ToString());
                     }
                 }
             }
         }
     }
 }
Example #21
0
 public static Database GenerateDiferences(Database Origen, Database Destino)
 {
     try
     {
         Database data = Origen;
         (new CompareTables()).GenerateDiferences<Database>(Origen.Tables, Destino.Tables);
         (new CompareAssemblies()).GenerateDiferences<Database>(Origen.Assemblies, Destino.Assemblies);
         (new CompareUserDataTypes()).GenerateDiferences<Database>(Origen.UserTypes, Destino.UserTypes);
         (new CompareXMLSchemas()).GenerateDiferences<Database>(Origen.XmlSchemas, Destino.XmlSchemas);
         (new CompareSchemas()).GenerateDiferences<Database>(Origen.Schemas, Destino.Schemas);
         (new CompareFileGroups()).GenerateDiferences<Database>(Origen.FileGroups, Destino.FileGroups);
         (new CompareRules()).GenerateDiferences<Database>(Origen.Rules, Destino.Rules);
         (new CompareDDLTriggers()).GenerateDiferences<Database>(Origen.DDLTriggers, Destino.DDLTriggers);
         (new CompareSynonyms()).GenerateDiferences<Database>(Origen.Synonyms, Destino.Synonyms);
         (new CompareUsers()).GenerateDiferences<Database>(Origen.Users, Destino.Users);
         (new CompareStoreProcedures()).GenerateDiferences<Database>(Origen.Procedures, Destino.Procedures);
         (new CompareCLRStoreProcedure()).GenerateDiferences<Database>(Origen.CLRProcedures, Destino.CLRProcedures);
         (new CompareCLRFunction()).GenerateDiferences<Database>(Origen.CLRFunctions, Destino.CLRFunctions);
         (new CompareViews()).GenerateDiferences<Database>(Origen.Views, Destino.Views);
         (new CompareFunctions()).GenerateDiferences<Database>(Origen.Functions, Destino.Functions);
         (new CompareRoles()).GenerateDiferences<Database>(Origen.Roles, Destino.Roles);
         (new ComparePartitionFunction()).GenerateDiferences<Database>(Origen.PartitionFunctions, Destino.PartitionFunctions);
         (new ComparePartitionSchemes()).GenerateDiferences<Database>(Origen.PartitionSchemes, Destino.PartitionSchemes);
         (new CompareTableType()).GenerateDiferences<Database>(Origen.TablesTypes, Destino.TablesTypes);
         (new CompareFullText()).GenerateDiferences<Database>(Origen.FullText, Destino.FullText);
         data.SourceInfo = Destino.Info;
         return data;
     }
     catch (SchemaException)
     {
         throw;
     }
     catch (Exception ex)
     {
         throw new SchemaException(ex.Message,ex);
     }
 }
        public void Fill(Database database, string connectionString)
        {
            //TODO XML_SCHEMA_NAMESPACE function not supported in Azure, is there a workaround?
            //not supported in azure yet
            if (database.Info.Version == DatabaseInfo.VersionTypeEnum.SQLServerAzure10) return;
            

            if (database.Options.Ignore.FilterXMLSchema)
            {
                root.RaiseOnReading(new ProgressEventArgs("Reading XML Schema...", Constants.READING_XMLSCHEMAS));
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    using (SqlCommand command = new SqlCommand(GetSQLXMLSchema(), conn))
                    {
                        conn.Open();
                        command.CommandTimeout = 0;
                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                root.RaiseOnReadingOne(reader["name"]);
                                XMLSchema item = new XMLSchema(database);
                                item.Id = (int)reader["ID"];
                                item.Name = reader["name"].ToString();
                                item.Owner = reader["owner"].ToString();
                                item.Text = reader["Text"].ToString();
                                database.XmlSchemas.Add(item);

                            }
                        }
                    }
                }
                if (database.Options.Ignore.FilterTable)
                    FillColumnsDependencies(database.XmlSchemas, connectionString);
            }
        }
Example #23
0
        public override ISchemaBase Clone(ISchemaBase parent)
        {
            //Get a list of all of the objects that are SchemaLists, so that we can clone them all.
            var item = new Database() { AllObjects = this.AllObjects };

            var explicitProperties = (from properties in this.GetType().GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public)
                                      where properties.PropertyType.GetInterface(typeof(DBDiff.Schema.Model.ISchemaList<Code, Database>).Name) != null
                                      select properties).ToList();

            foreach (var property in explicitProperties)
            {
                object value = property.GetValue(this, null);

                //Clone the value
                value = value.GetType().GetMethod("Clone").Invoke(value, new object[] { this });

                //Set the value to the cloned object
                property.SetValue(item, value, null);
            }

            return item;
        }
Example #24
0
 public Schema(Database parent)
     : base(parent, Enums.ObjectType.Schema)
 {                        
 }
Example #25
0
 public static Database Compare(Database databaseOriginalSchema, Database databaseCompareSchema)
 {
     Database merge = CompareDatabase.GenerateDiferences(databaseOriginalSchema, databaseCompareSchema);
     return merge;
 }
Example #26
0
        /// <summary>
        /// Genera el schema de la base de datos seleccionada y devuelve un objeto Database.
        /// </summary>
        public Database Process()
        {
            var error = string.Empty;
            var databaseSchema = new Database {Options = Options, Name = Name};

            databaseSchema.Info = (new GenerateDatabase(connectionString, Options)).Get(databaseSchema);
            (new GenerateRules(this)).Fill(databaseSchema, connectionString);
            (new GenerateTables(this)).Fill(databaseSchema, connectionString, messages);
            (new GenerateViews(this)).Fill(databaseSchema, connectionString, messages);
            (new GenerateIndex(this)).Fill(databaseSchema, connectionString);
            (new GenerateFullTextIndex(this)).Fill(databaseSchema, connectionString);
            (new GenerateUserDataTypes(this)).Fill(databaseSchema, connectionString, messages);
            (new GenerateXMLSchemas(this)).Fill(databaseSchema, connectionString);
            (new GenerateSchemas(this)).Fill(databaseSchema, connectionString);

            //not supported in azure yet
            if (databaseSchema.Info.Version != DatabaseInfo.VersionTypeEnum.SQLServerAzure10) {
                (new GeneratePartitionFunctions(this)).Fill(databaseSchema, connectionString);
                (new GeneratePartitionScheme(this)).Fill(databaseSchema, connectionString);
                (new GenerateFileGroups(this)).Fill(databaseSchema, connectionString);
            }
            
            (new GenerateDDLTriggers(this)).Fill(databaseSchema, connectionString);
            (new GenerateSynonyms(this)).Fill(databaseSchema, connectionString);
            
            //not supported in azure yet
            if (databaseSchema.Info.Version != DatabaseInfo.VersionTypeEnum.SQLServerAzure10)
            {
                (new GenerateAssemblies(this)).Fill(databaseSchema, connectionString);
                (new GenerateFullText(this)).Fill(databaseSchema, connectionString);
            }

            (new GenerateStoreProcedures(this)).Fill(databaseSchema, connectionString);
            (new GenerateFunctions(this)).Fill(databaseSchema, connectionString);
            (new GenerateTriggers(this)).Fill(databaseSchema, connectionString, messages);
            (new GenerateTextObjects(this)).Fill(databaseSchema, connectionString);
            (new GenerateUsers(this)).Fill(databaseSchema, connectionString);

            if (String.IsNullOrEmpty(error))
            {
                /*Las propiedades extendidas deben ir despues de haber capturado el resto de los objetos de la base*/
                (new GenerateExtendedProperties(this)).Fill(databaseSchema, connectionString, messages);
                databaseSchema.BuildDependency();
                return databaseSchema;
            }
            else
                throw new SchemaException(error);
        }
Example #27
0
 public void Fill(Database database, string connectionString, List<MessageLog> messages)
 {
     int parentId = 0;
     ISchemaBase parent = null;
     string type;
     try
     {
         if (database.Options.Ignore.FilterTrigger)
         {
             root.RaiseOnReading(new ProgressEventArgs("Reading Triggers...", Constants.READING_TRIGGERS));
             using (SqlConnection conn = new SqlConnection(connectionString))
             {
                 using (SqlCommand command = new SqlCommand(GetSQL(database.Info.Version, database.Options), conn))
                 {
                     conn.Open();
                     command.CommandTimeout = 0;
                     using (SqlDataReader reader = command.ExecuteReader())
                     {
                         while (reader.Read())
                         {
                             root.RaiseOnReadingOne(reader["Name"]);
                             type = reader["ObjectType"].ToString().Trim();
                             if (parentId != (int)reader["parent_id"])
                             {
                                 parentId = (int)reader["parent_id"];
                                 if (type.Equals("V"))
                                     parent = database.Views.Find(parentId);
                                 else
                                     parent = database.Tables.Find(parentId);
                             }
                             if (reader["type"].Equals("TR"))
                             {
                                 Trigger item = new Trigger(parent);
                                 item.Id = (int)reader["object_id"];
                                 item.Name = reader["Name"].ToString();
                                 item.InsteadOf = (bool)reader["is_instead_of_trigger"];
                                 item.IsDisabled = (bool)reader["is_disabled"];
                                 item.IsDDLTrigger = false;
                                 item.Owner = reader["Owner"].ToString();
                                 if (database.Options.Ignore.FilterNotForReplication)
                                     item.NotForReplication = (bool)reader["is_not_for_replication"];
                                 if (type.Equals("V"))
                                     ((View)parent).Triggers.Add(item);
                                 else
                                     ((Table)parent).Triggers.Add(item);
                             }
                             else
                             {
                                 CLRTrigger item = new CLRTrigger(parent);
                                 item.Id = (int)reader["object_id"];
                                 item.Name = reader["Name"].ToString();
                                 item.IsDelete = (bool)reader["IsDelete"];
                                 item.IsUpdate = (bool)reader["IsUpdate"];
                                 item.IsInsert = (bool)reader["IsInsert"];
                                 item.Owner = reader["Owner"].ToString();
                                 item.IsAssembly = true;
                                 item.AssemblyId = (int)reader["assembly_id"];
                                 item.AssemblyName = reader["assembly_name"].ToString();
                                 item.AssemblyClass = reader["assembly_class"].ToString();
                                 item.AssemblyExecuteAs = reader["ExecuteAs"].ToString();
                                 item.AssemblyMethod = reader["assembly_method"].ToString();
                                 if (type.Equals("V"))
                                     ((View)parent).CLRTriggers.Add(item);
                                 else
                                     ((Table)parent).CLRTriggers.Add(item);
                                 /*if (!database.Options.Ignore.FilterIgnoreNotForReplication)
                                     trigger.NotForReplication = (bool)reader["is_not_for_replication"];*/
                             }
                         }
                     }
                 }
             }
         }
     }
     catch (Exception ex)
     {
         messages.Add(new MessageLog(ex.Message, ex.StackTrace, MessageLog.LogType.Error));
     }
 }
Example #28
0
        public DatabaseInfo Get(Database database)
        {
            DatabaseInfo item = new DatabaseInfo();
            using (SqlConnection conn = new SqlConnection(connectioString))
            {
                using (SqlCommand command = new SqlCommand(DatabaseSQLCommand.GetVersion(database), conn))
                {
                    conn.Open();

                    item.Server = conn.DataSource;
                    item.Database = conn.Database;

                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            string versionValue = reader["Version"] as string;
                            try
                            {
                                // used to use the decimal as well when Azure was 10.25
                                var version = new Version(versionValue);
                                item.VersionNumber = float.Parse(String.Format("{0}.{1}", version.Major, version.Minor), System.Globalization.CultureInfo.InvariantCulture);

                                int? edition = null;
                                if (reader.FieldCount > 1 && !reader.IsDBNull(1))
                                {
                                    int validEdition;
                                    string editionValue = reader[1].ToString();
                                    if (!String.IsNullOrEmpty(editionValue) && int.TryParse(editionValue, out validEdition))
                                    {
                                        edition = validEdition;
                                    }
                                }

                                item.SetEdition(edition);
                            }
                            catch (Exception notAGoodIdeaToCatchAllErrors)
                            {
                                bool useDefaultVersion = false;
//#if DEBUG
//                                useDefaultVersion = IsKeyPushedDown(System.Windows.Forms.Keys.LShiftKey)
//                                    && IsKeyPushedDown(System.Windows.Forms.Keys.RShiftKey);
//#endif

                                var exception = new DBDiff.Schema.Misc.SchemaException(
                                    String.Format("Error parsing ProductVersion. ({0})", versionValue ?? "[null]")
                                    , notAGoodIdeaToCatchAllErrors);
                                
                                if (!useDefaultVersion)
                                {
                                    throw exception;
                                }
                            }
                        }
                    }
                }

                using (SqlCommand command = new SqlCommand(DatabaseSQLCommand.Get(item.Version, database), conn))
                {
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            item.Collation = reader["Collation"].ToString();
                            item.HasFullTextEnabled = ((int)reader["IsFulltextEnabled"]) == 1;
                        }
                    }
                }

            }

            return item;
        }
Example #29
0
        public override IEnumerable<Row> Execute(IEnumerable<Row> rows)
        {
            var counter = 0;
            foreach (var row in rows) {
                counter++;
                if (counter == 1) {
                    Guard.Against(!row.Contains(CONNECTION_STRING_KEY), "Row must contain connectionstring key.");
                }

                _connectionStringBuilder = new SqlConnectionStringBuilder(row[CONNECTION_STRING_KEY].ToString());
                var sqlConnectionChecker = new SqlConnectionChecker(new[] { _connectionStringBuilder.ConnectionString });

                if (!sqlConnectionChecker.AllGood())
                    continue;

                var results = new Database();
                var subRows = new List<Row>();
                var generator = new Generate() { ConnectionString = _connectionStringBuilder.ConnectionString };

                Debug("Started generating definitions on {0} for {1}", _connectionStringBuilder.DataSource, _connectionStringBuilder.InitialCatalog);

                try {
                    results = generator.Process();
                }
                catch (Exception e) {
                    Warn("Trouble processing objects from {0}.{1}.\nError Message: {2}.", _connectionStringBuilder.DataSource, _connectionStringBuilder.InitialCatalog, e.Message);
                }

                Debug("Finished generating defs on {0} for {1}", _connectionStringBuilder.DataSource, _connectionStringBuilder.InitialCatalog);

                subRows.AddRange(ToRows(results.Procedures, "StoredProcedures", "Stored Procedure"));
                subRows.AddRange(ToRows(results.Functions, "Functions", "Function"));
                subRows.AddRange(ToRows(results.Tables, "Tables", "Table"));
                subRows.AddRange(ToRows(results.Views, "Views", "View"));
                subRows.AddRange(ToRows(results.Schemas, "Schemas", "Schema"));
                subRows.AddRange(ToRows(results.Synonyms, "Synonyms", "Synonym"));
                subRows.AddRange(ToRows(results.FullText, "FullTextCatalogs", "Full Text Catalog"));

                foreach (var table in results.Tables) {
                    subRows.AddRange(ToRows(table.Indexes, "Indexes", "Index", true));
                    subRows.AddRange(ToRows(table.Triggers, "Triggers", "Trigger", true));
                    foreach (var constraint in table.Constraints) {
                        switch (constraint.Type) {
                            case Constraint.ConstraintType.Check:
                                subRows.AddRange(ToRows(Enumerable.Repeat(constraint, 1), "CheckConstraints", "Check Constraint", true, true));
                                break;
                            case Constraint.ConstraintType.Default:
                                subRows.AddRange(ToRows(Enumerable.Repeat(constraint, 1), "DefaultConstraints", "Default Constraint", true, true));
                                break;
                            case Constraint.ConstraintType.ForeignKey:
                                subRows.AddRange(ToRows(Enumerable.Repeat(constraint, 1), "ForeignKeys", "Foreign Key", true, true));
                                break;
                            case Constraint.ConstraintType.PrimaryKey:
                                subRows.AddRange(ToRows(Enumerable.Repeat(constraint, 1), "PrimaryKeys", "Primary Key", true, true));
                                break;
                            case Constraint.ConstraintType.Unique:
                                subRows.AddRange(ToRows(Enumerable.Repeat(constraint, 1), "UniqueConstraints", "Unique Constraint", true, true));
                                break;
                        }
                    }

                    foreach (var index in table.FullTextIndex)
                        subRows.AddRange(ToRows(Enumerable.Repeat(index, 1), "FullTextIndexes", "Full Text Index", true));
                }

                Info("Found {0} in {1}.", subRows.Count, _connectionStringBuilder.InitialCatalog);

                foreach (var subRow in subRows) {
                    yield return subRow;
                }

            }
        }
Example #30
0
 public void Fill(Database database, string connectionString)
 {
     int lastViewId = 0;
     if ((database.Options.Ignore.FilterFunction) || (database.Options.Ignore.FilterCLRFunction))
     {
         root.RaiseOnReading(new ProgressEventArgs("Reading functions...", Constants.READING_FUNCTIONS));
         using (SqlConnection conn = new SqlConnection(connectionString))
         {
             using (SqlCommand command = new SqlCommand(FunctionSQLCommand.Get(database.Info.Version), conn))
             {
                 conn.Open();
                 command.CommandTimeout = 0;
                 using (SqlDataReader reader = command.ExecuteReader())
                 {
                     Function itemF = null;
                     CLRFunction itemC = null;
                     while (reader.Read())
                     {
                         root.RaiseOnReadingOne(reader["name"]);
                         if ((!reader["type"].ToString().Trim().Equals("FS")) && (database.Options.Ignore.FilterFunction))
                         {
                             if (lastViewId != (int)reader["object_id"])
                             {
                                 itemF = new Function(database);
                                 itemF.Id = (int)reader["object_id"];
                                 itemF.Name = reader["name"].ToString();
                                 itemF.Owner = reader["owner"].ToString();
                                 itemF.IsSchemaBinding = reader["IsSchemaBound"].ToString().Equals("1");
                                 itemF.CreateDate = (DateTime)reader["create_date"];
                                 itemF.ModifyDate = (DateTime)reader["modify_date"];
                                 database.Functions.Add(itemF);
                                 lastViewId = itemF.Id;
                             }
                             if (itemF.IsSchemaBinding)
                             {
                                 if (!reader.IsDBNull(reader.GetOrdinal("referenced_major_id")))
                                     database.Dependencies.Add(database, (int)reader["referenced_major_id"], itemF);
                                 if (!String.IsNullOrEmpty(reader["TableName"].ToString()))
                                     itemF.DependenciesIn.Add(reader["TableName"].ToString());
                                 if (!String.IsNullOrEmpty(reader["DependOut"].ToString()))
                                     itemF.DependenciesOut.Add(reader["DependOut"].ToString());
                             }
                         }
                         if ((reader["type"].ToString().Trim().Equals("FS")) && (database.Options.Ignore.FilterCLRFunction))
                         {
                             itemC = new CLRFunction(database);
                             if (lastViewId != (int)reader["object_id"])
                             {
                                 itemC.Id = (int)reader["object_id"];
                                 itemC.Name = reader["name"].ToString();
                                 itemC.Owner = reader["owner"].ToString();
                                 itemC.IsAssembly = true;
                                 itemC.AssemblyId = (int)reader["assembly_id"];
                                 itemC.AssemblyName = reader["assembly_name"].ToString();
                                 itemC.AssemblyClass = reader["assembly_class"].ToString();
                                 itemC.AssemblyExecuteAs = reader["ExecuteAs"].ToString();
                                 itemC.AssemblyMethod = reader["assembly_method"].ToString();
                                 itemC.ReturnType.Type = reader["ReturnType"].ToString();
                                 itemC.ReturnType.Size = (short)reader["max_length"];
                                 itemC.ReturnType.Scale = (byte)reader["Scale"];
                                 itemC.ReturnType.Precision = (byte)reader["precision"];
                                 if (itemC.ReturnType.Type.Equals("nchar") || itemC.ReturnType.Type.Equals("nvarchar"))
                                 {
                                     if (itemC.ReturnType.Size != -1)
                                         itemC.ReturnType.Size = itemC.ReturnType.Size / 2;
                                 }
                                 database.CLRFunctions.Add(itemC);
                                 lastViewId = itemC.Id;
                             }
                         }
                     }
                 }
             }
         }
     }
     if (database.CLRFunctions.Count > 0)
         FillParameters(database, connectionString);
 }