Esempio n. 1
0
        public void TestSimpleQuery()
        {
            var sid = Guid.NewGuid().ToString();
            using (var store = _storeManager.CreateStore(Configuration.StoreLocation + "\\" + sid))
            {
                var t = new Triple
                            {
                                Subject = "http://www.networkedplanet.com/people/10",
                                Predicate = "http://www.networkedplanet.com/model/isa",
                                Object = "http://www.networkedplanet.com/types/person"
                            };
                store.InsertTriple(t);

                store.Commit(Guid.Empty);
            }
            using (var store = _storeManager.OpenStore(Configuration.StoreLocation + "\\" + sid))
            {
                var triples = store.GetResourceStatements("http://www.networkedplanet.com/people/10");
                Assert.AreEqual(1, triples.Count());

                // do query 
                const string query =
                    "select ?t where { ?t <http://www.networkedplanet.com/model/isa> <http://www.networkedplanet.com/types/person> }";
                store.ExecuteSparqlQuery(query, SparqlResultsFormat.Xml);
            }
        }
Esempio n. 2
0
        public void TestLookupByIdentifierAndType()
        {
            var sid = Guid.NewGuid().ToString();
            using (var store = _storeManager.CreateStore(Configuration.StoreLocation + "\\" + sid))
            {

                var t = new Triple
                            {
                                Subject = "http://www.networkedplanet.com/people/10",
                                Predicate = "http://www.networkedplanet.com/model/isa",
                                Object = "http://www.networkedplanet.com/types/person"
                            };
                store.InsertTriple(t);

                store.Commit(Guid.Empty);
            }

            using (var store = _storeManager.OpenStore(Configuration.StoreLocation + "\\" + sid))
            {
                // do query 
                const string query =
                    "select ?t where { ?t <http://www.networkedplanet.com/model/isa> <http://www.networkedplanet.com/types/person> . FILTER ( ?t = <http://www.networkedplanet.com/people/10> ) }";
                var doc = XDocument.Parse(store.ExecuteSparqlQuery(query, SparqlResultsFormat.Xml));

                Assert.IsTrue(doc.SparqlResultRows().Count() == 1);
                Assert.AreEqual("http://www.networkedplanet.com/people/10",
                                doc.SparqlResultRows().FirstOrDefault().GetColumnValue("t").ToString());
            }
        }
Esempio n. 3
0
        private void SetVersionTriple(Triple triple)
        {
            // see if there are any triples for this property
            bool haveMatch = _triples.Any(t => t.Predicate.Equals(triple.Predicate));

            if (haveMatch)
            {
                // remove all triples in current state that match the predicate
                _triples.RemoveAll(t => t.Predicate.Equals(triple.Predicate));

                // remove any existing property triple in the add triples collection
                _store.AddTriples.RemoveBySubjectPredicate(triple.Subject, triple.Predicate);
            }

            // Because this is a set, we use a wildcard to delete any existing properties with the same predicate
            if (!_isNew && !_store.DeletePatterns.GetMatches(triple.Subject, triple.Predicate, Constants.WildcardUri).Any())
            {
                _store.DeletePatterns.Add(new Triple
                {
                    Subject   = triple.Subject,
                    Predicate = triple.Predicate,
                    Object    = Constants.WildcardUri,
                    Graph     = _store.VersionGraphUri
                });
            }

            // add new triple to current triples
            _triples.Add(triple);

            // add new triple to txn add triples
            _store.AddTriples.Add(triple);
        }
 public void Triple(Triple t)
 {
     string dt = null;
     if (t.IsLiteral && t.DataType != null) dt = t.DataType.ToString();
     _sink.Triple(t.Subject, t.Subject.StartsWith("_:"),
                  t.Predicate, t.Predicate.StartsWith("_:"),
                  t.Object.ToString(), !t.IsLiteral && t.ToString().StartsWith("_:"),
                  t.IsLiteral, dt, t.LangCode, t.Graph.ToString());
 }
Esempio n. 5
0
 /// <summary>
 /// Adds one or more delete patterns for the specified base triple
 /// </summary>
 /// <param name="baseDeleteTriple">The base triple match</param>
 /// <remarks>This method ensures that delete patterns target only the
 /// graphs that are read from and the update graph.
 /// If the store has a defined data set, then a delete pattern is created for
 /// each graph in the data set plus the update graph. Otherwise a single delete pattern
 /// is created with a wildcard graph specifier.</remarks>
 private void AddDeleteTriples(Triple baseDeleteTriple)
 {
     if (_store.DataSetGraphUris == null)
     {
         // Add a pattern to remove matching triple from all graphs
         _store.DeletePatterns.Add(new Triple
         {
             Subject   = baseDeleteTriple.Subject,
             Predicate = baseDeleteTriple.Predicate,
             Object    = baseDeleteTriple.Object,
             IsLiteral = baseDeleteTriple.IsLiteral,
             DataType  = baseDeleteTriple.DataType,
             LangCode  = baseDeleteTriple.LangCode,
             Graph     = Constants.WildcardUri
         });
     }
     else
     {
         // Add patterns to remove matching triple from update graph and data set graphs
         _store.DeletePatterns.Add(new Triple
         {
             Subject   = baseDeleteTriple.Subject,
             Predicate = baseDeleteTriple.Predicate,
             Object    = baseDeleteTriple.Object,
             IsLiteral = baseDeleteTriple.IsLiteral,
             DataType  = baseDeleteTriple.DataType,
             LangCode  = baseDeleteTriple.LangCode,
             Graph     = _store.UpdateGraphUri
         });
         foreach (var g in _store.DataSetGraphUris)
         {
             _store.DeletePatterns.Add(new Triple
             {
                 Subject   = baseDeleteTriple.Subject,
                 Predicate = baseDeleteTriple.Predicate,
                 Object    = baseDeleteTriple.Object,
                 IsLiteral = baseDeleteTriple.IsLiteral,
                 DataType  = baseDeleteTriple.DataType,
                 LangCode  = baseDeleteTriple.LangCode,
                 Graph     = g
             });
         }
     }
 }
