コード例 #1
0
        internal View SetView(Table tmp, string nm, mpIndexKey rky)
        {
            SyncView.WaitOne();
            View vw;

            if (ViewList.TryGetValue(rky, out vw))
            {
                vw.Grow();
                SyncView.ReleaseMutex();
                return(vw);
            }
            vw = new View();
            if (nm == null || nm.Length == 0)
            {
                nm        = Alias + ViewList.Count.ToString();
                vw.delete = true;
            }
            DataFile.Blank(tmp, Struct.RowLength);
            if (vw.MustBuild(nm, Struct.LastUpdate, rky, tmp))
            {
                long r, x;
                x = Struct.RowCount;
                for (r = 1; r <= x; r++)
                {
                    Read(tmp, r);
                    vw.AddKey(tmp, r);
                }
            }
            ViewList.Add(rky, vw);
            SyncView.ReleaseMutex();
            return(vw);
        }
コード例 #2
0
 public void Open(mpIndexKey getKey, string xName)
 {
     if (LoTable != null)
     {
         Close();
     }
     TableFile.Open(Name, this, getKey, xName);
 }
コード例 #3
0
        public bool MustBuild(string nm, DateTime udTime, mpIndexKey gk, Table obj)
        {
            string tk = gk(obj);

            index  = new Index(nm, (ushort)tk.Length, udTime);
            getkey = gk;
            count  = 1;
            return(index.Keys() == 0);
        }
コード例 #4
0
        internal static void Open(string nm, Table obj, mpIndexKey gkey, string xn)
        {
            TableFile db;

            SyncOpen.WaitOne();
            if (OpenList.TryGetValue(nm, out db))
            {
                db.OpenCount++;
            }
            else
            {
                db        = new TableFile();
                db.Alias  = nm;
                db.File   = DataFile.Open(nm, "Table", FileMode.Open);
                db.Struct = new Struct();
                int sz = DataFile.GetSize(db.Struct);
                db.File.Read(db.Struct, DataFile.coSignatureSz, sz);
                db.File.Lock(db.Struct);
                db.OpenCount = 1;
                db.Data      = DataFile.coSignatureSz + sz;
                long cz = db.Data + db.Struct.RowLength * db.Struct.RowCount;
                long fz = db.File.LoFile.Length;
                if (cz != fz)
                {
                    db.Struct.LastUpdate = DateTime.Now;
                    db.File.Write(db.Struct);
                    db.File.CopyTo(String.Format("{0}{1:yyyy}{1:MM}{1:dd}{1:HH}{1:mm}{1:ss}", nm, db.Struct.LastUpdate), "BackupTable");
                    db.File.LoFile.SetLength(cz);
                }
                OpenList.Add(nm, db);
            }
            SyncOpen.ReleaseMutex();

            obj.LoTable = db;
            if (gkey == null)
            {
                obj.Order = null;
            }
            else
            {
                obj.Order = db.SetView(obj, xn, gkey);
            }
            obj.First();
        }