Ejemplo n.º 1
0
        public void TestDelete()
        {
            const string DBPath = "test3.db";

            if (File.Exists(DBPath))
            {
                File.Delete(DBPath);
            }

            using (var provider = new QueryMetadataProvider())
            {
                // Create database and fill it
                provider.Create(DBPath);

                foreach (MetadataKey key in keys)
                {
                    provider.AddKey(key);
                }

                for (int i = 0; i < 4; ++i)
                {
                    provider.Write(new ObjectMetadata(urls[0], keys[i], values1[i]));
                    provider.Write(new ObjectMetadata(urls[1], keys[i], values2[i]));
                }

                for (int i = 0; i < 4; ++i)
                {
                    bool result = provider.Delete(new ObjectMetadata(urls[0], keys[i], values1[i]));
                    Assert.True(result);
                    if (i != 3)
                    {
                        IObjectMetadata data = provider.Fetch(urls[1], keys[i]);
                        result = provider.Delete(data);
                        Assert.True(result);
                    }
                }

                IEnumerable <IObjectMetadata> metadata = provider.FetchAll();
                Assert.NotNull(metadata);
                Assert.AreEqual(metadata.Count(), 1);
                IObjectMetadata fetchedData = metadata.First();
                Assert.NotNull(fetchedData);
                Assert.AreEqual(fetchedData.Key, keys[3]);
                Assert.AreEqual(fetchedData.Value, values2[3]);
            }

            using (var provider = new QueryMetadataProvider())
            {
                provider.Open(DBPath, false);

                IObjectMetadata data   = new ObjectMetadata(urls[1], keys[3]);
                bool            result = provider.Delete(data);
                Assert.True(result);
                IEnumerable <IObjectMetadata> metadata = provider.FetchAll();
                Assert.NotNull(metadata);
                Assert.AreEqual(metadata.Count(), 0);
            }
        }
Ejemplo n.º 2
0
        public bool Delete(IObjectMetadata data)
        {
            long keyId, objectUrlId;

            keyIds.TryGetValue(data.Key, out keyId);
            objectUrlIds.TryGetValue(FormatUrl(data.ObjectUrl), out objectUrlId);
            keyId       = keyId == 0 ? GetKeyId(data.Key) : keyId;
            objectUrlId = objectUrlId == 0 ? GetOrCreateObjectUrlId(data.ObjectUrl) : objectUrlId;

            string query = String.Format(@"DELETE FROM `Metadata` WHERE `Metadata`.`ObjectUrlId` = '{0}' AND `Metadata`.`KeyId` = '{1}'", objectUrlId, keyId);

            return(ExecuteNonQuery(query) == 1);
        }
Ejemplo n.º 3
0
        public void TestCreation()
        {
            const string DBPath = "test1.db";

            if (File.Exists(DBPath))
            {
                File.Delete(DBPath);
            }

            using (var provider = new QueryMetadataProvider())
            {
                const string TestKey   = "TestKey";
                const string TestUrl   = "a/test/url";
                const string TestValue = "test value";

                // Create database
                bool result = provider.Create(DBPath);
                Assert.True(result);
                // Add a key and retrieve it
                result = provider.AddKey(new MetadataKey(TestKey, MetadataKey.DatabaseType.String));
                Assert.True(result);
                IEnumerable <MetadataKey> fetchedKeys = provider.FetchAllKeys();
                Assert.NotNull(fetchedKeys);
                Assert.AreEqual(fetchedKeys.Count(), 1);
                MetadataKey key = fetchedKeys.First();
                Assert.NotNull(key);
                Assert.AreEqual(key.Name, TestKey);
                Assert.AreEqual(key.Type, MetadataKey.DatabaseType.String);

                // Add a metadata and retrieve it
                var stringMetadata = new ObjectMetadata <string>(TestUrl, key, TestValue);
                result = provider.Write(stringMetadata);
                Assert.True(result);

                IEnumerable <string> fetchedUrls = provider.FetchAllObjectUrls();
                Assert.NotNull(fetchedUrls);
                Assert.AreEqual(fetchedUrls.Count(), 1);
                string url = fetchedUrls.First();
                Assert.AreEqual(url, TestUrl);

                IEnumerable <IObjectMetadata> metadata = provider.Fetch(url);
                Assert.NotNull(metadata);
                Assert.AreEqual(metadata.Count(), 1);
                IObjectMetadata metadatum = metadata.First();
                Assert.AreEqual(metadatum.Key, key);
                Assert.AreEqual(metadatum.ObjectUrl, TestUrl);
                Assert.AreEqual(metadatum.Value, TestValue);

                provider.Close();
            }
        }
Ejemplo n.º 4
0
        public bool Write(IObjectMetadata data)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            long keyId, objectUrlId;

            keyIds.TryGetValue(data.Key, out keyId);
            objectUrlIds.TryGetValue(FormatUrl(data.ObjectUrl), out objectUrlId);

            IObjectMetadata previousData;

            if (keyId != 0 && objectUrlId != 0)
            {
                previousData = Fetch(objectUrlId, keyId);
            }
            else
            {
                previousData = Fetch(data);
            }

            // Insert
            if (previousData == null)
            {
                keyId       = keyId == 0 ? GetKeyId(data.Key) : keyId;
                objectUrlId = objectUrlId == 0 ? GetOrCreateObjectUrlId(data.ObjectUrl) : objectUrlId;

                if (keyId == 0)
                {
                    throw new InvalidOperationException(String.Format("The key {0} does not exist in database.", data.Key));
                }

                return(InsertMetadata(objectUrlId, keyId, data.Value.ToString()));
            }

            // Update
            return(UpdateMetadata(objectUrlId, keyId, data.Value.ToString()));
        }
