Beispiel #1
0
        private void SetChildrens(DbObject target, DbEntityEnum childrenType)
        {
            if (!(Connection.GetConnection() is SqlConnection))
            {
                throw new InvalidCastException();
            }


            using (SqlConnection connection = (SqlConnection)Connection.GetConnection())
            {
                connection.Open();

                List <DbObject> childs = new List <DbObject>();

                string query = _provider.GetLoadNameScript(target.Type, childrenType);

                SqlCommand command = new SqlCommand(query, connection);

                foreach (var param in _provider.GetChildrenLoadParameters(target, childrenType))
                {
                    command.Parameters.Add(param);
                }

                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        DbObject child = (DbEntityFactory.ObjectCreator.Create(reader, childrenType));
                        if (!target.AddChild(child))
                        {
                            throw new ArgumentException();
                        }
                        childs.Add(child);
                    }
                }

                foreach (var child in childs)
                {
                    if (child.CanHaveDefinition)
                    {
                        query = _provider.GetDefinitionScript();
                        SqlCommand descCommand = new SqlCommand(query, connection);
                        foreach (var param in _provider.GetDefinitionParamteters(child))
                        {
                            descCommand.Parameters.Add(param);
                        }
                        using (SqlDataReader descReader = descCommand.ExecuteReader())
                        {
                            StringBuilder defText = new StringBuilder();
                            while (descReader.Read())
                            {
                                defText.Append(descReader.GetString(0));
                            }

                            child.Definition = defText.ToString();
                        }
                    }
                }
            }
        }
 public async Task LoadModel(MetadataViewModelBase obj, DbEntityEnum type)
 {
     Root.DbLoader.Connection.InitialCatalog = obj.Model.DataBaseName;
     try
     {
         if (Root.IsConnected)
         {
             if (type == DbEntityEnum.All)
             {
                 await DbLoader.LoadChildren(obj.Model);
             }
             else
             {
                 await DbLoader.LoadChildren(obj.Model, type);
             }
         }
     }
     catch (DbException d)
     {
         MessageBox.Show(d.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
     }
     catch (Exception e)
     {
         MessageBox.Show(e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
     }
     finally
     {
         if (Root.IsDefaultDatabase)
         {
             Root.DbLoader.Connection.InitialCatalog = string.Empty;
         }
     }
 }
Beispiel #3
0
 public void DeleteChildrens(DbEntityEnum type)
 {
     if (_childrenMap.ContainsKey(type))
     {
         _childrenMap.Remove(type);
     }
 }
Beispiel #4
0
        public override Task LoadChildren(DbObject obj, DbEntityEnum childType)
        {
            if (!Hierarchy.HierarchyObject.GetChildTypes(obj.Type).Contains(childType))
            {
                throw new ArgumentException();
            }

            return(Task.Run(() => SetChildrens(obj, childType)));
        }
Beispiel #5
0
        private string GetBaseName(DbEntityEnum type)
        {
            if (Type == type)
            {
                return(this.Name);
            }

            foreach (var chunc in FullName)
            {
                if (chunc.Type == type)
                {
                    return(chunc.Name);
                }
            }
            return(null);
        }
 public CategoryViewModel(MetadataViewModelBase parent, DbEntityEnum type) : base(parent, true)
 {
     Type  = type;
     Model = parent.Model;
 }
Beispiel #7
0
 public abstract string GetLoadNameScript(DbEntityEnum parentType, DbEntityEnum childType);
Beispiel #8
0
 public bool IsPossibleChilds(DbEntityEnum type)
 {
     return(GetChildTypes(type).Count() != 0);
 }
Beispiel #9
0
 public DbObject Create(DbDataReader reader, DbEntityEnum type)
 {
     return(_objectCreator[type](reader));
 }
Beispiel #10
0
 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
 {
     targetValue = (DbEntityEnum)value;
     return(targetValue.HasFlag((DbEntityEnum)parameter));
 }
Beispiel #11
0
 public Chunk(string name, DbEntityEnum type)
 {
     Name = name;
     Type = type;
 }
Beispiel #12
0
 public abstract Task LoadChildren(DbObject obj, DbEntityEnum childType);
        private IEnumerable <MetadataViewModelBase> FindMatchesNode(MetadataViewModelBase node, string text, DbEntityEnum mask)
        {
            if (node.Name.Contains(text) && !(node is CategoryViewModel) && mask.HasFlag(node.Type))
            {
                yield return(node);
            }

            if (node.Children.Count != 0 && !node.HasFakeChild)
            {
                foreach (var treeViewItemViewModelBase in node.Children)
                {
                    var treeViewItem = (MetadataViewModelBase)treeViewItemViewModelBase;

                    foreach (MetadataViewModelBase res in FindMatchesNode(treeViewItem, text, mask))
                    {
                        yield return(res);
                    }
                }
            }
        }
 public TreeWindowViewModel()
 {
     ItemProperties = new ObservableCollection <KeyValuePair <string, object> >();
     _searchMask    = DbEntityEnum.All;
 }
Beispiel #15
0
        public override IEnumerable <IDbDataParameter> GetChildrenLoadParameters(DbObject obj, DbEntityEnum childType)
        {
            List <IDbDataParameter> parameters = new List <IDbDataParameter>();

            switch (childType)
            {
            case DbEntityEnum.Table:
                parameters.Add(new SqlParameter(Constants.TypeParameter, "BASE TABLE"));
                parameters.Add(new SqlParameter(Constants.SchemaNameParameter, obj.SchemaName));
                break;

            case DbEntityEnum.View:
            case DbEntityEnum.Function:
            case DbEntityEnum.Procedure:
                parameters.Add(new SqlParameter(Constants.TypeParameter, childType.ToString().ToUpper()));
                parameters.Add(new SqlParameter(Constants.SchemaNameParameter, obj.SchemaName));
                break;

            case DbEntityEnum.Column:
            case DbEntityEnum.Constraint:
            case DbEntityEnum.Key:
                parameters.Add(new SqlParameter(Constants.SchemaNameParameter, obj.SchemaName));
                parameters.Add(new SqlParameter(Constants.NameParameter, obj.Name));
                break;

            case DbEntityEnum.Trigger:
            case DbEntityEnum.Parameter:
            case DbEntityEnum.Index:
                parameters.Add(new SqlParameter(Constants.FullParentNameParameter, obj.FullName.ToString()));
                break;
            }

            return(parameters);
        }
Beispiel #16
0
        public override string GetLoadNameScript(DbEntityEnum parentType, DbEntityEnum childType)
        {
            switch (childType)
            {
            case DbEntityEnum.Schema:
                return($"SELECT SCHEMA_NAME AS '{Constants.NameProperty}' FROM INFORMATION_SCHEMA.SCHEMATA");

            case DbEntityEnum.Table:
            case DbEntityEnum.View:
                return($"SELECT TABLE_NAME AS '{Constants.NameProperty}' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = {Constants.TypeParameter} AND TABLE_SCHEMA = {Constants.SchemaNameParameter}");

            case DbEntityEnum.Function:
            case DbEntityEnum.Procedure:
                return($"SELECT ROUTINE_NAME AS '{Constants.NameProperty}' FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = {Constants.TypeParameter} AND ROUTINE_SCHEMA = {Constants.SchemaNameParameter}");

            case DbEntityEnum.Constraint:
                return
                    ($"SELECT CONSTRAINT_NAME AS {Constants.NameProperty} FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE ='CHECK' " +
                     $"AND TABLE_SCHEMA = {Constants.SchemaNameParameter} AND TABLE_NAME = {Constants.NameParameter}");

            case DbEntityEnum.Column:
                switch (parentType)
                {
                case DbEntityEnum.Table:
                    return($"SELECT col.name AS'{Constants.NameProperty}', " +
                           $"TYPE_NAME(col.system_type_id) AS '{Constants.TypeNameProperty}', " +
                           $"col.max_length AS '{Constants.MaxLengthProperty}', " +
                           $"col.precision AS '{Constants.PrecisionProperty}', " +
                           $"col.scale AS '{Constants.ScaleProperty}'  " +
                           $"FROM sys.columns AS col " +
                           $"JOIN INFORMATION_SCHEMA.COLUMNS AS inf ON col.name=inf.COLUMN_NAME AND col.object_id=OBJECT_ID(inf.TABLE_CATALOG+'.'+inf.TABLE_SCHEMA+'.'+inf.TABLE_NAME) where inf.TABLE_NAME={Constants.NameParameter} AND inf.TABLE_SCHEMA={Constants.SchemaNameParameter}");

                case DbEntityEnum.View:
                    return($"SELECT col.name AS'{Constants.NameProperty}', " +
                           $"TYPE_NAME(col.system_type_id) AS  '{Constants.TypeNameProperty}', " +
                           $"col.max_length AS '{Constants.MaxLengthProperty}', " +
                           $"col.precision AS '{Constants.PrecisionProperty}', " +
                           $"col.scale AS '{Constants.ScaleProperty}'  " +
                           $"FROM sys.columns AS col " +
                           $"JOIN INFORMATION_SCHEMA.VIEW_COLUMN_USAGE AS inf ON col.name=inf.COLUMN_NAME AND col.object_id=OBJECT_ID(inf.TABLE_CATALOG+'.'+inf.TABLE_SCHEMA+'.'+inf.TABLE_NAME) WHERE inf.VIEW_NAME = {Constants.NameParameter} AND inf.VIEW_SCHEMA={Constants.SchemaNameParameter}");

                default:
                    throw new ArgumentException();
                }


            case DbEntityEnum.Trigger:
                return($"SELECT name AS '{Constants.NameProperty}' FROM sys.triggers WHERE parent_id = COALESCE (OBJECT_ID({Constants.FullParentNameParameter}),0)");

            case DbEntityEnum.Parameter:
                return($"SELECT  name AS'{Constants.NameProperty}', " +
                       $"TYPE_NAME(system_type_id) AS '{Constants.TypeNameProperty}', " +
                       $"max_length AS '{Constants.MaxLengthProperty}', " +
                       $"precision AS '{Constants.PrecisionProperty}', " +
                       $"scale AS '{Constants.ScaleProperty}' " +
                       $"FROM sys.parameters WHERE object_id = OBJECT_ID({Constants.FullParentNameParameter}) AND parameter_id != 0");

            case DbEntityEnum.Key:
                return($"SELECT DISTINCT CONSTRAINT_NAME AS '{Constants.NameProperty}' FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = {Constants.SchemaNameParameter} AND TABLE_NAME = {Constants.NameParameter}");

            case DbEntityEnum.Index:
                return
                    ($"SELECT name AS '{Constants.NameProperty}' FROM sys.indexes WHERE is_hypothetical = 0 AND index_id != 0 AND object_id = OBJECT_ID({Constants.FullParentNameParameter})");

            case DbEntityEnum.Database:
                return($"SELECT name  AS '{Constants.NameProperty}' FROM sys.databases");

            default:
                throw new ArgumentException();
            }
        }
Beispiel #17
0
 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
 {
     return(targetValue ^= (DbEntityEnum)parameter);
 }
Beispiel #18
0
 public abstract IEnumerable <IDbDataParameter> GetChildrenLoadParameters(DbObject obj, DbEntityEnum childType);
Beispiel #19
0
        protected override bool CanBeChild(DbObject obj)
        {
            DbEntityEnum type = obj.Type;

            return(type == DbEntityEnum.Column || type == DbEntityEnum.Trigger || type == DbEntityEnum.Index);
        }
Beispiel #20
0
 public IEnumerable <DbEntityEnum> GetChildTypes(DbEntityEnum type)
 {
     return(ChildresTypes.ContainsKey(type) ? ChildresTypes[type] : Empty);
 }