//----< build queryPredicate for timestamp query >--------------------------------------- public Func <Key, bool> queryTimestamp <Key, Value, Data>(DBEngine <Key, Value> db, DateTime initial, DateTime final = default(DateTime)) { Func <Key, bool> queryPredicate = (Key key) => { Value value; db.getValue(key, out value); DBElement <Key, Data> elem = value as DBElement <Key, Data>; int init = elem.timeStamp.CompareTo(initial); if (final == default(DateTime)) { final = DateTime.Now; } int fin = elem.timeStamp.CompareTo(final); if (init >= 0 && fin <= 0) { return(true); } return(false); }; return(queryPredicate); }
//----< 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); }
//----< build queryPredicate for metadata query >--------------------------------------- /* * 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> queryMetadata <Key, Value, Data>(string queryParam, DBEngine <Key, Value> db) { // Func<int, bool> is delegate that binds to // functions of the form bool query(int key). Func <Key, bool> queryPredicate = (Key key) => { Value value; db.getValue(key, out value); DBElement <Key, Data> elem = value as DBElement <Key, Data>; if (elem.name.Contains(queryParam)) { return(true); } if (elem.descr.Contains(queryParam)) { return(true); } if (elem.timeStamp.ToString().Contains(queryParam)) { return(true); } foreach (Key child in elem.children) { if (child.ToString().Contains(queryParam)) { return(true); } } return(false); }; return(queryPredicate); }
//----< write details of element with enumerable Data to string >------ public static string showElement <Key, Data, T>(this DBElement <Key, Data> elem) where Data : IEnumerable <T> // constraint clause { StringBuilder accum = new StringBuilder(); accum.Append(elem.showMetaData()); if (elem.payload != null) { IEnumerable <object> d = elem.payload as IEnumerable <object>; if (d == null) { accum.Append(String.Format("\n payload: {0}", elem.payload.ToString())); } else { bool first = true; accum.Append(String.Format("\n payload:\n ")); foreach (var item in elem.payload) // won't compile without constraint clause { if (first) { accum.Append(String.Format(" {0}", item)); first = false; } else { accum.Append(String.Format(", {0}", item)); } } } } return(accum.ToString()); }
//----< write metadata to string >------------------------------------- public static string showMetaData <Key, Data>(this DBElement <Key, Data> elem) { StringBuilder accum = new StringBuilder(); accum.Append(String.Format("\n name: {0}", elem.name)); accum.Append(String.Format("\n desc: {0}", elem.descr)); accum.Append(String.Format("\n time: {0}", elem.timeStamp)); if (elem.children.Count() > 0) { accum.Append(String.Format("\n Children: ")); bool first = true; foreach (Key key in elem.children) { if (first) { accum.Append(String.Format("{0}", key.ToString())); first = false; } else { accum.Append(String.Format(", {0}", key.ToString())); } } } return(accum.ToString()); }
//----< Add contents to DB >----------------------------------------- void TestAdd(int key) { string str = "Adding element with key " + key.ToString(); str.title2(); DBElement <int, string> elem = new DBElement <int, string>(); elem.name = "Element" + key.ToString(); elem.descr = "Description of " + key.ToString(); elem.timeStamp = DateTime.Now; elem.children.AddRange(new List <int> { key - 1, key + 1, key + 2 }); elem.payload = "Element " + key.ToString() + "'s payload"; bool success = db.insert(key, elem); if (success) { "Element added successfully".success(); } else { "Key already exists".error(); } WriteLine(); }
static void Main(string[] args) { "Testing DBElement Package".title('='); WriteLine(); Write("\n --- Test DBElement<int,string> ---"); WriteLine(); DBElement <int, string> elem1 = new DBElement <int, string>(); 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 = new List <int> { 1, 2, 7 }; elem3.payload = "X-Wing fighter in swamp - Oh oh!"; Write(elem3.showElement <int, string>()); WriteLine(); Write("\n --- Test DBElement<string,List<string>> ---"); WriteLine(); 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>, string>()); WriteLine(); DBElement <string, List <string> > newerelem1 = new DBElement <string, List <string> >(); newerelem1.name = "newerelem1"; newerelem1.descr = "same stuff"; newerelem1.children.Add("first_key"); newerelem1.children.Add("second_key"); newerelem1.payload = new List <string> { "alpha", "beta", "gamma" }; newerelem1.payload.AddRange(new[] { "delta", "epsilon" }); Write(newerelem1.showElement <string, List <string>, string>()); WriteLine(); Write("\n\n"); }
//----< write details of element with simple Data to string >---------- public static string showElement <Key, Data>(this DBElement <Key, Data> elem) { StringBuilder accum = new StringBuilder(); accum.Append(elem.showMetaData()); if (elem.payload != null) { accum.Append(String.Format("\n payload: {0}", elem.payload.ToString())); } return(accum.ToString()); }
public static void show <Key, Value, Data>(this DBFactory <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()); } }
//----< write enumerable db elements out to Console >-------------- public static void show <Key, Value, Data, T>(this DBEngine <Key, Value> db) where Data : IEnumerable <T> { 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 <Key, Data, T>()); } }
//----< Parse Enumerable type DB from XML format >---------------------------------- public static void FromXML <Key, Value, Data, T>(this DBEngine <Key, Value> db, XDocument xDocument) where Data : IEnumerable <T> { XElement noSqlDB = xDocument.Root; string keytype = noSqlDB.Element("KeyType").Value; string payloadtype = noSqlDB.Element("PayloadType").Value; if (!(typeof(Key).ToString() == keytype && typeof(Data).ToString() == payloadtype)) { WriteLine(); "The persisted DB does not match the current DB!!".error(); WriteLine(); WriteLine(" Current DB: \n Key Type: {0} \n Payload Type: {1}", typeof(Key), typeof(Data)); WriteLine(" DB to be read: \n Key Type: {0} \n Payload Type: {1}", keytype, payloadtype); } else { IEnumerable <XElement> dbEntries = xDocument.Root.Elements("DBEntry"); foreach (XElement dbEntry in dbEntries) { string temp = dbEntry.Element("Key").Value; Key key = (Key)Convert.ChangeType(temp, typeof(Key)); DBElement <Key, Data> element = new DBElement <Key, Data>(); XElement elem = dbEntry.Element("element"); element.name = elem.Element("name").Value; element.descr = elem.Element("descr").Value; string time = elem.Element("timestamp").Value; element.timeStamp = (DateTime)Convert.ChangeType(time, typeof(DateTime)); if (elem.Element("children") != null) { IEnumerable <XElement> childKeys = elem.Element("children").Elements("key"); if (childKeys.Count() > 0) { foreach (XElement child in childKeys) { temp = child.Element("key").Value; Key childKey = (Key)Convert.ChangeType(temp, typeof(Key)); element.children.Add(childKey); } } } IEnumerable <XElement> items = elem.Element("payload").Elements("item"); List <T> payload = new List <T>(); foreach (XElement item in items) { temp = item.Value; T payloadItem = (T)Convert.ChangeType(temp, typeof(T)); payload.Add(payloadItem); } Data payloadData = (Data)Convert.ChangeType(payload, typeof(Data)); element.payload = payloadData; Value value = (Value)Convert.ChangeType(element, typeof(Value)); db.insert(key, value); } } }
//----< 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); } }
//----< Create & Populate DB >-------------------------------------- void TestCreate() { "Demonstrating Requirement #2 (DB <int, string>)".title(); DBElement <int, string> elem = new DBElement <int, string>(); elem.name = "element"; elem.descr = "test element"; elem.timeStamp = DateTime.Now; elem.children.AddRange(new List <int> { 2, 3 }); elem.payload = "elem's payload"; "Adding below element with Key = 1".title2(); db.insert(1, elem); WriteLine(); }
static void Main(string[] args) { /* * Create and edit a DBEngine first. * Then create a DBFactory using the DBEngine. */ "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(); 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); Write("\n --- Create DBFactory<int, DBElement<int, string>> from DBEngine<int,DBElement<int, string>> ---"); DBFactory <int, DBElement <int, string> > dbFactory = new DBFactory <int, DBElement <int, string> >(db); foreach (int dbKey in dbFactory.Keys()) { DBElement <int, string> value; dbFactory.getValue(dbKey, out value); value.showElement(); } dbFactory.showDB(); Write("\n\n"); }
static void Main(string[] args) { "Testing DBExtensions 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>()); DBEngine <int, DBElement <int, string> > dbs = new DBEngine <int, DBElement <int, string> >(); dbs.insert(1, elem1); dbs.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.children = new List <string> { "Key1", "Key2" }; newelem1.payload = new List <string> { "one", "two", "three" }; Write(newelem1.showElement <string, List <string>, string>()); DBEngine <string, DBElement <string, List <string> > > dbe = new DBEngine <string, DBElement <string, List <string> > >(); dbe.insert("key1", newelem1); dbe.show <string, DBElement <string, List <string> >, List <string>, string>(); Write("\n\n"); }
//----< 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); }
static void Main(string[] args) { "Testing DBEngine Package".title('=');; WriteLine(); "Test db of scalar elements".title(); WriteLine(); DBElement <int, string> elem1 = new DBElement <int, string>(); elem1.payload = "a payload"; DBElement <int, string> elem2 = new DBElement <int, string>("Darth Vader", "Evil Overlord"); elem2.payload = "The Empire strikes back!"; var elem3 = new DBElement <int, string>("Luke Skywalker", "Young HotShot"); elem3.payload = "X-Wing fighter in swamp - Oh oh!"; if (verbose) { Write("\n --- Test DBElement<int,string> ---"); WriteLine(); elem1.showElement(); WriteLine(); elem2.showElement(); WriteLine(); elem3.showElement(); WriteLine(); /* ElementFormatter is not ready for prime time yet */ //Write(ElementFormatter.formatElement(elem1.showElement<int, string>(), false)); } Write("\n --- Test DBEngine<int,DBElement<int,string>> ---"); WriteLine(); int key = 0; Func <int> keyGen = () => { ++key; return(key); }; 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.showDB(); WriteLine(); "Test db of enumerable elements".title(); WriteLine(); 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" }; 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"); DBElement <string, List <string> > newerelem2 = new DBElement <string, List <string> >(); newerelem2.name = "newerelem2"; newerelem2.descr = "better formatting"; newerelem2.children.AddRange(new List <string> { "first", "second" }); newerelem2.payload = new List <string> { "a", "b", "c" }; newerelem2.payload.Add("d"); newerelem2.payload.Add("e"); if (verbose) { Write("\n --- Test DBElement<string,List<string>> ---"); WriteLine(); newelem1.showEnumerableElement(); WriteLine(); newerelem1.showEnumerableElement(); WriteLine(); newerelem2.showEnumerableElement(); 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(), newelem1); newdb.insert(skeyGen(), newerelem1); newdb.insert(skeyGen(), newerelem2); newdb.showEnumerableDB(); Write("\n\n"); }
public static void showEnumerableElement(this DBElement <string, List <string> > enumElement) { Console.Write(enumElement.showElement <string, List <string>, string>()); WriteLine(); }
public static void showElement(this DBElement <int, string> element) { Console.Write(element.showElement <int, string>()); WriteLine(); }
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"); }
static void Main(string[] args) { QueyEngineTest test = new QueyEngineTest(); QueryEngine qEngine = new QueryEngine(); "Creating & Populating DB".title2(); test.TestCreate(); test.TestAdd(1); test.TestAdd(2); test.TestAdd(4); test.TestAdd(3); test.TestAdd(5); test.TestAdd(15); test.TestRemove(6); test.TestRemove(4); WriteLine(); "Query by Key for value".title2(); DBElement <int, string> value = QueryEngine.queryValue <int, DBElement <int, string>, string>(2, test.db); "Querying for value of Key = 2".body(); string status = "Result of query: "; status.success(); value.showElement(); WriteLine(); "Query by Key for children".title2(); "Querying for children of Key = 1".body(); QueryEngine queryEngine = new QueryEngine(); DBFactory <int, DBElement <int, string> > newDB; // build query Func <int, bool> query = queryEngine.queryChildren <int, DBElement <int, string>, string>(test.db); // process query List <int> keyCollection; bool result = queryEngine.processChildrenQuery <int, DBElement <int, string>, string>(query, out keyCollection, 1, test.db); newDB = queryEngine.queryResults <int, DBElement <int, string>, string>(result, keyCollection, test.db); newDB.showDB(); WriteLine(); "Query by KeyPattern for matching Keys".title2(); "Querying for pattern \"1.*\" ".body(); DBFactory <int, DBElement <int, string> > newDB2; // build query string regEx = "1.*"; query = queryEngine.queryRegEx <int, DBElement <int, string>, string>(test.db, regEx); // process query result = queryEngine.processQuery <int, DBElement <int, string> >(query, out keyCollection, test.db); newDB2 = queryEngine.queryResults <int, DBElement <int, string>, string>(result, keyCollection, test.db); newDB2.showDB(); WriteLine(); // build query "Querying without suplying a pattern ( will be treated as \".*\") ".body(); query = queryEngine.queryRegEx <int, DBElement <int, string>, string>(test.db); // process query result = queryEngine.processQuery <int, DBElement <int, string> >(query, out keyCollection, test.db); newDB = queryEngine.queryResults <int, DBElement <int, string>, string>(result, keyCollection, test.db); newDB.showDB(); WriteLine(); "Query by metadata for Keys".title2(); "Querying for metadata substring \"of 2\" ".body(); DBFactory <int, DBElement <int, string> > newDB3; // build query string search = "of 2"; query = queryEngine.queryMetadata <int, DBElement <int, string>, string>(search, test.db); // process query result = queryEngine.processQuery <int, DBElement <int, string> >(query, out keyCollection, test.db); newDB3 = queryEngine.queryResults <int, DBElement <int, string>, string>(result, keyCollection, test.db); newDB3.showDB(); WriteLine(); "Querying for metadata substring \"of \" ".body(); DBFactory <int, DBElement <int, string> > newDB4; // build query search = "of "; query = queryEngine.queryMetadata <int, DBElement <int, string>, string>(search, test.db); // process query result = queryEngine.processQuery <int, DBElement <int, string> >(query, out keyCollection, test.db); newDB4 = queryEngine.queryResults <int, DBElement <int, string>, string>(result, keyCollection, test.db); newDB4.showDB(); "Query by timestamp for Keys".title2(); DBFactory <int, DBElement <int, string> > newDB5; TimeSpan tspan = new TimeSpan(0, 0, 0, 0, 300); DateTime initial = DateTime.Now.Subtract(tspan); string message = "Querying for Keys added between " + initial.ToLongTimeString() + " and now"; message += "\n\t(A timespan of " + tspan.TotalMilliseconds + " milliseconds)"; WriteLine(); message.body(); WriteLine(); // build query message = "\n\tsecond value of range not specified, current time assumed"; WriteLine(); message.body(); query = queryEngine.queryTimestamp <int, DBElement <int, string>, string>(test.db, initial); // process query result = queryEngine.processQuery <int, DBElement <int, string> >(query, out keyCollection, test.db); newDB5 = queryEngine.queryResults <int, DBElement <int, string>, string>(result, keyCollection, test.db); newDB5.showDB(); WriteLine(); }