Esempio n. 6
0
        private void AddDataObjectProperty(IDataObject type, IDataObject value)
        {
            CheckLoaded();

            var triple = new Triple
            {
                Graph     = _store.UpdateGraphUri,
                IsLiteral = false,
                Object    = value.Identity,
                Predicate = type.Identity,
                Subject   = Identity
            };

            // add to DataObject state triples
            _triples.Add(triple);

            // add to txn
            _store.AddTriples.Add(triple);
        }
Esempio n. 7
0
        /// <summary>
        /// Sets the property of this object to the specified data object
        /// </summary>
        /// <param name="type">The type of the property to set</param>
        /// <param name="value">The new value of the property</param>
        /// <returns>This IDataObject to allow chained calls</returns>
        /// <remarks>This method will remove all existing properties of type <paramref name="type"/> from this data object
        /// and add a single replacement property of the same type with <paramref name="value"/> as the property value.</remarks>
        private IDataObject SetRelatedObject(IDataObject type, IDataObject value)
        {
            CheckLoaded();

            // create a new value triple
            var triple = new Triple
            {
                Subject   = Identity,
                Predicate = type.Identity,
                Object    = value.Identity,
                IsLiteral = false,
                Graph     = _store.UpdateGraphUri
            };

            // use common method for updating local state and the txn
            SetTriple(triple);

            // return this DataObject
            return(this);
        }
Esempio n. 8
0
        private void AddLiteralProperty(IDataObject type, string value, string dataType, string langCode = null)
        {
            CheckLoaded();

            var triple = new Triple
            {
                Graph     = _store.UpdateGraphUri,
                IsLiteral = true,
                Object    = value,
                DataType  = dataType,
                LangCode  = langCode,
                Predicate = type.Identity,
                Subject   = Identity
            };

            // add to DataObject state triples
            _triples.Add(triple);

            // add to txn
            _store.AddTriples.Add(triple);
        }
Esempio n. 9
0
        private void SetPropertyLiteral(IDataObject type, string value, string dataType, string langCode = null)
        {
            CheckLoaded();

            if (type.Identity.Equals(Constants.VersionPredicateUri))
            {
                // Update of version property has slightly different handling due to different target graph
                var triple = new Triple
                {
                    Subject   = Identity,
                    Predicate = Constants.VersionPredicateUri,
                    IsLiteral = true,
                    Object    = value,
                    DataType  = dataType,
                    LangCode  = langCode,
                    Graph     = _store.VersionGraphUri
                };
                SetVersionTriple(triple);
            }
            else
            {
                // create a new value triple
                var triple = new Triple
                {
                    Subject   = Identity,
                    Predicate = type.Identity,
                    IsLiteral = true,
                    Object    = value,
                    DataType  = dataType,
                    LangCode  = langCode,
                    Graph     = _store.UpdateGraphUri
                };

                // use common method for updating local state and the txn
                SetTriple(triple);
            }
            // return this DataObject
            return;
        }
Esempio n. 10
0
        public virtual void TestListCommitPoints()
        {
            var sid = Guid.NewGuid().ToString();
            var store = StoreManager.CreateStore(Configuration.StoreLocation + "\\" + sid);

            Assert.AreEqual(1, store.GetCommitPoints().Count());

            var t = new Triple
                        {
                            Subject = "http://www.networkedplanet.com/people/10",
                            Predicate = "http://www.networkedplanet.com/model/isa",
                            Object = "bob",
                            DataType = RdfDatatypes.String,
                            IsLiteral = true
                        };
            store.InsertTriple(t);
            store.Commit(Guid.Empty);

            Assert.AreEqual(2, store.GetCommitPoints().Count());

            t = new Triple
                    {
                        Subject = "http://www.networkedplanet.com/people/11",
                        Predicate = "http://www.networkedplanet.com/model/isa",
                        Object = "bob",
                        DataType = RdfDatatypes.String,
                        IsLiteral = true
                    };
            store.InsertTriple(t);
            store.Commit(Guid.Empty);

            Assert.AreEqual(3, store.GetCommitPoints().Count());
        }
Esempio n. 11
0
        public void TestReadStoreCacheValueRespected()
        {
            var sid = Guid.NewGuid().ToString();
            var store = _storeManager.CreateStore(Configuration.StoreLocation + "\\" + sid);

            var t = new Triple
            {
                Subject = "http://www.networkedplanet.com/people/10",
                Predicate = "http://www.networkedplanet.com/model/isa",
                Object = "bob",
                DataType = RdfDatatypes.String,
                IsLiteral = true
            };
            store.InsertTriple(t);

            t = new Triple
            {
                Subject = "http://www.networkedplanet.com/people/10",
                Predicate = "http://www.networkedplanet.com/model/isa",
                Object = "kal",
                DataType = RdfDatatypes.String,
                IsLiteral = true
            };
            store.InsertTriple(t);

            store.Commit(Guid.Empty);

            Configuration.ReadStoreObjectCacheSize = 0;

            var store1 = _storeManager.OpenStore(Configuration.StoreLocation + "\\" + sid, true) as Store;
            var triples = store1.GetResourceStatements("http://www.networkedplanet.com/people/10");
            Assert.AreEqual(2, triples.Count());
            Assert.AreEqual(0, store1.CacheCount);

            Configuration.ReadStoreObjectCacheSize = 100000;

            store1 = _storeManager.OpenStore(Configuration.StoreLocation + "\\" + sid, true) as Store;
            triples = store1.GetResourceStatements("http://www.networkedplanet.com/people/10");
            Assert.AreEqual(2, triples.Count());
            Assert.IsTrue(store1.CacheCount > 0);
        }
Esempio n. 12
0
 /// <summary>
 /// Inserts a triple into the store
 /// </summary>
 /// <param name="triple"></param>
 public void InsertTriple(Triple triple)
 {
     InsertTriple(triple.Subject, triple.Predicate, triple.Object, triple.IsLiteral, triple.DataType,
                  triple.LangCode, triple.Graph ?? Constants.DefaultGraphUri);
 }
