Пример #1
0
        protected virtual ISchemaGraphBuilder OnAdd(IEnumerable <ITableConfig> tables, IEnumerable <IIndexConfig> indexes, IEnumerable <IRelationConfig> relations, SchemaFlags flags)
        {
            var queries = new List <ISchemaGraphBuilder>();

            if (flags.HasFlag(SchemaFlags.Table))
            {
                queries.Add(this.OnAddTables(tables));
            }
            if (flags.HasFlag(SchemaFlags.Index))
            {
                queries.Add(this.OnAddIndexes(indexes));
            }
            if (flags.HasFlag(SchemaFlags.Relation))
            {
                queries.Add(this.OnAddRelations(relations));
            }
            return(new AggregateSchemaGraphBuilder(
                       this.Database,
                       queries
                       ));
        }
Пример #2
0
 protected virtual void GetSchema(ITableConfig table, out HashSet <ITableConfig> tables, out HashSet <IIndexConfig> indexes, out HashSet <IRelationConfig> relations, SchemaFlags flags)
 {
     tables    = new HashSet <ITableConfig>();
     indexes   = new HashSet <IIndexConfig>();
     relations = new HashSet <IRelationConfig>();
     if (flags.HasFlag(SchemaFlags.Recursive))
     {
         var queue = new Queue <ITableConfig>();
         queue.Enqueue(table);
         while (queue.Count > 0)
         {
             table = queue.Dequeue();
             if (!tables.Add(table))
             {
                 continue;
             }
             foreach (var index in table.Indexes)
             {
                 indexes.Add(index);
             }
             foreach (var relation in table.Relations)
             {
                 relations.Add(relation);
                 if (relation.MappingTable != null && !relation.MappingTable.Flags.HasFlag(TableFlags.Shared))
                 {
                     queue.Enqueue(relation.MappingTable);
                 }
                 if (relation.RightTable != null && !relation.RightTable.Flags.HasFlag(TableFlags.Shared))
                 {
                     queue.Enqueue(relation.RightTable);
                 }
             }
         }
     }
     else
     {
         tables.Add(table);
         indexes.AddRange(table.Indexes);
         relations.AddRange(table.Relations);
     }
 }