示例#1
0
        public async Task CommitAsync()
        {
            try
            {
                // commit transaction if there is one active
                if (_transaction != null && _transaction.IsActive)
                {
                    _session.Flush();
                    _session.Clear();
                }

                if (_transaction != null)
                {
                    await _transaction.CommitAsync();
                }
            }
            catch
            {
                // rollback if there was an exception
                if (_transaction != null && _transaction.IsActive)
                {
                    await _transaction.RollbackAsync();
                }
                throw;
            }
            finally
            {
                CloseSession();
            }
        }
示例#2
0
        public async Task <ActionResult> Post([FromQuery] int zapisid, string filename, DateTime lastmodified, long size, [FromForm]  IFormFile file)
        {
            try
            {
                var dok = _session.Get <Zapis>(zapisid);


                //var kor = _session.QueryOver<Korisnik>()
                //        .Where(x => x.KorisnickoIme == User.Identity.Name)
                //        .SingleOrDefault<Korisnik>();

                //dok.Rbr = Helper.RedniBroj(_session, "zapis");
                using (var ms = new MemoryStream())
                {
                    await file.CopyToAsync(ms);

                    dok.Data             = ms.ToArray();
                    dok.Size             = size;
                    dok.FileName         = filename;
                    dok.DateLastModified = lastmodified;
                }

                _session.SaveOrUpdate(dok);
                _session.Flush();

                return(Json(new { Success = true, Message = "", Objekat = dok }));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                return(Json(new { Success = false, Message = ex.Message }));
            }
        }
示例#3
0
        public CategoryUpdateResponse Update(CategoryUpdateRequest request)
        {
            var response = new CategoryUpdateResponse();
            var existing = CheckForExisting(request.Name);

            if (existing != null && existing.Id != request.Id)
            {
                response.ErrorMessage = "Update would create a duplicate";
            }
            else
            {
                var existingById = _categoryRepository.Get(request.Id);

                if (existingById == null)
                {
                    response.ErrorMessage = "Category not found";
                }
                else
                {
                    _session.Flush();
                    existingById.Name       = request.Name;
                    existingById.LastUpdate = DateTime.UtcNow;
                    _categoryRepository.Update(existingById);

                    response.Category = new Category()
                    {
                        Id         = existingById.Id,
                        Name       = existingById.Name,
                        LastUpdate = existingById.LastUpdate
                    };
                }
            }

            return(response);
        }
示例#4
0
        public void AfterInvoke(object correlationState)
        {
            foreach (ISessionFactory sessionFactory in sfp)
            {
                ISession session = CurrentSessionContext.Unbind(sessionFactory);
                if (!session.IsOpen)
                {
                    continue;
                }

                try
                {
                    session.Flush();
                    if (session.Transaction.IsActive)
                    {
                        session.Transaction.Commit();
                    }
                }
                catch (Exception)
                {
                    if (session.Transaction.IsActive)
                    {
                        session.Transaction.Rollback();
                    }
                    throw;
                }
                finally
                {
                    session.Close();
                    session.Dispose();
                }
            }
        }
示例#5
0
        public FilmCreateResponse Add(FilmCreateRequest request)
        {
            var response = new FilmCreateResponse();

            // Get language
            var lang     = _languageRepository.Get(request.Film.LanguageId);
            var origLang = _languageRepository.Get(request.Film.OriginalLanguageId ?? 0);

            var film = new en.Film
            {
                Language         = lang,
                OriginalLanguage = origLang,
                Title            = request.Film.Title,
                Description      = request.Film.Description,
                ReleaseYear      = request.Film.ReleaseYear,
                RentalDuration   = request.Film.RentalDuration,
                Length           = request.Film.Length,
                RentalRate       = request.Film.RentalRate,
                Rating           = request.Film.Rating,
                SpecialFeatures  = request.Film.SpecialFeatures,
                ReplacementCost  = request.Film.ReplacementCost,
                LastUpdate       = DateTime.Now
            };

            _session.Save(film);
            _session.Flush();
            response.Film            = request.Film;
            response.Film.Id         = film.Id;
            response.Film.LastUpdate = film.LastUpdate;

            return(response);
        }
