Example #1
0
 /// <summary>
 /// Creating new chunk manager for given DB
 /// </summary>
 /// <param name="db_to_connect">DB name</param>
 /// <returns></returns>
 public static ChunkManager Create( string db_to_connect )
 {
     if ( inner_object == null ) {
         inner_object = new ChunkManager();
         inner_object.conn_db = null;
         if ( inner_object.conn_db == null ) {
             Errors.Messages.DisplayError(
                 "Can't find DB with name \""+db_to_connect+"\"",
                 "",
                 "Please, check DB name or create such DB",
                 DateTime.Now
             );
             return null;
         }
     }
     return inner_object;
 }
Example #2
0
        public static void Employees()
        {
            const string db_name= "employees";
            var user = User.User.Get( "root" );
            DataBase db = null;
            DataContainer dc_employee = null;
            DataContainer dc_positions = null;
            DataContainer dc_divisions = null;
            var cm = new ChunkManager.ChunkManager();

            // Creating DB structure
            if ( DataBase.Exists(db_name) ) {
                db = DataBase.LoadFrom( db_name, cm );
            } else {
                db = DataBase.Create( db_name, cm );
                db.AddAccess( user, Access.AccessLevel.ADMIN );
                DataContainer.Create( db, "employee", user );
                DataContainer.Create( db, "positions", user );
                DataContainer.Create( db, "divisions", user );

                dc_employee = db.GetDataContainer("employee", user);
                dc_employee.AddAccess( user, Access.AccessLevel.ADMIN );
                dc_positions = db.GetDataContainer("positions", user);
                dc_divisions = db.GetDataContainer("divisions", user);

                dc_employee.AddColumn( new Column( DataType.INT, "EmplId" ), user );
                dc_employee.AddColumn( new Column( DataType.STRING, "Surname" ), user );
                dc_employee.AddColumn( new Column( DataType.STRING, "Name" ), user );
                dc_employee.AddColumn( new Column( DataType.INT, "PosId" ), user );
                dc_employee.AddColumn( new Column( DataType.INT, "DivId" ), user );

                dc_positions.AddColumn( new Column( DataType.INT, "PosId" ), user );
                dc_positions.AddColumn( new Column( DataType.STRING, "Name" ), user );

                dc_divisions.AddColumn( new Column( DataType.INT, "DivId"), user );
                dc_divisions.AddColumn( new Column( DataType.STRING, "Name"), user );

                dc_employee.Save();
                dc_divisions.Save();
                dc_positions.Save();

                cm.SaveIndexes();
            }

            // Filling DB structure
            Console.WriteLine("Filling our db...");
            Console.WriteLine("Loading db \""+db_name+"\"");
            Console.WriteLine("Loading container \"employee\"");

            DataContainer dc_employee_load = db.GetDataContainer( "employee", user );
            if ( dc_employee_load == null )
                return;

            Console.WriteLine("Adding records into \"employee\"");

            dc_employee_load.PreLoad( user );

            // viewing existing records
            Console.WriteLine("Now, let's see our employees list: ");
            foreach ( var rec in dc_employee_load.GetRecordsInternal() ) {
                Console.WriteLine( String.Format("Name: {0}, Surname: {1}",
                                                 rec["Name"].Value.ToString(),
                                                 rec["Surname"].Value.ToString())  );
            }

            Int64 rec_id = 110+(Int64)DateTime.Now.Ticks % 20000;

            do  {
                var tmp = new Record( dc_employee_load );
                Console.WriteLine("Enter a new employee name: ");
                var name = Console.ReadLine();
                Console.WriteLine("Surname: ");
                var surname = Console.ReadLine();

                tmp["Name"].Value = name;
                tmp["Surname"].Value = surname;
                tmp.Id = ++rec_id;

                dc_employee_load.AddRecordToDataStorage(tmp);

                Console.WriteLine("Added successfully! Press \"Y\" - to enter an another employee");
            } while ( Console.ReadKey().Key != ConsoleKey.N );
            dc_employee_load.Save();
            cm.SaveIndexes();
        }
        public static void DataTableChunkCreationBin()
        {
            string test_binary = String.Empty;
            var user = User.User.New( "root", "12345678");

            if (!File.Exists ("./testdata/binary.jpg")) {
                Errors.Messages.DisplayError ("No file : ./testdata/binary.jpg", String.Empty, String.Empty, DateTime.Now);
            }

            var bts = File.ReadAllBytes( "./testdata/binary.jpg");

            test_binary = System.Text.Encoding.Default.GetString( bts );

            Console.WriteLine ("Create or use an existing db (0/1)?: ");
            string choise = Console.ReadLine ();
            Console.WriteLine ("Enter db name: ");
            string db_name = Console.ReadLine ();

            var indexes = new List<Index> ();
            var chunk_manager = new ChunkManager.ChunkManager ();

            if (choise.Trim () == "0") {
                Console.WriteLine ("Enter rows count: ");
                int rows_count = Int32.Parse (Console.ReadLine ());
                Console.WriteLine ("Enter cols count: ");
                int cols_count = Int32.Parse (Console.ReadLine ());
                Console.WriteLine ("Enter chunk size: ");

                Console.WriteLine ("Creating DB...");
                var db = DataBase.Create (db_name,
                                          chunk_manager);

                Console.WriteLine ("Creating DC...");

                var dc = new DataContainer (db, "DCBin");

                for (int i = 0; i < cols_count; ++i) {
                    var column = new Column ();
                    column.Name = "col" + i.ToString ();
                    column.Type = DataType.BINARY;
                    dc.AddColumn (column, user);
                }

                for (int k = 0; k < rows_count; ++k) {
                    var rec1 = new Record (dc);
                    rec1.Id = dc.NextId ();

                    foreach (var col in dc.Columns) {
                        rec1 [col.Name].Value = test_binary;
                        rec1 [col.Name].Type = DataType.BINARY;

                        rec1.BuildIndex ();
                    }
                    dc.AddRecordToDataStorage (rec1);
                    indexes.Add (rec1.GetIndex ());
                }
                dc.Save ();
            } else {
                Console.WriteLine ("Trying to get data from db \"" + db_name + "\"");
                var db2 = DataBase.LoadFrom (db_name, chunk_manager);

                var dc = chunk_manager.GetDataContainer ("DCBin");
                dc.AssignOwnerDB (db2);
                //Console.WriteLine("Preloading DC1...");
                dc.PreLoad ( user );

                // Getting a record
                Record rc = null;
                Record rc1 = null;
                Record rc2 = null;
                Record rc3 = null;
                Record rc4 = null;

                var get_time = Checks.ExecutionTimeCheck.DoCheck (() => {
                                                                  	rc = dc.GetRecord (2030, user);
                                                                  });
                var get_time2 = Checks.ExecutionTimeCheck.DoCheck (() => {
                                                                   	rc1 = dc.GetRecord (10, user);
                                                                   });
                var get_time3 = Checks.ExecutionTimeCheck.DoCheck (() => {
                                                                   	rc = dc.GetRecord (30, user);
                                                                   });
                var get_time4 = Checks.ExecutionTimeCheck.DoCheck (() => {
                                                                   	rc3 = dc.GetRecord (20, user);
                                                                   });
                var get_time2s = Checks.ExecutionTimeCheck.DoCheck (() => {
                                                                        rc4 = dc.GetRecord (7900, user);
                                                                    });

                Console.WriteLine ("Getting value time1, ms: " + get_time.ToString ());
                Console.WriteLine ("Getting value time2, ms: " + get_time2.ToString ());
                Console.WriteLine ("Getting value time3, ms: " + get_time3.ToString ());
                Console.WriteLine ("Getting value time4, ms: " + get_time4.ToString ());
                Console.WriteLine ("Getting value time2s, ms: " + get_time2s.ToString ());

                if (rc1 != null && !(rc is DummyRecord)) {
                    var binval = System.Text.Encoding.Default.GetBytes(rc1.Fields [0].Value.ToString ());
                    Console.WriteLine ("Val: " + binval.ToString());

                    using ( var fl = File.Create( "./testdata/binary_1.jpg" ) ) {
                        var sw = new  BinaryWriter( fl );
                        foreach ( var chr in binval )
                            sw.Write( chr );
                        sw.Close();
                    }
                }

                if (rc2 != null && !(rc2 is DummyRecord))
                    Console.WriteLine ("Val: " + rc2.Fields [0].Value.ToString ());
                if (rc3 != null && !(rc3 is DummyRecord))
                    Console.WriteLine ("Val: " + rc3.Fields [0].Value.ToString ());
                if (rc4 != null && !(rc4 is DummyRecord))
                    Console.WriteLine ("Val: " + rc4.Fields [0].Value.ToString ());

                Console.WriteLine ("DO YOU WANT TO DROP THIS DB (Y/N)?");
                if (Console.ReadLine ().ToUpper() == "Y") {
                    db2.Drop (user);
                }
            }
        }