Esempio n. 13
0
        public void TestInsert1000000TriplesWithUniqueSubjectResources()
        {
            var sid = Guid.NewGuid().ToString();
            var store = _storeManager.CreateStore(BrightstarDB.Configuration.StoreLocation + "\\" + sid);

            var start = DateTime.UtcNow;
            for (int i = 0; i < 1000000; i++)
            {
                var t = new Triple
                {
                    Subject = "http://www.networkedplanet.com/people/" + i,
                    Predicate = "http://www.networkedplanet.com/model/isa",
                    Object = "http://www.networkedplanet.com/types/person"
                };
                store.InsertTriple(t);
            }
            var end = DateTime.UtcNow;
            Console.WriteLine("Insert triples took " + (end - start).TotalMilliseconds);

            start = DateTime.UtcNow;
            store.Commit(Guid.Empty);
            end = DateTime.UtcNow;
            Console.WriteLine("Commit triples took " + (end - start).TotalMilliseconds);
        }
Esempio n. 14
0
        private void SetVersionTriple(Triple triple)
        {
            // see if there are any triples for this property
            bool haveMatch = _triples.Any(t => t.Predicate.Equals(triple.Predicate));
            if (haveMatch)
            {
                // remove all triples in current state that match the predicate
                _triples.RemoveAll(t => t.Predicate.Equals(triple.Predicate));

                // remove any existing property triple in the add triples collection
                _store.AddTriples.RemoveAll(t => t.Subject.Equals(triple.Subject) && t.Predicate.Equals(triple.Predicate));
            }

            // Because this is a set, we use a wildcard to delete any existing properties with the same predicate
            if (!_isNew && !_store.DeletePatterns.Any(t => t.Subject.Equals(triple.Subject) && t.Predicate.Equals(triple.Predicate) && t.Object.Equals(Constants.WildcardUri)))
            {
                _store.DeletePatterns.Add(new Triple
                {
                    Subject = triple.Subject,
                    Predicate = triple.Predicate,
                    Object = Constants.WildcardUri,
                    Graph = _store.VersionGraphUri
                });
            }

            // add new triple to current triples
            _triples.Add(triple);

            // add new triple to txn add triples
            _store.AddTriples.Add(triple);
        }
Esempio n. 15
0
        private void AddLiteralProperty(IDataObject type, string value, string dataType, string langCode = null)
        {
            CheckLoaded();

            var triple = new Triple
                             {
                                 Graph = _store.UpdateGraphUri,
                                 IsLiteral = true,
                                 Object = value,
                                 DataType = dataType,
                                 LangCode = langCode,
                                 Predicate = type.Identity,
                                 Subject = Identity
                             };

            // add to DataObject state triples
            _triples.Add(triple);

            // add to txn
            _store.AddTriples.Add(triple);
        }
Esempio n. 16
0
        public virtual void TestRecoverFromBadCommitPointWrite()
        {
            var sid = Guid.NewGuid().ToString();
            using (var store = StoreManager.CreateStore(Configuration.StoreLocation + "\\" + sid))
            {
                Assert.AreEqual(1, store.GetCommitPoints().First().CommitNumber);
                var t = new Triple
                            {
                                Subject = "http://www.networkedplanet.com/people/10",
                                Predicate = "http://www.networkedplanet.com/model/isa",
                                Object = "bob",
                                DataType = RdfDatatypes.String,
                                IsLiteral = true
                            };
                store.InsertTriple(t);

                t = new Triple
                        {
                            Subject = "http://www.networkedplanet.com/people/10",
                            Predicate = "http://www.networkedplanet.com/model/isa",
                            Object = "kal",
                            DataType = RdfDatatypes.String,
                            IsLiteral = true
                        };
                store.InsertTriple(t);

                store.Commit(Guid.Empty);

                Assert.AreEqual(2, store.GetCommitPoints().First().CommitNumber);

                t = new Triple
                        {
                            Subject = "http://www.networkedplanet.com/people/10",
                            Predicate = "http://www.networkedplanet.com/model/isa",
                            Object = "gra",
                            DataType = RdfDatatypes.String,
                            IsLiteral = true
                        };

                store.InsertTriple(t);
                store.Commit(Guid.Empty);
                Assert.AreEqual(3, store.GetCommitPoints().First().CommitNumber);
            }
            var storePath = Path.Combine(Configuration.StoreLocation, sid);
            var masterFilePath = Path.Combine(Configuration.StoreLocation, sid, MasterFile.MasterFileName);


            using (var store = StoreManager.OpenStore(storePath))
            {
                Assert.AreEqual(3, store.GetCommitPoints().First().CommitNumber);
                Assert.AreEqual(3, store.GetResourceStatements("http://www.networkedplanet.com/people/10").Count());
            }

            // mess with the file
            using (var stream = new FileStream(masterFilePath, FileMode.Open, FileAccess.ReadWrite))
            {
                stream.Seek(-130, SeekOrigin.End);
                stream.WriteByte(5);
                stream.Flush();
            }

            // open it and should still be at the third commit point (using second copy)
            using (var store = StoreManager.OpenStore(storePath))
            {
                Assert.AreEqual(3, store.GetCommitPoints().First().CommitNumber);
                var triples = store.GetResourceStatements("http://www.networkedplanet.com/people/10");
                Assert.AreEqual(3, triples.Count());

                // Mess with the file again (f**k up the duplicate copy)
                using (var stream = new FileStream(masterFilePath, FileMode.Open, FileAccess.ReadWrite))
                {
                    stream.Seek(-5, SeekOrigin.End);
                    var currentValue = (byte)stream.ReadByte();
                    stream.Seek(-1, SeekOrigin.Current);
                    stream.WriteByte((byte)~currentValue);
                    stream.Flush();
                }
            }

            // Open it now and we will be back to the second commit point
            // Need to clear the page cache to ensure that in this simple test we don't get an old cached version of the page
            PageCache.Instance.Clear();
            BPlusTreeStoreManager.MasterFileCache.Clear();

            using (var store = StoreManager.OpenStore(storePath))
            {
                Assert.AreEqual(2, store.GetCommitPoints().First().CommitNumber);
                var triples = store.GetResourceStatements("http://www.networkedplanet.com/people/10").ToList();
                Assert.AreEqual(2, triples.Count());
            }
        }
