public string GenerateMongoCode(MongoDatabaseInfo databaseInfo, string collectionName, string linqQuery, string mode, out int injectedCodeStartPos) { var collectionInfo = databaseInfo.GetCollectionInfo(collectionName); var model = new CodeGenModel { LinqQuery = linqQuery, MongoDatabaseInfo = databaseInfo, MongoCollectionInfo = collectionInfo, Mode = mode, ModelType = mode == MongoSharpQueryMode.Json || !collectionInfo.Models.Any() ? "BsonDocument" : collectionInfo.Namespace + "." + collectionInfo.Models[0].RootClassName }; string code = new MongoCodeBehindGen(model).TransformText(); injectedCodeStartPos = 0; var injectPos = code.IndexOf("#region Injected Code", StringComparison.CurrentCultureIgnoreCase); if (injectPos > 0) { injectedCodeStartPos = injectPos + "#region Injected Code".Length; } return(code); }
public static MongoCollectionSchema GetSchemaDocument(MongoDatabaseInfo databaseInfo, string collectionName, int maxSampleSize) { string key = $"{databaseInfo.Connection.Name}-{collectionName}"; if (_docs.ContainsKey(key)) { return(_docs[key]); } MongoCollection <BsonDocument> collection = databaseInfo.GetCollection(collectionName); long collectionSize = collection.Count(); long sampleSize = Math.Min(collectionSize, maxSampleSize); var cursor = collection.FindAll(); cursor.SetSortOrder(SortBy.Descending("_id")); cursor.SetLimit((int)sampleSize); var docs = cursor.ToList(); var doc = new BsonDocumentBuilder().BuildDocument(docs); _docs.Add(key, new MongoCollectionSchema { SchemaDocument = doc, SampleSize = sampleSize, CollectionSize = collectionSize }); return(_docs[key]); }
public List <string> GetCollectionNames(MongoDatabaseInfo databaseInfo) { var client = new MongoClient(databaseInfo.Connection.GetConnectionString(databaseInfo.Name)); var server = client.GetServer(); var db = server.GetDatabase(databaseInfo.Name); return (db.GetCollectionNames() .Where(x => !x.StartsWith("system.", StringComparison.CurrentCultureIgnoreCase)) .ToList()); }
public MongoDatabaseInfo AddDatabase(string name) { var dbInfo = new MongoDatabaseInfo { Name = name, Connection = this }; Databases.Add(dbInfo); return(dbInfo); }
public List <PropertyData> GetPropertiesPaths(MongoDatabaseInfo databaseInfo, string collectionName) { MongoCollectionModelInfo model = GetModel(databaseInfo, collectionName); if (string.IsNullOrWhiteSpace(model.ModelCode)) { throw new Exception("Model does not exist"); } var types = new MongoDynamicCodeRunner().CompileModelCode(model.ModelCode); var rootType = types.Find(t => t.Name == model.RootClassName); if (rootType == null) { throw new Exception($"{model.RootClassName} class not found in Model."); } List <PropertyData> properties = ObjectHelper.ToPropertyPaths(rootType); return(properties); }
private MongoCollectionModelInfo GetModel(MongoDatabaseInfo databaseInfo, string collectionName) { MongoCollectionInfo collectionInfo = databaseInfo.GetCollectionInfo(collectionName); if (collectionInfo != null && collectionInfo.HasModel) { // Model already exists for this collection. return(collectionInfo.Models[0]); } // Generate and save model code. var collection = databaseInfo.GetCollection(collectionName); var doc = collection.FindOne(); if (doc == null) { throw new Exception( $"Collection '{collectionName}' is empty. Unable to determine schema from first document"); } var schemaInfo = MongoCollectionSchemaStore.GetSchemaDocument(databaseInfo, collectionName); var classes = new BsonDocumentConverter().ToCSharpClassDeclarations(schemaInfo.SchemaDocument, collectionName); var sb = new StringBuilder(); foreach (var classSyntax in classes) { sb.AppendLine(classSyntax); } string modelCode = sb.ToString(); MongoCollectionModelInfo newModel = databaseInfo.SetCollectionModel(collectionName, modelCode, "Doc0", true, (int)schemaInfo.SampleSize, schemaInfo.SamplePercent); Settings.Instance.Save(); return(newModel); }
public static MongoCollectionSchema GetSchemaDocument(MongoDatabaseInfo databaseInfo, string collectionName) { return(GetSchemaDocument(databaseInfo, collectionName, 10000)); }