Ejemplo n.º 1
0
 public Transação(SGDB sgdb, string id, Logger logger)
 {
     SGDB   = sgdb;
     Id     = id;
     Ações  = new List <Ação>();
     Locks  = new List <Lock>();
     Logger = logger;
     Logger.Log($"Transação {Id}: Nova");
     Waiting = new List <Lock>();
 }
Ejemplo n.º 2
0
 public void Update(Entrada entrada, Action <DBException> onCompleted)
 {
     SGDB.Locks.Request(entrada.Id.Value, false, (toRelease) => {
         if (SGDB.MinhaVisão(this).FromID(entrada.Id.Value) == null)
         {
             onCompleted(new DBException($"Não é possível alterar o registro de ID {entrada.Id.Value} pois o mesmo não existe."));
             toRelease.Release();
         }
         else
         {
             Ações.Add(new Ação(Classes.Ações.Modificar, entrada));
             OnAçãoChanged?.Invoke(this, null);
             onCompleted.Invoke(null);
             Logger.Log($"Transação {Id}: Update {entrada}");
         }
     }, this);
 }
Ejemplo n.º 3
0
 public void Insert(Entrada entrada, Action <DBException> onCompleted)
 {
     SGDB.Locks.Request(entrada.Id.Value, false, (toRelease) => {
         foreach (Entrada ent in SGDB.MinhaVisão(this))
         {
             if (ent.Id == entrada.Id)
             {
                 onCompleted.Invoke(new DBException("Não é possível inserir esse registro. Um com o mesmo ID já existe."));
                 toRelease.Release();
                 return;
             }
         }
         Ações.Add(new Ação(Classes.Ações.Inserir, entrada));
         OnAçãoChanged?.Invoke(this, null);
         onCompleted.Invoke(null);
         Logger.Log($"Transação {Id}: Insert {entrada}");
     }, this);
 }
Ejemplo n.º 4
0
 public void Select(int id, Action <Entrada, Lock, DBException> onFound)
 {
     SGDB.Locks.Request(id, true, (toRelease) => {
         var procurado = SGDB.MinhaVisão(this).FromID(id);
         if (procurado == null)
         {
             onFound.Invoke(null, null, new DBException($"O registro de ID {id} não foi encontrado."));
             toRelease.Release();
         }
         else
         {
             Ações.Add(new Ação(Classes.Ações.Selecionar, procurado));
             OnAçãoChanged?.Invoke(this, null);
             onFound.Invoke(procurado, toRelease, null);
             Logger.Log($"Transação {Id}: Select {procurado}");
         }
     }, this);
 }
Ejemplo n.º 5
0
 public void Rollback()
 {
     SGDB.Rollback(this);
     CleanUp();
     Logger.Log($"Transação {Id}: Rollback");
 }
Ejemplo n.º 6
0
 public void Commit()
 {
     SGDB.Commit(this);
     CleanUp();
     Logger.Log($"Transação {Id}: Commit");
 }