Esempio n. 17
0
        private void SetPropertyLiteral(IDataObject type, string value, string dataType, string langCode = null)
        {
            CheckLoaded();

            if (type.Identity.Equals(Constants.VersionPredicateUri))
            {
                // Update of version property has slightly different handling due to different target graph
                var triple = new Triple
                    {
                        Subject = Identity,
                        Predicate = Constants.VersionPredicateUri,
                        IsLiteral = true,
                        Object = value,
                        DataType = dataType,
                        LangCode = langCode,
                        Graph = _store.VersionGraphUri
                    };
                SetVersionTriple(triple);
            }
            else
            {
                // create a new value triple
                var triple = new Triple
                    {
                        Subject = Identity,
                        Predicate = type.Identity,
                        IsLiteral = true,
                        Object = value,
                        DataType = dataType,
                        LangCode = langCode,
                        Graph = _store.UpdateGraphUri
                    };

                // use common method for updating local state and the txn
                SetTriple(triple);
            }
            // return this DataObject
            return;
        }
Esempio n. 18
0
        public virtual void TestQueryAtCommitPoint()
        {
            var testTimestamps = new List<DateTime> { DateTime.UtcNow };
            Thread.Sleep(100);

            var sid = Guid.NewGuid().ToString();
            using (var store = StoreManager.CreateStore(Configuration.StoreLocation + "\\" + sid))
            {
                Assert.AreEqual(1, store.GetCommitPoints().Count());

                testTimestamps.Add(DateTime.UtcNow);
                Thread.Sleep(100);

                var t = new Triple
                    {
                        Subject = "http://www.networkedplanet.com/people/10",
                        Predicate = "http://www.networkedplanet.com/model/isa",
                        Object = "bob",
                        DataType = RdfDatatypes.String,
                        IsLiteral = true
                    };
                store.InsertTriple(t);
                store.Commit(Guid.Empty);
                Assert.AreEqual(2, store.GetCommitPoints().Count());

                testTimestamps.Add(DateTime.UtcNow);
                Thread.Sleep(100);

                t = new Triple
                    {
                        Subject = "http://www.networkedplanet.com/people/11",
                        Predicate = "http://www.networkedplanet.com/model/isa",
                        Object = "bob",
                        DataType = RdfDatatypes.String,
                        IsLiteral = true
                    };
                store.InsertTriple(t);
                store.Commit(Guid.Empty);
                Assert.AreEqual(3, store.GetCommitPoints().Count());
            }

            testTimestamps.Add(DateTime.UtcNow);
            Thread.Sleep(100);

            var client = BrightstarService.GetEmbeddedClient(Configuration.StoreLocation);
            const string queryString = "SELECT ?p ?x WHERE {?p <http://www.networkedplanet.com/model/isa> ?x . }";

            var commitPoint = client.GetCommitPoint(sid, testTimestamps[1]);
            using (var results = client.ExecuteQuery(commitPoint, queryString))
            {
                var resultsDoc = XDocument.Load(results);
                Assert.AreEqual(0, resultsDoc.SparqlResultRows().Count());
            }

            commitPoint = client.GetCommitPoint(sid, testTimestamps[2]);
            Assert.IsNotNull(commitPoint);
            using (var results = client.ExecuteQuery(commitPoint, queryString))
            {
                var resultsDoc = XDocument.Load(results);
                Assert.AreEqual(1, resultsDoc.SparqlResultRows().Count());
            }

            commitPoint = client.GetCommitPoint(sid, testTimestamps[3]);
            Assert.IsNotNull(commitPoint);
            using (var results = client.ExecuteQuery(commitPoint, queryString))
            {
                var resultsDoc = XDocument.Load(results);
                Assert.AreEqual(2, resultsDoc.SparqlResultRows().Count());
            }
        }
Esempio n. 19
0
        public virtual void TestListStoreGraphs()
        {
            // create 3 commit points
            var sid = Guid.NewGuid().ToString();
            using (var store = StoreManager.CreateStore(Configuration.StoreLocation + "\\" + sid))
            {

                // Initially should be no graph URIs in the index
                Assert.IsFalse(store.GetGraphUris().Any());

                var t = new Triple
                            {
                                Subject = "http://www.networkedplanet.com/people/12",
                                Predicate = "http://www.networkedplanet.com/model/name",
                                Object = "bob",
                                IsLiteral = true,
                                DataType = RdfDatatypes.String
                            };
                store.InsertTriple(t);
                store.Commit(Guid.Empty);

                List<string> allGraphUris = store.GetGraphUris().ToList();
                Assert.AreEqual(1, allGraphUris.Count);
                Assert.IsTrue(allGraphUris.Contains(Constants.DefaultGraphUri));

                t = new Triple
                        {
                            Subject = "http://www.networkedplanet.com/people/12",
                            Predicate = "http://www.networkedplanet.com/model/name",
                            Object = "bob",
                            IsLiteral = true,
                            DataType = RdfDatatypes.String,
                            Graph = "http://www.networkedplanet.com/graphs/1"
                        };
                store.InsertTriple(t);
                store.Commit(Guid.Empty);

                allGraphUris = store.GetGraphUris().ToList();
                Assert.AreEqual(2, allGraphUris.Count);
                Assert.IsTrue(allGraphUris.Contains(Constants.DefaultGraphUri));
                Assert.IsTrue(allGraphUris.Contains("http://www.networkedplanet.com/graphs/1"));
            }
            using (var reopenStore = StoreManager.OpenStore(Configuration.StoreLocation + "\\" + sid))
            {
                var allGraphUris = reopenStore.GetGraphUris().ToList();
                Assert.AreEqual(2, allGraphUris.Count);
                Assert.IsTrue(allGraphUris.Contains(Constants.DefaultGraphUri));
                Assert.IsTrue(allGraphUris.Contains("http://www.networkedplanet.com/graphs/1"));
            }
        }
