예제 #1
0
        //----<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);
        }
예제 #2
0
        //----< 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));
        }
예제 #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());
     }
 }
예제 #4
0
        //----< 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");
            }
        }
예제 #5
0
        //----< 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);
        }
예제 #6
0
        //----< 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);
        }
예제 #7
0
        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");
        }
예제 #8
0
        //----< 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);
        }