public void NewObjectDontHaveOldObjectToken() { var db = DatabaseGenerator.Get(); var oldObject = JObject.Parse("{'Name':'raoof','Family':'hojat'}"); var newObject = JObject.Parse("{'Name':'raoof'}"); JObject changedObject = new JObject(); new DocumentTracker(db).CreateChangedDocument(oldObject, newObject, ref changedObject); var expectedJson = JObject.Parse("{}"); Assert.Equal(JObject.DeepEquals(expectedJson, changedObject), true); }
public void TraversalSelectPathMember() { var db = DatabaseGenerator.Get(); var query = db.Query() .Traversal <Person, Friend>("Person/1234") .Graph("SocialGraph") .Select(g => g.Path.Vertices[0].Age) .GetQueryData(); Assert.Equal(query.Query.RemoveSpaces(), @" for `graph_0_Vertex`, `graph_0_Edge`, `graph_0_Path` in any @P1 graph ""SocialGraph"" return `graph_0_Path`.`vertices` [ @P2 ] .`Age`".RemoveSpaces()); }
public void TraversalWithoutDirection() { var db = DatabaseGenerator.Get(); var query = db.Query() .Traversal <Person, Friend>("Person/1234") .Graph("SocialGraph") .Select(g => g) .GetQueryData(); Assert.Equal(query.Query.RemoveSpaces(), @" for `graph_0_Vertex`, `graph_0_Edge`, `graph_0_Path` in any @P1 graph ""SocialGraph"" return { `vertex` : `graph_0_Vertex`, `edge` : `graph_0_Edge`, `path` : `graph_0_Path` }".RemoveSpaces()); }
public void ShortestPathAnyDirection() { var db = DatabaseGenerator.Get(); var query = db.Query() .ShortestPath <Person, Friend>("Person/1234", "Person/4321") .AnyDirection() .Graph("SocialGraph") .Select(g => g) .GetQueryData(); Assert.Equal(query.Query.RemoveSpaces(), @" for `graph_0_Vertex`, `graph_0_Edge` in any shortest_path @P1 to @P2 graph ""SocialGraph"" return { `vertex` : `graph_0_Vertex`, `edge` : `graph_0_Edge` }".RemoveSpaces()); }
public void CustomConverter() { var db = DatabaseGenerator.Get(); db.Setting.Serialization.Converters.Add(new StringEnumConverter()); var stringValue = new DocumentSerializer(db).SerializeWithoutReader(ProductStatus.Available); Assert.Equal("\"Available\"", stringValue); db.Setting.Serialization.Converters.Clear(); var integerValue = new DocumentSerializer(db).SerializeWithoutReader(ProductStatus.Available); Assert.Equal("0", integerValue); }
public void OneProperty() { var db = DatabaseGenerator.Get(); Product product = new Product(); var tracker = new DocumentTracker(db); tracker.TrackChanges(product, ObjectUtility.CreateJObject(product, db)); product.Quantity = 5; var changed = tracker.GetChanges(product); var expectedJson = JObject.Parse("{'Quantity':5}"); Assert.True(JObject.DeepEquals(expectedJson, changed)); }
public void LetWithLambda_SelectVersion() { var db = DatabaseGenerator.Get(); var query = db.Query <Person>() .Select(p => new { p, a = p.Age }) .Select(p => new { p, f = p.p.Fullname }) .Select(p => new { p.p.p, p.p.a, p.f }); Assert.Equal(query.GetQueryData().Query.RemoveSpaces(), @" for `p` in `Person` let `a` = `p`.`Age` let `f` = `p`.`Fullname` return { `p` : `p` , `a` : `a` , `f` : `f` } ".RemoveSpaces()); }
public void EnumConvertion() { var db = DatabaseGenerator.Get(); db.Setting.Serialization.SerializeEnumAsInteger = false; var stringValue = new DocumentSerializer(db).SerializeWithoutReader(ProductStatus.Available); Assert.Equal("\"Available\"", stringValue); db.Setting.Serialization.SerializeEnumAsInteger = true; var integerValue = new DocumentSerializer(db).SerializeWithoutReader(ProductStatus.SoldOut); Assert.Equal("1", integerValue); }
public void Join() { var db = DatabaseGenerator.Get(); var query = from p in db.Query <Person>() from f in db.Query <Flight>() where p.Age == f.Code select new { p, f }; var queryData = query.GetQueryData(); Assert.Equal(queryData.Query.RemoveSpaces(), @"for `p` in `Person` for `f` in `Flight` filter ( `p`.`Age` == `f`.`Code` ) return { `p` : `p` , `f` : `f` }".RemoveSpaces()); }
public void Let() { var db = DatabaseGenerator.Get(); var query = from p in db.Query <Person>() let a = p.Age let f = p.Fullname select new { p, a, f }; Assert.Equal(query.GetQueryData().Query.RemoveSpaces(), @" for `p` in `Person` let `a` = `p`.`Age` let `f` = `p`.`Fullname` return { `p` : `p` , `a` : `a` , `f` : `f` } ".RemoveSpaces()); }
public void JoinWithLambda() { var db = DatabaseGenerator.Get(); var query = db.Query <Person>() .For(p => db.Query <Flight>() .Where(f => p.Age == f.Code) .Select(f => new { p, f })); var queryData = query.GetQueryData(); Assert.Equal(queryData.Query.RemoveSpaces(), @"for `p` in `Person` for `f` in `Flight` filter ( `p`.`Age` == `f`.`Code` ) return { `p` : `p` , `f` : `f` }".RemoveSpaces()); }
public void Replace_WithKey() { var db = DatabaseGenerator.Get(); var query = db.Query <Flight>().Replace(f => new { Airline = "lufthansa" }, keySelector: k => k.Key) .IgnoreModificationSelect(); var queryData = query.GetQueryData(); Assert.Equal(queryData.Query.RemoveSpaces(), @"for `f` in `Flight` replace `f`.`_key` with @P1 in `Flight`".RemoveSpaces()); dynamic parameter = queryData.BindVars[0].Value; Assert.Equal(parameter.Airline, "lufthansa"); }
public void InsertSingle_SelectNewMember() { var db = DatabaseGenerator.Get(); var person = new Person { Age = 21 }; var query = db.Query().Insert(_ => person).In <Person>().Select((n, o) => n.Age); var queryData = query.GetQueryData(); Assert.Equal(queryData.Query.RemoveSpaces(), @"insert @P1 in `Person` return `NEW` .`Age`".RemoveSpaces()); Assert.Equal(JsonConvert.SerializeObject(queryData.BindVars[0].Value), JsonConvert.SerializeObject(person)); }
public void InsertSingle() { var db = DatabaseGenerator.Get(); var person = new Person { Age = 21 }; var query = db.Query().Insert(_ => person).In <Person>().IgnoreModificationSelect(); var queryData = query.GetQueryData(); Assert.Equal(queryData.Query.RemoveSpaces(), @"insert @P1 in `Person`".RemoveSpaces()); Assert.Equal(JsonConvert.SerializeObject(queryData.BindVars[0].Value), JsonConvert.SerializeObject(person)); }
public void LetWithLambda() { var db = DatabaseGenerator.Get(); var query = db.Query <Person>() .Let(p => p.Age, (q, a) => q .Let(p => p.Fullname, (q2, f) => q2 .Select(p => new { p, a, f }))); Assert.Equal(query.GetQueryData().Query.RemoveSpaces(), @" for `p` in `Person` let `a` = `p`.`Age` let `f` = `p`.`Fullname` return { `p` : `p` , `a` : `a` , `f` : `f` } ".RemoveSpaces()); }
DatabaseGeneratorUpdateDatabase( IList <DatabaseObject> oldConceptApplications, IList <DatabaseObject> newConceptApplications) { // Update mock database (based on difference between old and new concept applications): var conceptApplicationRepository = new MockConceptApplicationRepository(ConceptApplication.FromDatabaseObjects(oldConceptApplications)); var databaseModel = new DatabaseModel { DatabaseObjects = newConceptApplications.ToList() }; var options = new SqlTransactionBatchesOptions { MaxJoinedScriptCount = 1 }; var sqlExecuter = new MockSqlExecuter(); var sqlTransactionBatches = new SqlTransactionBatches(sqlExecuter, options, new ConsoleLogProvider(), new DelayedLogProvider(new LoggingOptions { DelayedLogTimout = 0 }, null)); var databaseAnalysis = new DatabaseAnalysis( conceptApplicationRepository, new ConsoleLogProvider(), databaseModel); IDatabaseGenerator databaseGenerator = new DatabaseGenerator( sqlTransactionBatches, conceptApplicationRepository, new ConsoleLogProvider(), new DbUpdateOptions { ShortTransactions = false }, databaseAnalysis); databaseGenerator.UpdateDatabaseStructure(); // Report changes in mock database: TestUtility.Dump( sqlExecuter.ExecutedScriptsWithTransaction, script => (script.Item2 ? "tran" : "notran") + string.Concat(script.Item1.Select(sql => "\r\n - " + sql.Replace('\r', ' ').Replace('\n', ' ')))); return (Report : string.Join(", ", sqlExecuter.ExecutedScriptsWithTransaction.SelectMany(script => script.Item1)), SqlExecuter : sqlExecuter, RemovedConcepts : conceptApplicationRepository.DeletedLog, InsertedConcepts : conceptApplicationRepository.InsertedLog.ToList()); }
public void ReplaceSingle() { var db = DatabaseGenerator.Get(); var query = db.Query().Replace(p => new { Outfit = new { Color = "red" } }, _ => "123456") .In <Person>() .IgnoreModificationSelect(); var queryData = query.GetQueryData(); Assert.Equal(queryData.Query.RemoveSpaces(), @"replace @P1 with @P2 in `Person`".RemoveSpaces()); Assert.Equal(queryData.BindVars[0].Value, "123456"); Assert.Equal(JsonConvert.SerializeObject(queryData.BindVars[1].Value), JsonConvert.SerializeObject(new { Outfit = new { Color = "red" } })); }
public void ShortestPathOptions() { var db = DatabaseGenerator.Get(); var query = db.Query() .ShortestPath <Person, Friend>("Person/1234", "Person/4321") .OutBound() .Graph("SocialGraph") .Options(new { bfs = true }) .Select(g => g) .GetQueryData(); Assert.Equal(query.Query.RemoveSpaces(), @" for `graph_0_Vertex`, `graph_0_Edge` in outbound shortest_path @P1 to @P2 graph ""SocialGraph"" options {""bfs"":true} return { `vertex` : `graph_0_Vertex`, `edge` : `graph_0_Edge` }".RemoveSpaces()); }
/// <summary> /// Creates a new DocumentStore with the supplied StoreOptions /// </summary> /// <param name="options"></param> public DocumentStore(StoreOptions options) { options.ApplyConfiguration(); options.CreatePatching(); options.Validate(); Options = options; _logger = options.Logger(); Tenancy = options.Tenancy; if (options.CreateDatabases != null) { IDatabaseGenerator databaseGenerator = new DatabaseGenerator(); databaseGenerator.CreateDatabases(Tenancy, options.CreateDatabases); } Tenancy.Initialize(); Schema = Tenancy.Schema; Storage = options.Storage; Storage.PostProcessConfiguration(); Serializer = options.Serializer(); if (options.UseCharBufferPooling) { _writerPool = new CharArrayTextWriter.Pool(); } Advanced = new AdvancedOptions(this); Diagnostics = new Diagnostics(this); Transform = new DocumentTransforms(this, Tenancy.Default); options.InitialData.Each(x => x.Populate(this)); Parser = new MartenExpressionParser(Serializer, options); HandlerFactory = new QueryHandlerFactory(this); Events = options.Events; }
public void ReplaceSingle_SelectOld() { var db = DatabaseGenerator.Get(); var query = db.Query() .Replace(p => new { Outfit = new { Color = "red" } }, _ => "123456") .In <Person>() .Select((n, o) => o); var queryData = query.GetQueryData(); Assert.Equal(queryData.Query.RemoveSpaces(), @"replace @P1 with @P2 in `Person` return `OLD`".RemoveSpaces()); Assert.Equal("123456", queryData.BindVars[0].Value); Assert.Equal(JsonConvert.SerializeObject(queryData.BindVars[1].Value), JsonConvert.SerializeObject(new { Outfit = new { Color = "red" } })); }
public void UpdateSingle_SelectNew() { var db = DatabaseGenerator.Get(); var query = db.Query() .Update(_ => new { Outfit = new { Color = "red" } }, _ => "123456") .In <Person>() .Select((n, o) => n); var queryData = query.GetQueryData(); Assert.Equal(queryData.Query.RemoveSpaces(), @"update @P1 with @P2 in `Person` return `NEW`".RemoveSpaces()); Assert.Equal(queryData.BindVars[0].Value, "123456"); Assert.Equal(JsonConvert.SerializeObject(queryData.BindVars[1].Value), JsonConvert.SerializeObject(new { Outfit = new { Color = "red" } })); }
public void FromWithSelectNewTernary() { var db = DatabaseGenerator.Get(); var query = from p in db.Query <Person>() select new Person { Fullname = p.Age > 10 ? p.Fullname : "", Outfit = p.Age < 10 ? p.Outfit : null }; var queryText = query.GetQueryData().Query.RemoveSpaces(); Assert.Equal( @"for `p` in `Person` return { `Fullname` : ( `p`.`Age` > @P1 ) ? `p`.`Fullname` : @P2 , `Outfit` : ( `p`.`Age` < @P3 ) ? `p`.`Outfit` : @P4 }".RemoveSpaces(), queryText); }
public void TraversalOptions() { var db = DatabaseGenerator.Get(); var query = db.Query() .Traversal <Person, Friend>("Person/1234") .Depth(1, 5) .OutBound() .Graph("SocialGraph") .Options(new { bfs = true }) .Select(g => g) .GetQueryData(); Assert.Equal(query.Query.RemoveSpaces(), @" for `graph_0_Vertex`, `graph_0_Edge`, `graph_0_Path` in 1..5 outbound @P1 graph ""SocialGraph"" options {""bfs"":true} return { `vertex` : `graph_0_Vertex`, `edge` : `graph_0_Edge`, `path` : `graph_0_Path` }".RemoveSpaces()); }
public void ListFromNull() { var db = DatabaseGenerator.Get(); Product product = new Product(); var tracker = new DocumentTracker(db); tracker.TrackChanges(product, ObjectUtility.CreateJObject(product, db)); product.Tags = new List <string>() { "Soft" }; var changed = tracker.GetChanges(product); var expectedJson = JObject.Parse("{'Tags':['Soft']}"); Assert.True(JObject.DeepEquals(expectedJson, changed)); }
public void DictionaryFromNull() { var db = DatabaseGenerator.Get(); Product product = new Product(); var tracker = new DocumentTracker(db); tracker.TrackChanges(product, ObjectUtility.CreateJObject(product, db)); product.TypeQuantities = new Dictionary <string, int>() { { "Soft", 1 } }; var changed = tracker.GetChanges(product); var expectedJson = JObject.Parse("{'TypeQuantities':{'Soft':1}}"); Assert.True(JObject.DeepEquals(expectedJson, changed)); }
public void Traversal() { var db = DatabaseGenerator.Get(); var query = db.Query() .Traversal <Person, Friend>("Person/1234") .Depth(1, 5) .OutBound() .Graph("SocialGraph") .Select(g => g) .GetQueryData(); Assert.Equal(query.Query.RemoveSpaces(), @" for `graph_0_Vertex`, `graph_0_Edge`, `graph_0_Path` in 1..5 outbound @P1 graph ""SocialGraph"" return { `vertex` : `graph_0_Vertex`, `edge` : `graph_0_Edge`, `path` : `graph_0_Path` }".RemoveSpaces()); Assert.Equal("Person/1234", query.BindVars[0].Value); }
public void ShortestPathInEdgesWithDirection() { var db = DatabaseGenerator.Get(); var query = db.Query() .ShortestPath <Person, Friend>("Person/1234", "Person/4321") .OutBound() .Edge(db.NameOf <Friend>(), EdgeDirection.Inbound) .Edge(db.NameOf <Flight>()) .Select(g => g) .GetQueryData(); Assert.Equal(query.Query.RemoveSpaces(), @" for `graph_0_Vertex`, `graph_0_Edge` in outbound shortest_path @P1 to @P2 inbound `Friend`, `Flight` return { `vertex` : `graph_0_Vertex`, `edge` : `graph_0_Edge` }".RemoveSpaces()); Assert.Equal(query.BindVars[0].Value, "Person/1234"); }
public void ShortestPath() { var db = DatabaseGenerator.Get(); var query = db.Query() .ShortestPath <Person, Friend>("Person/1234", "Person/4321") .OutBound() .Graph("SocialGraph") .Select(g => g) .GetQueryData(); Assert.Equal(query.Query.RemoveSpaces(), @" for `graph_0_Vertex`, `graph_0_Edge` in outbound shortest_path @P1 to @P2 graph ""SocialGraph"" return { `vertex` : `graph_0_Vertex`, `edge` : `graph_0_Edge` }".RemoveSpaces()); Assert.Equal(query.BindVars[0].Value, "Person/1234"); Assert.Equal(query.BindVars[1].Value, "Person/4321"); }
public void OnePropertyToNull() { var db = DatabaseGenerator.Get(); Product product = new Product() { Title = "Pen" }; var tracker = new DocumentTracker(db); tracker.TrackChanges(product, ObjectUtility.CreateJObject(product, db)); product.Title = null; var changed = tracker.GetChanges(product); var expectedJson = JObject.Parse("{'Title':null}"); Assert.True(JObject.DeepEquals(expectedJson, changed)); }
public void NestedFromNull() { var db = DatabaseGenerator.Get(); Product product = new Product(); var tracker = new DocumentTracker(db); tracker.TrackChanges(product, ObjectUtility.CreateJObject(product, db)); product.Category = new Category() { Title = "Featured" }; var changed = tracker.GetChanges(product); var expectedJson = JObject.Parse("{'Category':{'Title':'Featured','Tags':null,'Seller':null}}"); Assert.True(JObject.DeepEquals(expectedJson, changed)); }
private static object Send(DatabaseGenerator generator, string method) { switch (method) { case "record_data": return generator.RecordData(); case "test_cases": return generator.TestCases(); default: throw new Exception("Unknown method " + method); } }