Ejemplo n.º 1
0
        //----< 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);
        }
Ejemplo n.º 2
0
 //----< 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;
     }
 }
Ejemplo n.º 3
0
 //----< 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());
     }
 }
Ejemplo n.º 4
0
        //----< 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);
        }
Ejemplo n.º 5
0
        //----< 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);
        }
Ejemplo n.º 6
0
        //----< 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);
            }
        }
Ejemplo n.º 7
0
        //----< 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);
        }
Ejemplo n.º 8
0
        //----< 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);
        }