示例#6
0
        public async Task <ActionResult> Post([FromQuery] string entitet, int entitetid, string entitetopis, string filename, DateTime lastmodified, long size, [FromForm]  IFormFile file)
        {
            try
            {
                var dok = new Dokument()
                {
                    FileName = filename, Entitet = entitet, EntitetId = entitetid, EntitetOpis = entitetopis, DateLastModified = lastmodified, Size = size
                };

                using (var ms = new MemoryStream())
                {
                    await file.CopyToAsync(ms);

                    dok.Data             = ms.ToArray();
                    dok.DateLastModified = lastmodified;
                }

                _session.SaveOrUpdate(dok);
                _session.Flush();

                return(Json(new { Success = true, Message = "" }));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                return(Json(new { Success = false, Message = ex.Message }));
            }
        }
示例#7
0
        public object Save <T>(T entity) where T : class
        {
            NH.ISession session = Session;
            object      obj     = session.Save(entity);

            session.Flush();
            return(obj);
        }
示例#8
0
        public IActionResult Edit(Edit mdl)
        {
            User uID = _session.Get <User>(mdl.Id);

            using (var txn = _session.BeginTransaction())
            {
                uID.Id       = mdl.Id;
                uID.Username = mdl.UserName;
                uID.Password = mdl.Password;
                uID.Email    = mdl.Email;
                uID.DOB      = mdl.DOB;
                uID.Country  = mdl.Country;
                uID.Bio      = mdl.Bio;
                _session.SaveOrUpdate(uID);
                _session.Flush();
                txn.Commit();
            }
            return(RedirectToAction("Index"));
        }
 private void MvcApplication_EndRequest(object sender, System.EventArgs e)
 {
     if (Context.Items.Contains(NHibernateModule.SESSION_KEY))
     {
         Debug.WriteLine("Disposing the NHibernate session");
         NHibernate.ISession Session = (NHibernate.ISession)Context.Items[NHibernateModule.SESSION_KEY];
         Session.Flush();
         Session.Dispose();
         Context.Items[NHibernateModule.SESSION_KEY] = null;
     }
 }
示例#10
0
        public static void flushAndDisposeSession()
        {
            NHibernate.ISession currentSession = getCurrentSession();
            currentSession.Flush();

            //currentSession.Close();
            currentSession.Dispose();
            var context = httpContextAccessor.HttpContext;

            context.Items.Remove(CurrentSessionKey);
        }
示例#11
0
        public IActionResult Edit(Edit mdl)
        {
            Movie  mID    = _session.Get <Movie>(mdl.Id);
            Review review = mID.Reviews.SingleOrDefault(r => r.User.Id == _context.UserId);

            using (var txn = _session.BeginTransaction())
            {
                mID.Id            = mdl.Id;
                mID.MovieName     = mdl.MovieName;
                mID.LengthInMin   = mdl.LengthInMin;
                mID.Summary       = mdl.Summary;
                mID.Year          = mdl.Year;
                mID.Genre         = mdl.Genre;
                mID.ContentRating = mdl.ContentRating;
                mID.Language      = mdl.Language;
                review.Rating     = mdl.Rating;
                review.ReviewText = mdl.ReviewText;

                //_session.SaveOrUpdate(mID);
                _session.Flush();
                txn.Commit();
            }
            return(RedirectToAction("Index"));
        }
示例#12
0
        public ActionResult BrisiUplatu(int id)
        {
            //this.repo.find("Dokument?entitet=" + entitet + "&entitetopis=" + entitetoipis + "&entitetid" + entitet)
            try
            {
                var obj = _session.Load <Uplata>(id);
                obj.Obrisan = true;
                _session.SaveOrUpdate(obj);
                _session.Flush();
                return(Json(new { Success = true, Message = "", obj = true }));
            }

            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                return(Json(new { Success = false, Message = ex.Message }));
            }
        }
示例#13
0
 public void SaveOrUpdate <T>(T entity) where T : class
 {
     NH.ISession session = Session;
     session.SaveOrUpdate(entity);
     session.Flush();
 }
示例#14
0
 public void Delete <T>(T entity) where T : class
 {
     NH.ISession session = Session;
     session.Delete(entity);
     session.Flush();
 }