Esempio n. 20
0
        public virtual void TestInsertTriple()
        {
            var t = new Triple
                        {
                            Subject = "http://www.networkedplanet.com/people/gra",
                            Predicate = "http://www.networkedplanet.com/model/isa",
                            Object = "http://www.networkedplanet.com/types/person"
                        };

            var sid = Guid.NewGuid().ToString();
            var store = StoreManager.CreateStore(Configuration.StoreLocation + "\\" + sid);

            store.InsertTriple(t);
            store.Commit(Guid.Empty);

            store = StoreManager.OpenStore(Configuration.StoreLocation + "\\" + sid, true);
            var triples = store.GetResourceStatements("http://www.networkedplanet.com/people/gra").ToList();
            Assert.AreEqual(1, triples.Count());
            Assert.AreEqual("http://www.networkedplanet.com/people/gra", triples[0].Subject);
            Assert.AreEqual("http://www.networkedplanet.com/model/isa", triples[0].Predicate);
            Assert.AreEqual("http://www.networkedplanet.com/types/person", triples[0].Object);
            Assert.IsFalse(triples[0].IsLiteral);
        }
Esempio n. 21
0
        public virtual void TestGetCommitPoint()
        {
            var testTimestamps = new List<DateTime> { DateTime.UtcNow };
            Thread.Sleep(100);

            var sid = Guid.NewGuid().ToString();
            var store = StoreManager.CreateStore(Configuration.StoreLocation + "\\" + sid);
            Assert.AreEqual(1, store.GetCommitPoints().Count());

            testTimestamps.Add(DateTime.UtcNow);
            Thread.Sleep(100);

            var t = new Triple
                        {
                            Subject = "http://www.networkedplanet.com/people/10",
                            Predicate = "http://www.networkedplanet.com/model/isa",
                            Object = "bob",
                            DataType = RdfDatatypes.String,
                            IsLiteral = true
                        };
            store.InsertTriple(t);
            store.Commit(Guid.Empty);
            Assert.AreEqual(2, store.GetCommitPoints().Count());

            testTimestamps.Add(DateTime.UtcNow);
            Thread.Sleep(100);

            t = new Triple
                    {
                        Subject = "http://www.networkedplanet.com/people/11",
                        Predicate = "http://www.networkedplanet.com/model/isa",
                        Object = "bob",
                        DataType = RdfDatatypes.String,
                        IsLiteral = true
                    };
            store.InsertTriple(t);
            store.Commit(Guid.Empty);
            Assert.AreEqual(3, store.GetCommitPoints().Count());

            testTimestamps.Add(DateTime.UtcNow);
            Thread.Sleep(100);

            var allCommitPoints = store.GetCommitPoints().ToList();
            var client = BrightstarService.GetEmbeddedClient(Configuration.StoreLocation);
            var commitPoint = client.GetCommitPoint(sid, testTimestamps[0]);
            Assert.IsNull(commitPoint);

            commitPoint = client.GetCommitPoint(sid, testTimestamps[1]);
            Assert.IsNotNull(commitPoint);
            Assert.AreEqual(allCommitPoints[2].LocationOffset, commitPoint.Id);

            commitPoint = client.GetCommitPoint(sid, testTimestamps[2]);
            Assert.IsNotNull(commitPoint);
            Assert.AreEqual(allCommitPoints[1].LocationOffset, commitPoint.Id);

            commitPoint = client.GetCommitPoint(sid, testTimestamps[3]);
            Assert.IsNotNull(commitPoint);
            Assert.AreEqual(allCommitPoints[0].LocationOffset, commitPoint.Id);
            Assert.AreEqual(allCommitPoints[0].JobId, commitPoint.JobId);
            Assert.AreEqual(allCommitPoints[0].CommitTime, commitPoint.CommitTime);
            Assert.AreEqual(sid, commitPoint.StoreName);
        }
Esempio n. 22
0
        public virtual void TestRevertToCommitPoint()
        {
            // create 3 commit points
            var sid = Guid.NewGuid().ToString();
            using (var store = StoreManager.CreateStore(Configuration.StoreLocation + "\\" + sid))
            {

                Assert.AreEqual(1, store.GetCommitPoints().Count());

                var t = new Triple
                            {
                                Subject = "http://www.networkedplanet.com/people/10",
                                Predicate = "http://www.networkedplanet.com/model/isa",
                                Object = "bob",
                                DataType = RdfDatatypes.String,
                                IsLiteral = true
                            };
                store.InsertTriple(t);
                store.Commit(Guid.Empty);

                Assert.AreEqual(2, store.GetCommitPoints().Count());

                t = new Triple
                        {
                            Subject = "http://www.networkedplanet.com/people/11",
                            Predicate = "http://www.networkedplanet.com/model/isa",
                            Object = "bob",
                            DataType = RdfDatatypes.String,
                            IsLiteral = true
                        };
                store.InsertTriple(t);
                store.Commit(Guid.Empty);

                var triples = store.Match(null, null, null, graph: Constants.DefaultGraphUri);
                Assert.AreEqual(2, triples.Count());

                Assert.AreEqual(3, store.GetCommitPoints().Count());

                // get all the commitpoints
                var commitPoints = store.GetCommitPoints().ToList();

                // the last returned commit point was the first to be written.
                var firstCommitPoint = commitPoints.Last();

                // now revert to the 1st commit point where there should be no data.
                store.RevertToCommitPoint(firstCommitPoint);
            }
            using (var store = StoreManager.OpenStore(Configuration.StoreLocation + "\\" + sid))
            {
                var triples = store.Match(null, null, null, graph: Constants.DefaultGraphUri);
                Assert.AreEqual(0, triples.Count());

                // there should be 4 commitpoints now.
                Assert.AreEqual(4, store.GetCommitPoints().Count());
            }
        }
