Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 4
0
        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());
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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));
        }
Ejemplo n.º 7
0
        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());
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        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());
        }
Ejemplo n.º 10
0
        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());
        }
Ejemplo n.º 11
0
        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());
        }
Ejemplo n.º 12
0
        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");
        }
Ejemplo n.º 13
0
        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));
        }
Ejemplo n.º 14
0
        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));
        }
Ejemplo n.º 15
0
        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());
        }
Ejemplo n.º 16
0
        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());
        }
Ejemplo n.º 17
0
        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" } }));
        }
Ejemplo n.º 18
0
        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());
        }
Ejemplo n.º 19
0
        /// <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;
        }
Ejemplo n.º 20
0
        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" } }));
        }
Ejemplo n.º 21
0
        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" } }));
        }
Ejemplo n.º 22
0
        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);
        }
Ejemplo n.º 23
0
        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());
        }
Ejemplo n.º 24
0
        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));
        }
Ejemplo n.º 25
0
        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);
        }
Ejemplo n.º 27
0
        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");
        }
Ejemplo n.º 28
0
        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");
        }
Ejemplo n.º 29
0
        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));
        }
Ejemplo n.º 30
0
        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));
        }
Ejemplo n.º 31
0
 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);
     }
 }