示例#15
0
        void OpenFiles (IList<string> filepaths, TreeNode rootNode = null)
        {
            try
            {
                var xml_filepaths = filepaths.Where(filepath => !filepath.EndsWith(".idpDB"));
                var idpDB_filepaths = filepaths.Where(filepath => filepath.EndsWith(".idpDB"));
                bool openSingleFile = xml_filepaths.Count() + idpDB_filepaths.Count() == 1;

                if (xml_filepaths.Count() + idpDB_filepaths.Count() == 0)
                {
                    if (Program.IsHeadless)
                    {
                        Console.Error.WriteLine("Headless mode must be passed some idpDB files to merge.");
                        Close();
                        return;
                    }
                    else
                        throw new Exception("no filepaths to open");
                }

                if (Program.IsHeadless && xml_filepaths.Any())
                    Program.HandleUserError(new Exception("headless mode only supports merging and filtering idpDB files"));

                // warn if idpDBs already exist
                bool warnOnce = false, skipReconvert = false;
                var skipFiles = new List<string>();
                foreach (string filepath in xml_filepaths)
                {
                    string idpDB_filepath = Path.ChangeExtension(filepath.Replace(".pep.xml", ".pepXML"), ".idpDB");
                    if (File.Exists(idpDB_filepath))
                    {
                        if (!warnOnce && MessageBox.Show("Some of these files have already been converted. Do you want to reconvert them?",
                                                         "Result already converted",
                                                         MessageBoxButtons.YesNo,
                                                         MessageBoxIcon.Exclamation,
                                                         MessageBoxDefaultButton.Button2) != DialogResult.Yes)
                            skipReconvert = true;
                        warnOnce = true;
                        if (skipReconvert)
                            skipFiles.Add(filepath);
                        else
                            File.Delete(idpDB_filepath);
                    }
                }
                xml_filepaths = xml_filepaths.Where(o => !skipFiles.Contains(o));
                idpDB_filepaths = idpDB_filepaths.Union(skipFiles.Select(o => Path.ChangeExtension(o.Replace(".pep.xml", ".pepXML"), ".idpDB")));


                // determine if merged filepath exists and that it's a valid idpDB
                var potentialPaths = filepaths.Select(item =>
                                                      Path.Combine(Path.GetDirectoryName(item) ?? string.Empty,
                                                                   Path.GetFileNameWithoutExtension(item) ??

                                                                   string.Empty) + ".idpDB").ToList();

                // for Mascot files (*.dat), use parseSource() to get the real filename, else save time by just using filename without extension
                var sourceNames = filepaths.Select(o => Path.Combine(Path.GetDirectoryName(o), o.ToLower().EndsWith(".dat") ? Parser.ParseSource(o) : Path.GetFileNameWithoutExtension(o.Replace(".pep.xml", ".pepXML")) + Path.GetExtension(o)));

                string commonFilepath = Util.GetCommonFilename(sourceNames);
                if (!openSingleFile && potentialPaths.Contains(commonFilepath))
                    commonFilepath = commonFilepath.Replace(".idpDB", " (merged).idpDB");
                string mergeTargetFilepath = defaultMergedOutputFilepath ?? commonFilepath;
                if (!openSingleFile && File.Exists(mergeTargetFilepath) && Program.IsHeadless)
                    File.Delete(mergeTargetFilepath);
                else
                {
                    // check that the single idpDB is writable; if not, it needs to be copied
                    if (openSingleFile)
                    {
                        // sanity check that file exists after the path manipulation above
                        if (idpDB_filepaths.Count() == 1 && !File.Exists(mergeTargetFilepath))
                            throw new Exception(String.Format("error in internal path manipulation for opening single idpDB: {0} transformed to {1} which does not exist", sourceNames.First(), mergeTargetFilepath));

                        string oldFilename = mergeTargetFilepath;

                        while (true)
                        {
                            if (canReadWriteInDirectory(Path.GetDirectoryName(mergeTargetFilepath)))
                                break;

                            MessageBox.Show("IDPicker files cannot be opened from a read-only location, pick a writable path to copy it to.");

                            if (!saveFileDialog(ref mergeTargetFilepath))
                                return;
                        }

                        // if location was changed, copy to the new location
                        if (oldFilename != mergeTargetFilepath)
                        {
                            toolStripStatusLabel.Text = "Copying idpDB...";
                            File.Copy(oldFilename, mergeTargetFilepath, true);
                        }
                    }
                    else
                    {
                        // if not headless and MergedOutputFilepath is unset,
                        // then give the user a chance to override the merge target location
                        if (!Program.IsHeadless &&
                            defaultMergedOutputFilepath == null &&
                            !saveFileDialog(ref mergeTargetFilepath, "Choose where to create the merged idpDB"))
                            return;

                        while (true)
                        {
                            if (!canReadWriteInDirectory(Path.GetDirectoryName(mergeTargetFilepath)))
                            {
                                MessageBox.Show("IDPicker files cannot be merged to a read-only location, pick a writable path.");

                                if (Program.IsHeadless || !saveFileDialog(ref mergeTargetFilepath, "Pick a writable path in which to create the merged idpDB"))
                                    return;

                                continue;
                            }

                            // the SaveFileDialog already asked the user to confirm overwriting an existing file
                            if (File.Exists(mergeTargetFilepath))
                                File.Delete(mergeTargetFilepath);

                            break;
                        }
                    }
                }

                // set main window title
                BeginInvoke(new MethodInvoker(() => Text = mergeTargetFilepath));

                //set up delayed messages so non-fatal errors that occur at the end arent lost
                var delayedMessages = new List<string[]>();
                if (xml_filepaths.Count() > 0)
                {
                    importCancelled = false;

                    // loop until the import settings don't result in any fatal errors, or user cancels
                    while (!importCancelled)
                    {
                        Parser parser = new Parser();
                        Invoke(new MethodInvoker(() => parser.ImportSettings += importSettingsHandler));

                        var ilr = new IterationListenerRegistry();

                        var progressForm = new ProgressForm(xml_filepaths, ilr)
                        {
                            Text = "Import Progress",
                            StartPosition = FormStartPosition.CenterParent,
                        };

                        Invoke(new MethodInvoker(() => progressForm.Show(this)));

                        try
                        {
                            parser.Parse(xml_filepaths, ilr);

                            // read log for non-fatal errors
                            //string log = Logger.Reader.ReadToEnd().Trim();
                            //if (log.Length > 0)
                            //    Invoke(new MethodInvoker(() => UserDialog.Show(this, "Log Messages", new TextBox {Multiline = true, Text = log.Replace("\n", "\r\n"), ReadOnly = true, Size = new Size(800, 600),  ScrollBars = ScrollBars.Both}, MessageBoxButtons.OK)));

                            break; // no fatal errors, break the loop
                        }
                        catch (Exception ex)
                        {
                            if (ex.Message.Contains("no peptides found mapping to a decoy protein") ||
                                ex.Message.Contains("peptides did not map to the database") ||
                                ex.Message.Contains("duplicate protein id"))
                                Program.HandleUserError(ex);
                            else
                                throw;
                        }
                        finally
                        {
                            importCancelled |= progressForm.Cancelled;
                            Invoke(new MethodInvoker(() => progressForm.Close()));
                        }
                    }

                    if (importCancelled)
                        return;

                    idpDB_filepaths = idpDB_filepaths.Union(xml_filepaths.Select(o => Path.ChangeExtension(o.Replace(".pep.xml", ".pepXML"), ".idpDB")));
                }

                if (idpDB_filepaths.Count() > 1)
                {
                    var merger = new MergerWrapper(mergeTargetFilepath, idpDB_filepaths);
                    toolStripStatusLabel.Text = "Merging results...";
                    merger.MergingProgress += progressMonitor.UpdateProgress;
                    merger.Start();

                    idpDB_filepaths = new List<string>() {mergeTargetFilepath};
                }

                // HACK: this needs to be handled more gracefully
                if (!IsHandleCreated)
                    return;

                if (Properties.GUI.Settings.Default.WarnAboutNonFixedDrive && !Util.IsPathOnFixedDrive(mergeTargetFilepath))
                {
                    string oldFilename = mergeTargetFilepath;
                    bool copyLocal = true;
                    Invoke(new MethodInvoker(() =>
                                                 {
                                                     var form = new NonFixedDriveWarningForm();
                                                     if (form.ShowDialog(this) == DialogResult.Ignore)
                                                         copyLocal = false;
                                                 }));

                    if (copyLocal)
                    {
                        string newFilename = Path.GetFileName(mergeTargetFilepath);
                        if (!saveFileDialog(ref newFilename, "Pick a local path to copy the idpDB to"))
                            return;

                        toolStripStatusLabel.Text = "Copying idpDB...";
                        File.Copy(oldFilename, newFilename, true);
                        mergeTargetFilepath = newFilename;

                        // set main window title
                        BeginInvoke(new MethodInvoker(() => Text = mergeTargetFilepath));
                    }
                }

                if (!IsHandleCreated)
                    return;

                Util.PrecacheFile(mergeTargetFilepath, progressMonitor.UpdateProgress);

                if (!IsHandleCreated)
                    return;

                BeginInvoke(new MethodInvoker(() =>
                {
                    clearProgress();
                    toolStripStatusLabel.Text = "Upgrading schema and creating session factory...";
                    statusStrip.Refresh();
                }));

                var sessionFactory = DataModel.SessionFactoryFactory.CreateSessionFactory(mergeTargetFilepath, new SessionFactoryConfig { WriteSqlToConsoleOut = true });
                if (logForm != null) logForm.SetSessionFactory(sessionFactory);

                BeginInvoke(new MethodInvoker(() =>
                {
                    // reload qonverter settings because the ids may change after merging
                    toolStripStatusLabel.Text = "Loading qonverter settings...";
                    statusStrip.Refresh();
                    session = sessionFactory.OpenSession();
                    session.DefaultReadOnly = true;

                    session.CreateSQLQuery("PRAGMA temp_store=MEMORY; PRAGMA mmap_size=70368744177664; -- 2^46").ExecuteUpdate();

                    toolStripStatusLabel.Text = "Refreshing group structure...";
                    statusStrip.Refresh();
                    var usedGroups = GroupingControlForm.SetInitialStructure(rootNode, session, defaultApplySourceGroupHierarchy);
                    if (usedGroups != null && usedGroups.Any())
                    {
                        var allGroupsByName = session.Query<SpectrumSourceGroup>().ToDictionary(o => o.Name);
                        var usedGroupsByName = usedGroups.ToDictionary(o => o.Name);

                        // if usedGroupsByName does not contain a key from allGroupsByName, delete the group
                        foreach (var unusedGroup in allGroupsByName.Where(o => !usedGroupsByName.ContainsKey(o.Key)))
                            session.Delete(unusedGroup);
                    }
                    session.Flush();

                    // check for embedded gene metadata;
                    // if it isn't there, ask the user if they want to embed it;
                    // if not, disable gene-related features
                    if (!Program.IsHeadless && !Embedder.HasGeneMetadata(mergeTargetFilepath) && Properties.GUI.Settings.Default.WarnAboutNoGeneMetadata)
                    {
                        bool embedGeneMetadata = true;
                        Invoke(new MethodInvoker(() =>
                                                     {
                                                         var form = new EmbedGeneMetadataWarningForm();
                                                         if (form.ShowDialog(this) == DialogResult.Ignore)
                                                             embedGeneMetadata = false;
                                                     }));

                        if (embedGeneMetadata)
                        {
                            loadRefSeqGeneMetadata(); // will call OpenFiles() after embedding, so return immediately
                            return;
                        }
                    }
                    else
                    {
                        // disable gene-related features
                    }


                    qonverterSettingsByAnalysis = session.Query<QonverterSettings>().ToDictionary(o => session.Get<Analysis>(o.Id));

                    _layoutManager.SetSession(session);

                    //set or save default layout
                    dockPanel.Visible = true;
                    _layoutManager.CurrentLayout = _layoutManager.GetCurrentDefault();

                    //breadCrumbControl.BreadCrumbs.Clear();

                    // pick a default RoundToNearest based on number of distinct modifications
                    decimal roundToNearest = 1m;
                    var distinctModificationFormat = new DistinctMatchFormat();
                    var modMasses = session.CreateQuery("SELECT DISTINCT mod.MonoMassDelta FROM Modification mod").List<double>();
                    for (int i = 4; i > 0; --i)
                    {
                        distinctModificationFormat.ModificationMassRoundToNearest = (decimal) (1.0 / Math.Pow(10, i));
                        if (modMasses.Select(o => distinctModificationFormat.Round(o)).Distinct().Count() < 30)
                        {
                            roundToNearest = distinctModificationFormat.ModificationMassRoundToNearest.Value;
                            break;
                        }
                    }
                    modificationTableForm.RoundToNearest = roundToNearest;

                    basicFilter = DataFilter.LoadFilter(session);

                    // if user has overridden filters from the command-line, make sure to reapply the filter
                    if (!defaultDataFilter.PersistentDataFilter.Equals(defaultDataFilter.OriginalPersistentDataFilter))
                        basicFilter = null;

                    if (basicFilter == null)
                    {
                        basicFilter = new DataFilter(defaultDataFilter);
                        basicFilterControl.DataFilter = basicFilter;

                        viewFilter = basicFilter;

                        ApplyBasicFilter();
                    }
                    else
                    {
                        basicFilterControl.DataFilter = basicFilter;

                        viewFilter = basicFilter;

                        try
                        {
                            // check that the unfiltered tables exist
                            session.CreateSQLQuery("SELECT COUNT(*) FROM UnfilteredProtein").UniqueResult();

                            setData();
                        }
                        catch
                        {
                            ApplyBasicFilter();
                        }
                    }

                    if (TestUILayout)
                    {
                        int i = 0;
                        foreach(var form in dockPanel.Contents)
                        {
                            ++i;
                            form.DockingHandler.DockAreas = (form.DockingHandler.DockAreas | DockAreas.Float);
                            var rect = dockPanel.ClientRectangle;
                            rect.Offset(i * 15, i * 15);
                            rect.Size = new System.Drawing.Size(960, 600);
                            form.DockingHandler.Show(dockPanel, rect);
                        }
                    }

                    toolStripStatusLabel.Text = "Ready";
                    Activate();
                }));

                //show list of delayed non-fatal errors
                if (delayedMessages.Any())
                {
                    var sb = new StringBuilder();
                    foreach (var message in delayedMessages)
                        sb.AppendLine(string.Format("{0}:{1}{2}{1}", message[0], Environment.NewLine, message[1]));
                    var messageString = sb.ToString();

                    ShowExpandedMessageBox(messageString);
                }
            }
            catch (Exception ex)
            {
                Program.HandleException(ex);
            }
        }
