void RollbackOrCommit() { if ( Rollback ) { Log.Reset(); Commit( CommitStage.Rollback ); Rollback = false; } else { Commit( CommitStage.Prepare ); if ( Log.Commit() ) { Commit( CommitStage.Write ); Commit( CommitStage.Flush ); foreach ( long fileId in DeletedFiles ) { var f = new IO.FileInfo( Name + fileId ); f.Delete(); } Log.Reset(); } } DeletedFiles.Clear(); }
/* Private methods */ void RollbackOrCommit() { if ( Rollback ) { Log.Reset(); foreach( G.KeyValuePair<string,Schema> p in SchemaDict ) foreach( G.KeyValuePair<string,TableExpression> q in p.Value.TableDict ) q.Value.Rollback(); Rollback = false; } else { // Save indexes to underlying buffered streams ( can add more Log entries ). SysStringIndex.PrepareToCommit(); SysBinaryIndex.PrepareToCommit(); foreach( G.KeyValuePair<string,Schema> p in SchemaDict ) foreach( G.KeyValuePair<string,TableExpression> q in p.Value.TableDict ) q.Value.PrepareToCommit(); if ( Log.Commit() ) { SysString.Flush(); SysStringIndex.Commit(); SysBinary.Flush(); SysBinaryIndex.Commit(); foreach( G.KeyValuePair<string,Schema> p in SchemaDict ) foreach( G.KeyValuePair<string,TableExpression> q in p.Value.TableDict ) q.Value.Commit(); foreach ( long fileId in DeletedFiles ) { var f = new IO.FileInfo( Name + fileId ); f.Delete(); } Log.Reset(); } } DeletedFiles.Clear(); }