Esempio n. 23
0
        /// <summary>
        /// Sets the property of this object to the specified data object
        /// </summary>
        /// <param name="type">The type of the property to set</param>
        /// <param name="value">The new value of the property</param>
        /// <returns>This IDataObject to allow chained calls</returns>
        /// <remarks>This method will remove all existing properties of type <paramref name="type"/> from this data object
        /// and add a single replacement property of the same type with <paramref name="value"/> as the property value.</remarks>
        private IDataObject SetRelatedObject(IDataObject type, IDataObject value)
        {
            CheckLoaded();

            // create a new value triple
            var triple = new Triple
                             {
                                 Graph = Constants.DefaultGraphUri,
                                 IsLiteral = false,
                                 Object = value.Identity,
                                 Predicate = type.Identity,
                                 Subject = Identity
                             };

            // use common method for updating local state and the txn
            SetTriple(triple);

            // return this DataObject
            return this;
        }
Esempio n. 24
0
        public virtual void TestMatchTriplesWithNulls()
        {
            var sid = Guid.NewGuid().ToString();
            var t1 = new Triple
            {
                Subject = "http://www.networkedplanet.com/people/10",
                Predicate = "http://www.networkedplanet.com/model/isa",
                Object = "bob",
                DataType = RdfDatatypes.String,
                IsLiteral = true
            };
            var t2 = new Triple
            {
                Subject = "http://www.networkedplanet.com/people/10",
                Predicate = "http://www.networkedplanet.com/model/isa",
                Object = "kal",
                DataType = RdfDatatypes.String,
                IsLiteral = true
            };
            using (var store = StoreManager.CreateStore(Configuration.StoreLocation + "\\" + sid))
            {
                store.InsertTriple(t1);
                store.InsertTriple(t2);

                store.Commit(Guid.Empty);
            }
            // match triple
            using (var store = StoreManager.OpenStore(Configuration.StoreLocation + "\\" + sid))
            {
                var matches = store.Match(t1.Subject, t1.Predicate, t1.Object, true, RdfDatatypes.String, null,
                                          Constants.DefaultGraphUri);
                Assert.AreEqual(1, matches.Count());
                matches = store.Match(t1.Subject, t1.Predicate, t1.Object, true, RdfDatatypes.String, null, graphs: null);
                Assert.AreEqual(1, matches.Count(), "Failed to match triple using null graphs array");
            }

            using (var store = StoreManager.OpenStore(Configuration.StoreLocation + "\\" + sid))
            {
                var triples = store.GetResourceStatements("http://www.networkedplanet.com/people/10");
                Assert.AreEqual(2, triples.Count());
            }
        }
Esempio n. 25
0
 /// <summary>
 /// Maps the xsd data type to a .NET type for literal values or creates / looks up a DataObject for 
 /// resources. BNodes get mapped to DataObjects.
 /// </summary>
 /// <param name="triple"></param>
 /// <returns></returns>
 private object CreateTypedObject(Triple triple)
 {
     if (triple.IsLiteral)
     {
         object retValue;
         if (RdfDatatypes.TryParseLiteralString(triple.Object, triple.DataType, out retValue))
         {
             return retValue;
         }
         return triple.Object;
     }
     return _store.MakeDataObject(triple.Object);
 }
Esempio n. 26
0
        public virtual void TestInsertAndRetrieveXmlLiteral()
        {
            var sid = Guid.NewGuid().ToString();
            var doc = new XDocument(
                new XComment("This is a comment"),
                new XElement("Root",
                             new XElement("Child1", "data1"),
                             new XElement("Child2", "data2"),
                             new XElement("Child3", "data3"),
                             new XElement("Child2", "data4"),
                             new XElement("Info5", "info5"),
                             new XElement("Info6", "info6"),
                             new XElement("Info7", "info7"),
                             new XElement("Info8", "info8")
                    )
                );

            var t = new Triple
                        {
                            Subject = "http://www.networkedplanet.com/people/10",
                            Predicate = "http://www.networkedplanet.com/model/isa",
                            Object = doc.ToString(),
                            DataType = RdfDatatypes.XmlLiteral,
                            IsLiteral = true
                        };
            using (var store = StoreManager.CreateStore(Configuration.StoreLocation + "\\" + sid))
            {
                store.InsertTriple(t);

                store.Commit(Guid.Empty);
            }

            // match triple
            using (var store = StoreManager.OpenStore(Configuration.StoreLocation + "\\" + sid))
            {
                var matches = store.Match(t.Subject, t.Predicate, t.Object, true,
                                          RdfDatatypes.XmlLiteral, null, Constants.DefaultGraphUri)
                    .ToList();
                Assert.AreEqual(1, matches.Count());

                // check document is ok.
                var outDoc = XDocument.Parse(matches.First().Object);

                Assert.IsNotNull(outDoc);
                Assert.IsNotNull(outDoc.Root);
                Assert.AreEqual(8, outDoc.Root.Elements().Count());
            }
        }
Esempio n. 27
0
        private void SetTriple(Triple triple)
        {
            // see if there are any triples for this property
            bool haveMatch = _triples.Any(t => t.Predicate.Equals(triple.Predicate));
            if (haveMatch)
            {
                // remove all triples in current state that match the predicate
                _triples.RemoveAll(t => t.Predicate.Equals(triple.Predicate));

                // remove any existing property triple in the add triples collection
                _store.AddTriples.RemoveAll(t => t.Subject.Equals(triple.Subject) && t.Predicate.Equals(triple.Predicate));
            }

            // Because this is a set, we use a wildcard to delete any existing properties with the same predicate
            if (!_isNew && !_store.DeletePatterns.Any(t=>t.Subject.Equals(triple.Subject) && t.Predicate.Equals(triple.Predicate) && t.Object.Equals(Constants.WildcardUri)))
            {
                if (_store.DataSetGraphUris == null)
                {
                    // Wildcard delete from all graphs
                    _store.DeletePatterns.Add(new Triple
                        {
                            Subject = triple.Subject,
                            Predicate = triple.Predicate,
                            Object = Constants.WildcardUri
                        });
                }
                else
                {
                    // Targeted delete only from the dataset graphs and the update graph
                    _store.DeletePatterns.Add(
                        new Triple
                        {
                            Subject = triple.Subject,
                            Predicate = triple.Predicate,
                            Object = Constants.WildcardUri,
                            Graph = _store.UpdateGraphUri
                        });
                    foreach (var g in _store.DataSetGraphUris)
                    {
                        _store.DeletePatterns.Add(
                            new Triple
                            {
                                Subject = triple.Subject,
                                Predicate = triple.Predicate,
                                Object = Constants.WildcardUri,
                                Graph = g
                            });
                    }
                }
            }

            // add new triple to current triples
            _triples.Add(triple);

            // add new triple to txn add triples
            _store.AddTriples.Add(triple);
        }