Example #4
0
        public static void DataTableChunkCreation()
        {
            Console.WriteLine("Create or use an existing db (0/1)?: ");
            string  choise = Console.ReadLine();
            Console.WriteLine("Enter db name: ");
            string db_name = Console.ReadLine();

            User.User user = User.User.New("root", "12345678");

            var indexes = new List<Index>();
            var chunk_manager = new ChunkManager.ChunkManager();

            if ( choise.Trim() == "0" ) {
                Console.WriteLine("Enter rows count: ");
                int rows_count = Int32.Parse(Console.ReadLine());
                Console.WriteLine("Enter cols count: ");
                int cols_count = Int32.Parse(Console.ReadLine());

                Console.WriteLine("Creating DB...");
                var db = DataBase.Create( db_name,
                                         chunk_manager );
                User.User new_usr = User.User.New( "root", "12345678" );
                db.AddAccess( new_usr, DwarfDB.AccessFunctions.Access.AccessLevel.ADMIN);
                Console.WriteLine("Creating DC...");

                var dc = new DataContainer( db, "DataC1" );
                dc.AddAccess( new_usr, DwarfDB.AccessFunctions.Access.AccessLevel.ADMIN);
                var dc2 = new DataContainer( db, "DataC2" );
                dc2.AddAccess( new_usr, DwarfDB.AccessFunctions.Access.AccessLevel.ADMIN);

                for ( int i = 0; i < cols_count; ++i ) {
                    var column = new Column();
                    column.Name = "col"+i.ToString();
                    if ( i % 2 == 0 )
                        column.Type = DataType.STRING;
                    else
                        column.Type = DataType.INT;
                    dc.AddColumn( column, user );
                }

                for ( int i = 0; i < cols_count; ++i ) {
                    var column = new Column();
                    column.Name = "col"+i.ToString();
                    if ( i % 2 == 0 )
                        column.Type = DataType.STRING;
                    else
                        column.Type = DataType.INT;
                    dc2.AddColumn( column, user );
                }

                for ( int k = 0; k < rows_count; ++k ) {
                    var rec1 = new Record( dc );
                    var rec2 = new Record( dc2 );
                    rec1.Id = dc.NextId();
                    rec2.Id = dc2.NextId();

                    foreach ( var col in dc.Columns) {
                        if ( k % 2 == 0 ) {
                            rec1[col.Name].Value = "съешь ещё этих мягких французских булок да выпей чаю "+col.Name+" "+k.ToString();
                            rec1[col.Name].Type = DataType.STRING;
                        } else {
                            rec1[col.Name].Value = k*100;
                            rec1[col.Name].Type = DataType.INT;
                        }

                        if ( k % 2 == 0 ) {
                            rec2[col.Name].Value = "Цитрус "+col.Name+" "+k.ToString()+":::"+db.Name;
                            rec2[col.Name].Type = DataType.STRING;
                        } else {
                            rec2[col.Name].Value = k*555;
                            rec2[col.Name].Type = DataType.INT;
                        }
                    }

                    dc.AddRecordToDataStorage( rec1 );
                    indexes.Add(rec1.GetIndex());
                    dc2.AddRecordToDataStorage( rec2 );
                    indexes.Add(rec2.GetIndex());
                }
                dc.Save();
                dc2.Save();
            } else {
                Console.WriteLine("Trying to get data from db \""+db_name+"\"");

                var db2 = DataBase.LoadFrom( db_name , chunk_manager );

                var dc2 = chunk_manager.GetDataContainer( "DataC1" );
                var dc = chunk_manager.GetDataContainer( "DataC2" );

                dc2.AssignOwnerDB(db2);
                dc.AssignOwnerDB(db2);

                Console.WriteLine("DC2 reccount:  "+dc2.AllRecordsCount);
                Console.WriteLine("DC reccount:  "+dc.AllRecordsCount);

                // Getting a record
                Console.WriteLine("DCs preloading... ");

                //dc.PreLoad( user );
                //dc2.PreLoad( user );

                // Additional records
                Console.WriteLine("Adding some new records... ");
                for ( int i =0; i < 10;  ++i ) {
                    var rec = new Record( dc );
                    rec.Id = dc.NextId();
                    foreach ( var col in dc.Columns) {
                        rec[col.Name].Value = "Цитрус "+col.Name+" "+i.ToString()+"AAAAAAAAA";
                        rec[col.Name].Type = DataType.STRING;
                    }

                    rec.BuildIndex();
                    indexes.Add(rec.GetIndex());
                    dc.AddRecordToDataStorage(rec);
                }

                chunk_manager.RebuildIndexes( dc.GetOwnerDB() );
                dc.Save();
                dc.PreLoad( user );
                Console.WriteLine("Trying LINQ #1...");
                var aa1 = dc.Select((x,y)=>x);

                foreach ( var rec in aa1) {
                    Console.WriteLine("Rec:"+rec.Fields[0].Type+"  :  "+rec.Fields[0].Value+" $$"+aa1.Count()+
                                      ":"+rec.Fields[1].Type+"  :  "+rec.Fields[1].Value+" $$"+aa1.Count());
                }

                Console.WriteLine("Trying LINQ #2...");
                var aa2 = dc.Select((x,y)=>x).Where( (x) => {
                                                        return x.Fields[1].Type == DataType.INT &&
                                                            (int.Parse(x.Fields[1].Value.ToString()) % 5 == 0);
                                                    }).ToArray();

                foreach ( var rec in aa2) {
                    Console.WriteLine("Rec:"+rec.Fields[0].Type+"  :  "+rec.Fields[0].Value+" $$"+aa2.Count()+
                                      ":"+rec.Fields[1].Type+"  :  "+rec.Fields[1].Value+" $$"+aa2.Count());
                }

                Console.WriteLine("Trying LINQ #3 (dc & dc2)...");

                var aa3 = (from rec in dc
                           join recb in dc2 on
                           rec.Fields[1].Value.ToString() equals recb.Fields[1].Value.ToString()
                           where rec.Fields[1].Type == DataType.INT && recb.Fields[1].Type == DataType.INT
                           select rec).ToArray();

                foreach ( var rec in aa3 ) {
                    Console.WriteLine("Rec:"+rec.Fields[0].Type+"  :  "+rec.Fields[0].Value+" $$"+aa3.Count()+
                                      ":"+rec.Fields[1].Type+"  :  "+rec.Fields[1].Value+" $$"+aa3.Count());
                }

                Console.WriteLine("DO YOU WANT TO DROP THIS DB (Y/N)?");
                if ( Console.ReadLine() == "Y" ) {
                    db2.Drop( user );
                }
            }
        }