Ejemplo n.º 5
0
 public Task <IObjectMetadata> FetchAsync(IObjectMetadata data)
 {
     return(Task.Run(() => Fetch(data.ObjectUrl, data.Key)));
 }
Ejemplo n.º 6
0
 public IObjectMetadata Fetch(IObjectMetadata data)
 {
     return(Fetch(data.ObjectUrl, data.Key));
 }
Ejemplo n.º 7
0
        public bool Delete(IObjectMetadata data)
        {
            long keyId, objectUrlId;
            keyIds.TryGetValue(data.Key, out keyId);
            objectUrlIds.TryGetValue(FormatUrl(data.ObjectUrl), out objectUrlId);
            keyId = keyId == 0 ? GetKeyId(data.Key) : keyId;
            objectUrlId = objectUrlId == 0 ? GetOrCreateObjectUrlId(data.ObjectUrl) : objectUrlId;

            string query = String.Format(@"DELETE FROM `Metadata` WHERE `Metadata`.`ObjectUrlId` = '{0}' AND `Metadata`.`KeyId` = '{1}'", objectUrlId, keyId);
            return ExecuteNonQuery(query) == 1;
        }
Ejemplo n.º 8
0
        public bool Write(IObjectMetadata data)
        {
            if (data == null) throw new ArgumentNullException("data");

            long keyId, objectUrlId;
            keyIds.TryGetValue(data.Key, out keyId);
            objectUrlIds.TryGetValue(FormatUrl(data.ObjectUrl), out objectUrlId);

            IObjectMetadata previousData;
            if (keyId != 0 && objectUrlId != 0)
            {
                previousData = Fetch(objectUrlId, keyId);
            }
            else
            {
                previousData = Fetch(data);
            }

            // Insert
            if (previousData == null)
            {
                keyId = keyId == 0 ? GetKeyId(data.Key) : keyId;
                objectUrlId = objectUrlId == 0 ? GetOrCreateObjectUrlId(data.ObjectUrl) : objectUrlId;

                if (keyId == 0)
                    throw new InvalidOperationException(String.Format("The key {0} does not exist in database.", data.Key));

                return InsertMetadata(objectUrlId, keyId, data.Value.ToString());
            }

            // Update
            return UpdateMetadata(objectUrlId, keyId, data.Value.ToString());
        }
Ejemplo n.º 9
0
 public Task<IObjectMetadata> FetchAsync(IObjectMetadata data)
 {
     return Task.Run(() => Fetch(data.ObjectUrl, data.Key));
 }
Ejemplo n.º 10
0
 public IObjectMetadata Fetch(IObjectMetadata data)
 {
     return Fetch(data.ObjectUrl, data.Key);
 }
Ejemplo n.º 11
0
        public void TestFetch()
        {
            const string DBPath = "test2.db";

            if (File.Exists(DBPath))
            {
                File.Delete(DBPath);
            }

            using (var provider = new QueryMetadataProvider())
            {
                // Create database and fill it
                provider.Create(DBPath);

                foreach (MetadataKey key in keys)
                {
                    provider.AddKey(key);
                }

                for (int i = 0; i < 4; ++i)
                {
                    provider.Write(new ObjectMetadata(urls[0], keys[i], values1[i]));
                    provider.Write(new ObjectMetadata(urls[1], keys[i], values2[i]));
                }

                // Fetch by url
                IEnumerable <IObjectMetadata> result = provider.Fetch(urls[0]);
                Assert.NotNull(result);
                Assert.AreEqual(result.Count(), 4);
                for (int i = 0; i < 4; ++i)
                {
                    IObjectMetadata obj = result.Skip(i).First();
                    Assert.AreEqual(obj.ObjectUrl, urls[0]);
                    Assert.AreEqual(obj.Key, keys[i]);
                    Assert.AreEqual(obj.Value, values1[i]);
                }
                // Fetch by key
                for (int j = 0; j < 4; ++j)
                {
                    result = provider.Fetch(keys[j]);
                    Assert.NotNull(result);
                    Assert.AreEqual(result.Count(), 2);
                    for (int i = 0; i < 2; ++i)
                    {
                        IObjectMetadata obj = result.Skip(i).First();
                        Assert.AreEqual(obj.ObjectUrl, urls[i]);
                        Assert.AreEqual(obj.Key, keys[j]);
                        Assert.AreEqual(obj.Value, i == 0 ? values1[j] : values2[j]);
                    }
                }
                // Fetch by url and key
                for (int j = 0; j < 4; ++j)
                {
                    for (int i = 0; i < 2; ++i)
                    {
                        IObjectMetadata obj = provider.Fetch(urls[i], keys[j]);
                        Assert.NotNull(obj);
                        Assert.AreEqual(obj.ObjectUrl, urls[i]);
                        Assert.AreEqual(obj.Key, keys[j]);
                        Assert.AreEqual(obj.Value, i == 0 ? values1[j] : values2[j]);
                    }
                }
                provider.Close();
            }
        }