Esempio n. 28
0
        public virtual void TestInsertAndRetrieveLiteralObjectTriple()
        {
            var sid = Guid.NewGuid().ToString();
            var t = new Triple
            {
                Subject = "http://www.networkedplanet.com/people/10",
                Predicate = "http://www.networkedplanet.com/model/isa",
                Object = "graham",
                LangCode = "en",
                IsLiteral = true
            };
            using (var store = StoreManager.CreateStore(Configuration.StoreLocation + "\\" + sid))
            {
                store.InsertTriple(t);
                store.Commit(Guid.Empty);
            }

            // match triple
            using (var store = StoreManager.OpenStore(Configuration.StoreLocation + "\\" + sid))
            {
                var matches = store.Match(t.Subject, t.Predicate, t.Object, true,
                                          RdfDatatypes.PlainLiteral, "en", Constants.DefaultGraphUri).ToList();
                Assert.AreEqual(1, matches.Count());
                var tout = matches.First();
                Assert.AreEqual("en", tout.LangCode);
                Assert.AreEqual(RdfDatatypes.PlainLiteral, tout.DataType);
            }
        }
Esempio n. 29
0
        private void AddDataObjectProperty(IDataObject type, IDataObject value)
        {
            CheckLoaded();

            var triple = new Triple
                             {
                                 Graph = _store.UpdateGraphUri,
                                 IsLiteral = false,
                                 Object = value.Identity,
                                 Predicate = type.Identity,
                                 Subject = Identity
                             };

            // add to DataObject state triples
            _triples.Add(triple);

            // add to txn
            _store.AddTriples.Add(triple);
        }
Esempio n. 30
0
        public virtual void TestInsertAndRetrieveTripleWithSameLiteralAndDifferentDataType()
        {
            var sid = Guid.NewGuid().ToString();
            var store = StoreManager.CreateStore(Configuration.StoreLocation + "\\" + sid);

            var t = new Triple
                        {
                            Subject = "http://www.networkedplanet.com/people/10",
                            Predicate = "http://www.networkedplanet.com/model/isa",
                            Object = "24/03/76",
                            DataType = RdfDatatypes.String,
                            IsLiteral = true
                        };
            store.InsertTriple(t);

            t = new Triple
                    {
                        Subject = "http://www.networkedplanet.com/people/10",
                        Predicate = "http://www.networkedplanet.com/model/isa",
                        Object = "24/03/76",
                        DataType = RdfDatatypes.DateTime,
                        IsLiteral = true
                    };
            store.InsertTriple(t);
            store.Commit(Guid.Empty);

            // match triple
            store = StoreManager.OpenStore(Configuration.StoreLocation + "\\" + sid, true);

            var matches = store.Match(t.Subject, t.Predicate, t.Object, true,
                                      RdfDatatypes.DateTime, null, Constants.DefaultGraphUri);
            Assert.AreEqual(1, matches.Count());
            matches = store.Match(t.Subject, t.Predicate, t.Object, true,
                                  RdfDatatypes.String, null, Constants.DefaultGraphUri);
            Assert.AreEqual(1, matches.Count());
        }
Esempio n. 31
0
 /// <summary>
 /// Adds one or more delete patterns for the specified base triple
 /// </summary>
 /// <param name="baseDeleteTriple">The base triple match</param>
 /// <remarks>This method ensures that delete patterns target only the
 /// graphs that are read from and the update graph. 
 /// If the store has a defined data set, then a delete pattern is created for
 /// each graph in the data set plus the update graph. Otherwise a single delete pattern
 /// is created with a wildcard graph specifier.</remarks>
 private void AddDeleteTriples(Triple baseDeleteTriple)
 {
     if (_store.DataSetGraphUris == null)
     {
         // Add a pattern to remove matching triple from all graphs
         _store.DeletePatterns.Add(new Triple
         {
             Subject = baseDeleteTriple.Subject,
             Predicate = baseDeleteTriple.Predicate,
             Object = baseDeleteTriple.Object,
             IsLiteral = baseDeleteTriple.IsLiteral,
             DataType = baseDeleteTriple.DataType,
             LangCode = baseDeleteTriple.LangCode,
             Graph = Constants.WildcardUri
         });
     }
     else
     {
         // Add patterns to remove matching triple from update graph and data set graphs
         _store.DeletePatterns.Add(new Triple
         {
             Subject = baseDeleteTriple.Subject,
             Predicate = baseDeleteTriple.Predicate,
             Object = baseDeleteTriple.Object,
             IsLiteral = baseDeleteTriple.IsLiteral,
             DataType = baseDeleteTriple.DataType,
             LangCode = baseDeleteTriple.LangCode,
             Graph = _store.UpdateGraphUri
         });
         foreach (var g in _store.DataSetGraphUris)
         {
             _store.DeletePatterns.Add(new Triple
             {
                 Subject = baseDeleteTriple.Subject,
                 Predicate = baseDeleteTriple.Predicate,
                 Object = baseDeleteTriple.Object,
                 IsLiteral = baseDeleteTriple.IsLiteral,
                 DataType = baseDeleteTriple.DataType,
                 LangCode = baseDeleteTriple.LangCode,
                 Graph = g
             });
         }
     }
 }
