//----<get value for key>------------------- public bool getValueForKey(Key key, out DBElement <Key, Data> dbElement) { DBElement <Key, Data> element; bool res = db.getValue(key, out element); dbElement = element; return(res); }
//----< update metadata info for collection type db >------------------------------------- public bool updateMetadataInfo <Key, Data, T>(DBEngine <Key, DBElement <Key, Data> > dbType2, Key keyVal, String name, String description) where Data : IEnumerable <T> { DBElement <Key, Data> dbElem; dbType2.getValue(keyVal, out dbElem); bool changed = false; if (name != null) { changed = true; dbElem.name = name; } if (description != null) { changed = true; dbElem.descr = description; } if (!changed) { return(false); } else { dbType2.numberOfWrties++; if (dbType2.numberOfWrties >= dbType2.max_writes) { dbType2.numberOfWrties = 0; trigger_collection_storage <Key, Data, T>(dbType2); } } return(dbType2.update(keyVal, dbElem)); }
//----< 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()); } }
//----< Persist primitive type db to a xml file>------------------- public static void persist_db <Key, Value, Data>(this DBEngine <Key, Value> db, String fileName) { XDocument xml = new XDocument(); xml.Declaration = new XDeclaration("1.0", "utf-8", "yes"); XComment comment = new XComment("Demonstrating XML"); xml.Add(comment); XElement root = new XElement("noSqlDb"); xml.Add(root); XElement keyType = new XElement("keytype"); keyType.SetValue(typeof(Key)); root.Add(keyType); XElement payload = new XElement("payloadtype"); payload.SetValue(typeof(Data)); root.Add(payload); foreach (Key key in db.Keys()) //Iterate for each keys { XElement child = new XElement("record"); root.Add(child); XElement keyNode = new XElement("key"); keyNode.SetValue(key); child.Add(keyNode); XElement elementNode = new XElement("element"); child.Add(elementNode); Value value; db.getValue(key, out value); DBElement <Key, Data> elem = value as DBElement <Key, Data>; String timestamp = String.Format("{0}", elem.timeStamp); XElement nameNode = new XElement("name"); nameNode.SetValue(elem.name); XElement descrNode = new XElement("descr"); descrNode.SetValue(elem.descr); XElement timestampNode = new XElement("timestamp"); timestampNode.SetValue(timestamp); elementNode.Add(nameNode); elementNode.Add(descrNode); elementNode.Add(timestampNode); persist_child_payload_primtive <Key, Value, Data>(elem, elementNode); } try { xml.Save(fileName); } catch (Exception) { Console.WriteLine("Invalid Directory Specified"); } }
//----< add children for primitive type db >------------------------------------- public bool addChildren <Key, Data>(DBEngine <Key, DBElement <Key, Data> > dbType2, Key keyVal, Key newChild) { DBElement <Key, Data> dbElem; dbType2.getValue(keyVal, out dbElem); dbElem.children.Add(newChild); { dbType2.numberOfWrties++; if (dbType2.numberOfWrties >= dbType2.max_writes) { dbType2.numberOfWrties = 0; trigger_primitive_storage <Key, Data>(dbType2); } } return(true); }
//----< add children for collection type db >------------------------------------- public bool addChildren <Key, Data, T>(DBEngine <Key, DBElement <Key, Data> > dbType2, Key keyVal, Key newChild) where Data : IEnumerable <T> { DBElement <Key, Data> dbElem; dbType2.getValue(keyVal, out dbElem); dbElem.children.Add(newChild); { dbType2.numberOfWrties++; if (dbType2.numberOfWrties >= dbType2.max_writes) { dbType2.numberOfWrties = 0; trigger_collection_storage <Key, Data, T>(dbType2); } } return(true); }
static void Main(string[] args) { "Testing DBEngine Package".title('='); WriteLine(); Write("\n --- Test DBElement<int,string> ---"); DBElement <int, string> elem1 = new DBElement <int, string>(); elem1.payload = "a payload"; Write(elem1.showElement <int, string>()); WriteLine(); DBElement <int, string> elem2 = new DBElement <int, string>("Darth Vader", "Evil Overlord"); elem2.payload = "The Empire strikes back!"; Write(elem2.showElement <int, string>()); WriteLine(); var elem3 = new DBElement <int, string>("Luke Skywalker", "Young HotShot"); elem3.children.AddRange(new List <int> { 1, 5, 23 }); elem3.payload = "X-Wing fighter in swamp - Oh oh!"; Write(elem3.showElement <int, string>()); WriteLine(); Write("\n --- Test DBEngine<int,DBElement<int,string>> ---"); int key = 0; Func <int> keyGen = () => { ++key; return(key); }; // anonymous function to generate keys DBEngine <int, DBElement <int, string> > db = new DBEngine <int, DBElement <int, string> >(); bool p1 = db.insert(keyGen(), elem1); bool p2 = db.insert(keyGen(), elem2); bool p3 = db.insert(keyGen(), elem3); if (p1 && p2 && p3) { Write("\n all inserts succeeded"); } else { Write("\n at least one insert failed"); } db.show <int, DBElement <int, string>, string>(); WriteLine(); Write("\n --- Test DBElement<string,List<string>> ---"); DBElement <string, List <string> > newelem1 = new DBElement <string, List <string> >(); newelem1.name = "newelem1"; newelem1.descr = "test new type"; newelem1.payload = new List <string> { "one", "two", "three" }; Write(newelem1.showElement <string, List <string> >()); WriteLine(); Write("\n --- Test DBElement<string,List<string>> ---"); DBElement <string, List <string> > newerelem1 = new DBElement <string, List <string> >(); newerelem1.name = "newerelem1"; newerelem1.descr = "better formatting"; newerelem1.payload = new List <string> { "alpha", "beta", "gamma" }; newerelem1.payload.Add("delta"); newerelem1.payload.Add("epsilon"); Write(newerelem1.showElement <string, List <string>, string>()); WriteLine(); DBElement <string, List <string> > newerelem2 = new DBElement <string, List <string> >(); newerelem2.name = "newerelem2"; newerelem2.descr = "better formatting"; newerelem1.children.AddRange(new[] { "first", "second" }); newerelem2.payload = new List <string> { "a", "b", "c" }; newerelem2.payload.Add("d"); newerelem2.payload.Add("e"); Write(newerelem2.showElement <string, List <string>, string>()); WriteLine(); Write("\n --- Test DBEngine<string,DBElement<string,List<string>>> ---"); int seed = 0; string skey = seed.ToString(); Func <string> skeyGen = () => { ++seed; skey = "string" + seed.ToString(); skey = skey.GetHashCode().ToString(); return(skey); }; DBEngine <string, DBElement <string, List <string> > > newdb = new DBEngine <string, DBElement <string, List <string> > >(); newdb.insert(skeyGen(), newerelem1); newdb.insert(skeyGen(), newerelem2); newdb.show <string, DBElement <string, List <string> >, List <string>, string>(); WriteLine(); "testing edits".title(); db.show <int, DBElement <int, string>, string>(); DBElement <int, string> editElement = new DBElement <int, string>(); db.getValue(1, out editElement); editElement.showElement <int, string>(); editElement.name = "editedName"; editElement.descr = "editedDescription"; db.show <int, DBElement <int, string>, string>(); Write("\n\n"); }
//----< get value associated with the key>------------------- public bool getValue(Key key, out DBElement <Key, Data> val) { bool res = db.getValue(key, out val); return(res); }