Ejemplo n.º 1
0
        static IEnumerable <Tuple <string, string> > ListCollections(MongoDatabase sourceServer, List <string> collections, string targetCollection)
        {
            // Forcing targetcollection to be null if it's empty
            if (targetCollection == "")
            {
                targetCollection = null;
            }

            if (collections == null || collections.Count == 0)
            {
                foreach (var c in sourceServer.GetCollectionNames())
                {
                    yield return(Tuple.Create(c, c));
                }
            }
            else
            {
                var list        = sourceServer.GetCollectionNames().ToList();
                var hashOrdinal = new HashSet <string> (list, StringComparer.Ordinal);
                foreach (var c in collections)
                {
                    if (hashOrdinal.Contains(c))
                    {
                        yield return(Tuple.Create(c, (targetCollection ?? c)));
                    }
                    else if (c.IndexOf('=') > 0)
                    {
                        var split = c.Split('=');
                        var k     = split[0];
                        var col   = hashOrdinal.Contains(k) ? k : list.FirstOrDefault(name => k.Equals(name, StringComparison.OrdinalIgnoreCase));
                        if (!String.IsNullOrEmpty(col) && !String.IsNullOrEmpty(split[1]))
                        {
                            yield return(Tuple.Create(col, split[1]));
                        }
                    }
                    else
                    {
                        foreach (var col in list.Where(name => SharedMethods.WildcardIsMatch(c, name, true)))
                        {
                            yield return(Tuple.Create(col, (targetCollection ?? c)));
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        static IEnumerable <Tuple <MongoDatabase, MongoDatabase> > ListDatabases(MongoServer sourceServer, MongoServer targetServer, List <string> sourceDatabases, List <string> targetDatabases)
        {
            if (sourceDatabases == null)
            {
                yield break;
            }
            if (targetDatabases == null || targetDatabases.Count == 0)
            {
                targetDatabases = null;
            }

            // check if we are on the same server!
            bool sameServer = ServersAreEqual(sourceServer, targetServer);

            // prepare available databases list
            var databases          = sourceServer.GetDatabaseNames().ToList();
            var availableDatabases = new HashSet <string> (databases, StringComparer.Ordinal);

            // create mappings
            if (targetDatabases == null)
            {
                for (int i = 0; i < sourceDatabases.Count; i++)
                {
                    string k = sourceDatabases[i];
                    if (k.IndexOf('=') > 0)
                    {
                        var split = k.Split('=');
                        k = split[0];
                        var db = availableDatabases.Contains(k) ? k : databases.FirstOrDefault(name => k.Equals(name, StringComparison.OrdinalIgnoreCase));
                        // check if database was found
                        if (String.IsNullOrEmpty(db) || String.IsNullOrEmpty(split[1]))
                        {
                            continue;
                        }
                        yield return(Tuple.Create(sourceServer.GetDatabase(db), targetServer.GetDatabase(split[1])));
                    }
                    else
                    {
                        foreach (var db in databases.Where(name => SharedMethods.WildcardIsMatch(k, name, true)))
                        {
                            yield return(Tuple.Create(sourceServer.GetDatabase(db), targetServer.GetDatabase(db)));
                        }
                    }
                }
            }
            else
            {
                // match
                for (int i = 0; i < sourceDatabases.Count; i++)
                {
                    string k  = sourceDatabases[i];
                    var    db = availableDatabases.Contains(k) ? k : databases.FirstOrDefault(name => k.Equals(name, StringComparison.OrdinalIgnoreCase));
                    // check if database was found
                    if (String.IsNullOrEmpty(db) || String.IsNullOrEmpty(targetDatabases[i]))
                    {
                        continue;
                    }
                    yield return(Tuple.Create(sourceServer.GetDatabase(db), targetServer.GetDatabase(targetDatabases[i])));
                }
            }
        }