예제 #1
0
파일: Database.cs 프로젝트: psulek/doemd
        private TResult GetTableOrView <TResult>(DbItemType itemType, string schemaName, string objName) where TResult : TableBase
        {
            Schema schema = this.Schemas[schemaName];

            if (schema != null)
            {
                TableBase result = itemType == DbItemType.Table
                                       ? (TableBase)schema.Tables[objName]
                                       : schema.Views[objName];

                return((TResult)(result));
            }

            return(null);
        }
예제 #2
0
        public static DBObjectUrn Parse(string urn)
        {
            string[]    items  = urn.Split('/');
            DBObjectUrn result = new DBObjectUrn();

            foreach (string item in items)
            {
                if (string.IsNullOrEmpty(item))
                {
                    continue;
                }
                string[]   subitems1 = item.Split('[');
                DbItemType itemType  = (DbItemType)Enum.Parse(enumType, subitems1[0], true);

                string namePart = subitems1[1];
                int    startIdx = namePart.IndexOf("'");
                int    endIdx   = namePart.IndexOf("'", startIdx + 1);

                string itemName = namePart.Substring(startIdx + 1, endIdx - startIdx - 1);

                if (itemType == DbItemType.Table /*|| itemType == View*/)
                {
                    if (namePart.ToLower().Contains("@schema"))
                    {
                        ;
                    }
                    {
                        startIdx = namePart.IndexOf("'", endIdx + 1);
                        if (startIdx > -1)
                        {
                            endIdx = namePart.IndexOf("'", startIdx + 1);

                            if (endIdx > -1)
                            {
                                result.TableSchema = namePart.Substring(startIdx + 1, endIdx - startIdx - 1);
                            }
                        }
                    }
                }

                result.parts[itemType] = itemName;
            }

            return(result);
        }
예제 #3
0
        private void TableNodeChecked(TreeNode checkedNode)
        {
            if (nodeCheckedChangeDisabled)
            {
                return;
            }

            bool       isChecked           = checkedNode.Checked;
            DBObject   checkedDbObject     = (DBObject)checkedNode.Tag;
            DbItemType checkedNodeItemType = checkedDbObject.ItemType;

            nodeCheckedChangeDisabled = true;

            try
            {
                RecursiveCheckNodes(checkedNode.Nodes, isChecked);

                if (checkedNode.Parent != null)
                {
                    if (isChecked)
                    {
                        checkedNode.Parent.Checked = true;
                    }
                    else
                    {
                        int childNodesChecked = 0;
                        IterateTreeNodes(checkedNode.Parent.Nodes, (o, node) =>
                        {
                            if (node.Checked)
                            {
                                childNodesChecked++;
                            }
                        });

                        if (childNodesChecked == 0)
                        {
                            checkedNode.Parent.Checked = false;
                        }
                    }
                }

                if (isChecked)
                {
                    List <TreeNode> nodesToAutoCheck = new List <TreeNode>();
                    switch (checkedNodeItemType)
                    {
                    case DbItemType.Database:
                    {
                        selectedTableColumns.Clear();
                        Database checkedDB          = (Database)checkedDbObject;
                        var      allDatabaseColumns = checkedDB.Schemas.Select(schema => schema.Tables).SelectMany(list => list).Select(
                            table => table.Columns).SelectMany(list => list);
                        selectedTableColumns.AddRange(allDatabaseColumns);

                        break;
                    }

                    case DbItemType.Table:
                    {
                        nodesToAutoCheck.Add(checkedNode);

                        Table checkedTable = (Table)checkedDbObject;
                        foreach (var column in checkedTable.Columns)
                        {
                            AddOrRemoveSelectedTableColumn(column, true);
                        }

                        break;
                    }

                    case DbItemType.Schema:
                    {
                        nodesToAutoCheck.AddRange(checkedNode.Nodes.OfType <TreeNode>().ToArray());

                        Schema chckedSchema        = (Schema)checkedDbObject;
                        var    schemaTablesColumns = chckedSchema.Tables.Select(table => table.Columns).SelectMany(list => list);
                        foreach (var column in schemaTablesColumns)
                        {
                            AddOrRemoveSelectedTableColumn(column, true);
                        }

                        break;
                    }
                    }

                    if (nodesToAutoCheck.Count > 0)
                    {
                        AutoCheckDependencyTables(nodesToAutoCheck.ToArray());
                    }
                }
                else
                {
                    switch (checkedNodeItemType)
                    {
                    case DbItemType.Database:
                    {
                        selectedTableColumns.Clear();
                        break;
                    }

                    case DbItemType.Table:
                    {
                        Table checkedTable = (Table)checkedDbObject;
                        selectedTableColumns.RemoveAll(column => checkedTable.Columns.Contains(column));
                        break;
                    }

                    case DbItemType.Schema:
                    {
                        Schema chckedSchema        = (Schema)checkedDbObject;
                        var    schemaTablesColumns = chckedSchema.Tables.Select(table => table.Columns).SelectMany(list => list);
                        selectedTableColumns.RemoveAll(column => schemaTablesColumns.Contains(column));
                        break;
                    }
                    }
                }

                ReflectColumnsCheckedState();
            }
            finally
            {
                nodeCheckedChangeDisabled = false;
            }

            CheckNextButton();
        }
예제 #4
0
 public string this[DbItemType itemType]
 {
     get { return(parts[itemType]); }
 }