//----< process children query using queryPredicate >----------------------------------- public bool processChildrenQuery <Key, Value, Data>(Func <Key, bool> queryPredicate, out List <Key> keyCollection, Key searchKey, DBEngine <Key, Value> db) { keyCollection = new List <Key>(); Value value; if (db.Keys().Contains(searchKey)) { db.getValue(searchKey, out value); DBElement <Key, Data> elem = value as DBElement <Key, Data>; foreach (Key child in elem.children) { if (queryPredicate(child)) { keyCollection.Add(child); } } } if (keyCollection.Count() > 0) { return(true); } return(false); }
//----< Public Constructor >----------------------------------------------------- public DBFactory(DBEngine <Key, Value> db) { dbStore = new Dictionary <Key, Value>(); foreach (Key key in db.Keys()) { Value value; db.getValue(key, out value); dbStore[key] = value; } }
//----< write simple db elements out to Console >------------------ public static void show <Key, Value, Data>(this DBEngine <Key, Value> db) { foreach (Key key in db.Keys()) { Value value; db.getValue(key, out value); DBElement <Key, Data> elem = value as DBElement <Key, Data>; Write("\n\n -- key = {0} --", key); Write(elem.showElement()); } }
//----< build queryPredicate for querying children >------------------------------------ /* * Query returns true if query(key) condition is satisfied. * In this example the query is checking to see if the query * parameter, the captured string, test, is a substring of * the database element referenced by key. */ public Func <Key, bool> queryChildren <Key, Value, Data>(DBEngine <Key, Value> db) { Func <Key, bool> queryPredicate = (Key key) => { if (db.Keys().Contains(key)) { return(true); } return(false); }; return(queryPredicate); }
//----< Convert Enumerable DB to XML file format >--------------------------------- public static XDocument PersistToXML <Key, Value, Data, T>(this DBEngine <Key, Value> dbStore) where Data : IEnumerable <T> { XDocument xDocument = new XDocument(); xDocument.Declaration = new XDeclaration("1.0", "utf-8", "yes"); xDocument.Add(new XComment("Persisting DB to XML at " + DateTime.Now.ToString())); XElement root = new XElement("NoSqlDb"); root.Add(new XElement("KeyType", typeof(Key).ToString())); root.Add(new XElement("PayloadType", typeof(Data).ToString())); foreach (Key key in dbStore.Keys()) { XElement dbEntry = new XElement("DBEntry"); root.Add(dbEntry); dbEntry.Add(new XElement("Key", key.ToString())); Value element; dbStore.getValue(key, out element); DBElement <Key, Data> dbElement = element as DBElement <Key, Data>; XElement xmlElement = new XElement("element"); xmlElement.Add(new XElement("name", dbElement.name)); xmlElement.Add(new XElement("descr", dbElement.descr)); xmlElement.Add(new XElement("timestamp", dbElement.timeStamp)); XElement children = new XElement("children"); if (dbElement.children.Count > 0) { foreach (Key child in dbElement.children) { children.Add(new XElement("key", child.ToString())); } } xmlElement.Add(children); XElement payload = new XElement("payload"); Data data = dbElement.payload; foreach (T item in data) { payload.Add(new XElement("item", item.ToString())); } xmlElement.Add(payload); dbEntry.Add(xmlElement); } xDocument.Add(root); return(xDocument); }
//----< Query for value of a given key >------------------------------------------------ public static Value queryValue <Key, Value, Data>(Key key, DBEngine <Key, Value> db) { Value value = default(Value); if (db.Keys().Contains(key)) { db.getValue(key, out value); DBElement <Key, Data> elem = value as DBElement <Key, Data>; return(value); } else { "Key doesn't exist!".error(); return(value); } }
//----< process query using queryPredicate >--------------------------------------------- public bool processQuery <Key, Value>(Func <Key, bool> queryPredicate, out List <Key> keyCollection, DBEngine <Key, Value> db) { /* * step through all the keys in the db to see if * the queryPredicate is true for one or more keys. */ keyCollection = new List <Key>(); foreach (Key key in db.Keys()) { if (queryPredicate(key)) { keyCollection.Add(key); } } if (keyCollection.Count() > 0) { return(true); } return(false); }
//----< Convert primitive DB to XML format >--------------------------------------- public static XDocument ToXML <Key, Value, Data>(this DBEngine <Key, Value> dbStore) { XDocument xDocument = new XDocument(); XElement root = new XElement("NoSqlDb"); foreach (Key key in dbStore.Keys()) { XElement dbEntry = new XElement("DBEntry"); root.Add(dbEntry); dbEntry.Add(new XElement("Key", key.ToString())); Value element; dbStore.getValue(key, out element); DBElement <Key, Data> dbElement = element as DBElement <Key, Data>; XElement xmlElement = new XElement("element"); xmlElement.Add(new XElement("name", dbElement.name)); xmlElement.Add(new XElement("descr", dbElement.descr)); xmlElement.Add(new XElement("timestamp", dbElement.timeStamp)); XElement children = new XElement("children"); if (dbElement.children.Count > 0) { foreach (Key child in dbElement.children) { children.Add(new XElement("key", child.ToString())); } } xmlElement.Add(children); XElement payload = new XElement("payload"); payload.Add(new XElement("item", dbElement.payload.ToString())); xmlElement.Add(payload); dbEntry.Add(xmlElement); } xDocument.Add(root); return(xDocument); }