Esempio n. 32
0
        public virtual void TestDeleteTriples()
        {
            var sid = Guid.NewGuid().ToString();
            var t1 = new Triple
                         {
                             Subject = "http://www.networkedplanet.com/people/10",
                             Predicate = "http://www.networkedplanet.com/model/isa",
                             Object = "bob",
                             IsLiteral = true
                         };
            var t2 = new Triple
                         {
                             Subject = "http://www.networkedplanet.com/people/10",
                             Predicate = "http://www.networkedplanet.com/model/isa",
                             Object = "kal",
                             IsLiteral = true
                         };

            using (var store = StoreManager.CreateStore(Configuration.StoreLocation + "\\" + sid))
            {
                store.InsertTriple(t1);
                store.InsertTriple(t2);
                store.Commit(Guid.Empty);
            }
            // delete triple
            using (var store = StoreManager.OpenStore(Configuration.StoreLocation + "\\" + sid))
            {
                store.DeleteTriple(t2);
                store.Commit(Guid.Empty);
            }
            using (var store = StoreManager.OpenStore(Configuration.StoreLocation + "\\" + sid))
            {
                var triples = store.GetResourceStatements("http://www.networkedplanet.com/people/10");
                Assert.AreEqual(1, triples.Count());
            }
        }
Esempio n. 33
0
        /// <summary>
        /// Delete triple from store
        /// </summary>
        /// <param name="triple"></param>
        public void DeleteTriple(Triple triple)
        {
            int gid;
            if (!_graphIndex.TryFindGraphId(triple.Graph, out gid))
            {
                // No graph match, so no-op
                return;
            }

            ulong sid = FindResourceId(triple.Subject);
            if (sid == StoreConstants.NullUlong)
            {
                // No subject match, so no-op
                return;
            }

            ulong pid = FindResourceId(triple.Predicate);
            if (pid == StoreConstants.NullUlong)
            {
                // No predicate match, so no-op
                return;
            }

            string dtStr = null;
            if (triple.DataType != null)
            {
                dtStr = triple.DataType;
            }
            else if (triple.DataType == null && triple.IsLiteral)
            {
                dtStr = RdfDatatypes.PlainLiteral;
            }
            string lc = triple.LangCode == null ? null : triple.LangCode.ToLowerInvariant();
            ulong oid = FindResourceId(triple.Object, triple.IsLiteral, dtStr, lc);
            if(oid == StoreConstants.NullUlong)
            {
                // No object match, so no-op
                return;
            }
            var txnId = _currentTxnId + 1;
            _subjectRelatedResourceIndex.DeleteRelatedResource(txnId, sid, pid, oid, gid, null);
            _objectRelatedResourceIndex.DeleteRelatedResource(txnId, oid, pid, sid, gid, null);
        }
Esempio n. 34
0
        public virtual void TestFetchMultipleResourceStatements()
        {
            var sid = Guid.NewGuid().ToString();
            var store = StoreManager.CreateStore(Configuration.StoreLocation + "\\" + sid);

            for (int i = 0; i < 1000; i++)
            {
                var t = new Triple
                            {
                                Subject = "http://www.networkedplanet.com/people/gra",
                                Predicate = "http://www.networkedplanet.com/model/hasSkill",
                                Object = "http://www.networkedplanet.com/skills/" + i
                            };
                store.InsertTriple(t);
            }

            store.Commit(Guid.Empty);

            store = StoreManager.OpenStore(Configuration.StoreLocation + "\\" + sid, true);

            var triples = store.GetResourceStatements("http://www.networkedplanet.com/people/gra");

            Assert.AreEqual(1000, triples.Count());
        }
        private IEnumerable<Triple> GetTriplesForDataObject(string identity)
        {
            Stream sparqlResultStream = Client.ExecuteQuery(string.Format(QueryTemplate, identity), DataSetGraphUris);
            XDocument data = XDocument.Load(sparqlResultStream);

            foreach (var sparqlResultRow in data.SparqlResultRows())
            {
                // create new triple
                var triple = new Triple
                {
                    Subject = identity,
                    Graph = sparqlResultRow.GetColumnValue("g").ToString(),
                    Predicate = sparqlResultRow.GetColumnValue("p").ToString()
                };

                if (sparqlResultRow.IsLiteral("o"))
                {
                    var dt = sparqlResultRow.GetLiteralDatatype("o");
                    var langCode = sparqlResultRow.GetLiteralLanguageCode("o");
                    triple.DataType = dt ?? RdfDatatypes.String;
                    if (langCode != null)
                    {
                        triple.LangCode = langCode;
                    }
                    triple.Object = sparqlResultRow.GetColumnValue("o").ToString().Trim();
                    triple.IsLiteral = true;
                }
                else
                {
                    triple.Object = sparqlResultRow.GetColumnValue("o").ToString().Trim();
                }

                yield return triple;
            }
        }
Esempio n. 36
0
        public virtual void TestSparql1()
        {
            var sid = Guid.NewGuid().ToString();
            using (var store = StoreManager.CreateStore(Configuration.StoreLocation + "\\" + sid))
            {

                var t = new Triple
                            {
                                Subject = "http://www.networkedplanet.com/people/10",
                                Predicate = "http://www.networkedplanet.com/model/isa",
                                Object = "bob",
                                DataType = RdfDatatypes.String,
                                IsLiteral = true
                            };
                store.InsertTriple(t);
                t = new Triple
                        {
                            Subject = "http://www.networkedplanet.com/people/10",
                            Predicate = "http://www.networkedplanet.com/model/worksfor",
                            Object = "http://www.networkedplanet.com/np",
                        };
                store.InsertTriple(t);
                store.Commit(Guid.Empty);
            }
            // match triple
            using (var store = StoreManager.OpenStore(Configuration.StoreLocation + "\\" + sid))
            {
                const string query =
                    "select ?t where { ?t <http://www.networkedplanet.com/model/worksfor> <http://www.networkedplanet.com/np> }";
                var result = store.ExecuteSparqlQuery(query, SparqlResultsFormat.Xml);
                Assert.IsNotNull(result);

                var resultDoc = XDocument.Parse(result);
                var rows = resultDoc.Descendants(SparqlResult + "result").ToList();
                Assert.AreEqual(1, rows.Count());

                var uriBinding = rows.Descendants(SparqlResult + "uri").FirstOrDefault();
                Assert.IsNotNull(uriBinding);
                Assert.AreEqual("http://www.networkedplanet.com/people/10", uriBinding.Value);
            }
        }