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); } }
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); }
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(); } }
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())); }
public Task <IObjectMetadata> FetchAsync(IObjectMetadata data) { return(Task.Run(() => Fetch(data.ObjectUrl, data.Key))); }
public IObjectMetadata Fetch(IObjectMetadata data) { return(Fetch(data.ObjectUrl, data.Key)); }
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; }
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()); }
public Task<IObjectMetadata> FetchAsync(IObjectMetadata data) { return Task.Run(() => Fetch(data.ObjectUrl, data.Key)); }
public IObjectMetadata Fetch(IObjectMetadata data) { return Fetch(data.ObjectUrl, data.Key); }
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(); } }