示例#16
0
 public void Commit()
 {
     session.Flush();
 }
示例#17
0
        private static void OptionsScreen(NHibernate.ISession session)
        {
            Console.WriteLine("Recepie Database.");
            Console.WriteLine();
            Console.WriteLine("Make a choise: ");
            Console.WriteLine("[1] Create new recepie");
            Console.WriteLine("[2] Remove recepie");
            Console.WriteLine("[3] Update recepie");
            Console.WriteLine("[4] Display all recepies");
            Console.WriteLine("[5] Search recepies by category");
            Console.WriteLine("[6] Search recepies by ingredient");
            //Console.WriteLine("[S]earch recepies by recepie name");
            Console.WriteLine("[7] Generate new recepielist");
            Console.WriteLine("[8] Display all recepielists");
            Console.WriteLine("[F]ill with testdata");
            Console.WriteLine("[D]elete entire database ");
            Console.WriteLine("[C]reate database");
            Console.WriteLine("[Q]uit");
            Console.Write("");
            string choise = Console.ReadLine();

            switch (choise.ToUpper())
            {
            case "1":
                CreateNewRecepie(session);
                OptionsScreen(session);
                break;

            case "2":
                RemoveRecepie();
                OptionsScreen(session);
                break;

            case "3":
                UpdateRecepie();
                OptionsScreen(session);
                break;

            case "4":
                session.Flush();
                DisplayRecepies(session);
                break;

            case "5":
                DisplayRecepiesByCategory(session);
                break;

            case "6":
                DisplayRecepiesByIngredient(session);
                break;

            //case "S":
            //    SearchRecepies();
            //    DisplayRecepieProperties(session);
            //    break;
            case "7":
                GenerateRecepielist(session);
                OptionsScreen(session);
                break;

            case "8":
                DispalyRecepieLists(session);
                OptionsScreen(session);
                break;

            case "F":
                GenerateTestData(session);
                OptionsScreen(session);
                break;

            case "D":
                DeleteDatabase();
                session.Flush();
                OptionsScreen(session);
                break;

            case "C":
                CreateDatabase();
                session.Flush();
                OptionsScreen(session);
                break;

            case "Q":
                DbService.CloseSession(session);
                break;

            default:
                OptionsScreen(session);
                break;
            }
        }