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); }
public void Open(mpIndexKey getKey, string xName) { if (LoTable != null) { Close(); } TableFile.Open(Name, this, getKey, xName); }
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); }
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(); }