/// <summary> /// Gets all reviews due for the current date. /// </summary> /// <returns>Reviews due for the current date.</returns> public IEnumerable <SrsEntry> GetReviews() { DaoConnection connection = null; try { connection = DaoConnection.Open(DaoConnectionEnum.SrsDatabase); IEnumerable <NameValueCollection> results = connection.Query( "SELECT * FROM " + SqlHelper.Table_SrsEntry + " se WHERE se." + SqlHelper.Field_SrsEntry_SuspensionDate + " IS NULL AND se." + SqlHelper.Field_SrsEntry_NextAnswerDate + " <= @date" + " ORDER BY RANDOM()", new DaoParameter("@date", DateTime.UtcNow.Ticks)); SrsEntryBuilder srsEntryBuilder = new SrsEntryBuilder(); foreach (NameValueCollection nvcEntry in results) { yield return(srsEntryBuilder.BuildEntity(nvcEntry, null)); } } finally { if (connection != null) { connection.Dispose(); } } }
/// <summary> /// Retrieves and includes the SRS entries matching the given kanji and includes /// them in the entity. /// </summary> internal static void IncludeSrsEntries(DaoConnection connection, KanjiEntity kanji) { IEnumerable <NameValueCollection> nvcEntries = connection.Query( string.Format("SELECT * FROM {0} srs WHERE srs.{1}=@k", SqlHelper.Table_SrsEntry, SqlHelper.Field_SrsEntry_AssociatedKanji), new DaoParameter("@k", kanji.Character)); SrsEntryBuilder srsEntryBuilder = new SrsEntryBuilder(); foreach (NameValueCollection nvcEntry in nvcEntries) { kanji.SrsEntries.Add(srsEntryBuilder.BuildEntity(nvcEntry, null)); } }
/// <summary> /// Gets a filtered set of SRS entries. /// </summary> /// <param name="filterClauses">Filter clauses.</param> /// <returns>Filtered SRS entries.</returns> public IEnumerable <SrsEntry> GetFilteredItems(FilterClause[] filterClauses) { List <DaoParameter> parameters = new List <DaoParameter>(); string whereClause = string.Empty; bool isFiltered = false; foreach (FilterClause clause in filterClauses) { if (clause != null) { string sqlClause = clause.GetSqlWhereClause(!isFiltered, parameters); if (!string.IsNullOrEmpty(sqlClause)) { whereClause += sqlClause + " "; isFiltered = true; } } } DaoConnection connection = null; try { connection = DaoConnection.Open(DaoConnectionEnum.SrsDatabase); IEnumerable <NameValueCollection> results = connection.Query( "SELECT * FROM " + SqlHelper.Table_SrsEntry + " se " + whereClause + "ORDER BY (se." + SqlHelper.Field_SrsEntry_CreationDate + ") DESC", parameters.ToArray()); SrsEntryBuilder srsEntryBuilder = new SrsEntryBuilder(); foreach (NameValueCollection nvcEntry in results) { yield return(srsEntryBuilder.BuildEntity(nvcEntry, null)); } } finally { if (connection != null) { connection.Dispose(); } } }
/// <summary> /// Retrieves and includes the SRS entries matching the given vocab and includes /// them in the entity. /// </summary> private void IncludeSrsEntries(DaoConnection connection, VocabEntity vocab) { string value = string.IsNullOrEmpty(vocab.KanjiWriting) ? vocab.KanaWriting : vocab.KanjiWriting; IEnumerable <NameValueCollection> nvcEntries = connection.Query( string.Format("SELECT * FROM {0} srs WHERE srs.{1}=@k", SqlHelper.Table_SrsEntry, SqlHelper.Field_SrsEntry_AssociatedVocab), new DaoParameter("@k", value)); SrsEntryBuilder srsEntryBuilder = new SrsEntryBuilder(); foreach (NameValueCollection nvcEntry in nvcEntries) { vocab.SrsEntries.Add(srsEntryBuilder.BuildEntity(nvcEntry, null)); } }
/// <summary> /// Gets a similar item (same kanji reading and type) if found. /// </summary> /// <param name="entry">Reference entry.</param> /// <returns>The first matching item if found. Null otherwise.</returns> public SrsEntry GetSimilarItem(SrsEntry entry) { SrsEntry r = null; DaoConnection connection = null; try { connection = DaoConnection.Open(DaoConnectionEnum.SrsDatabase); List <DaoParameter> parameters = new List <DaoParameter>(); string request = "SELECT * FROM " + SqlHelper.Table_SrsEntry + " se WHERE se."; if (!string.IsNullOrEmpty(entry.AssociatedKanji)) { request += SqlHelper.Field_SrsEntry_AssociatedKanji; parameters.Add(new DaoParameter("@kr", entry.AssociatedKanji)); } else { request += SqlHelper.Field_SrsEntry_AssociatedVocab; parameters.Add(new DaoParameter("@kr", entry.AssociatedVocab)); } request += "=@kr"; NameValueCollection result = connection.Query(request, parameters.ToArray()).FirstOrDefault(); if (result != null) { SrsEntryBuilder builder = new SrsEntryBuilder(); r = builder.BuildEntity(result, null); } } finally { if (connection != null) { connection.Dispose(); } } return(r); }
/// <summary> /// Gets a similar item (same kanji reading and type) if found. /// </summary> /// <param name="entry">Reference entry.</param> /// <returns>The first matching item if found. Null otherwise.</returns> public SrsEntry GetSimilarItem(SrsEntry entry) { SrsEntry r = null; DaoConnection connection = null; try { connection = DaoConnection.Open(DaoConnectionEnum.SrsDatabase); List<DaoParameter> parameters = new List<DaoParameter>(); string request = "SELECT * FROM " + SqlHelper.Table_SrsEntry + " se WHERE se."; if (!string.IsNullOrEmpty(entry.AssociatedKanji)) { request += SqlHelper.Field_SrsEntry_AssociatedKanji; parameters.Add(new DaoParameter("@kr", entry.AssociatedKanji)); } else { request += SqlHelper.Field_SrsEntry_AssociatedVocab; parameters.Add(new DaoParameter("@kr", entry.AssociatedVocab)); } request += "=@kr"; NameValueCollection result = connection.Query(request, parameters.ToArray()).FirstOrDefault(); if (result != null) { SrsEntryBuilder builder = new SrsEntryBuilder(); r = builder.BuildEntity(result, null); } } finally { if (connection != null) { connection.Dispose(); } } return r; }
/// <summary> /// Gets a filtered set of SRS entries. /// </summary> /// <param name="filterClauses">Filter clauses.</param> /// <returns>Filtered SRS entries.</returns> public IEnumerable<SrsEntry> GetFilteredItems(FilterClause[] filterClauses) { List<DaoParameter> parameters = new List<DaoParameter>(); string whereClause = string.Empty; bool isFiltered = false; foreach (FilterClause clause in filterClauses) { if (clause != null) { string sqlClause = clause.GetSqlWhereClause(!isFiltered, parameters); if (!string.IsNullOrEmpty(sqlClause)) { whereClause += sqlClause + " "; isFiltered = true; } } } DaoConnection connection = null; try { connection = DaoConnection.Open(DaoConnectionEnum.SrsDatabase); IEnumerable<NameValueCollection> results = connection.Query( "SELECT * FROM " + SqlHelper.Table_SrsEntry + " se " + whereClause + "ORDER BY (se." + SqlHelper.Field_SrsEntry_CreationDate + ") DESC", parameters.ToArray()); SrsEntryBuilder srsEntryBuilder = new SrsEntryBuilder(); foreach (NameValueCollection nvcEntry in results) { yield return srsEntryBuilder.BuildEntity(nvcEntry, null); } } finally { if (connection != null) { connection.Dispose(); } } }
/// <summary> /// Gets all reviews due for the current date. /// </summary> /// <returns>Reviews due for the current date.</returns> public IEnumerable<SrsEntry> GetReviews() { DaoConnection connection = null; try { connection = DaoConnection.Open(DaoConnectionEnum.SrsDatabase); IEnumerable<NameValueCollection> results = connection.Query( "SELECT * FROM " + SqlHelper.Table_SrsEntry + " se WHERE se." + SqlHelper.Field_SrsEntry_SuspensionDate + " IS NULL AND se." + SqlHelper.Field_SrsEntry_NextAnswerDate + " <= @date" + " ORDER BY RANDOM()", new DaoParameter("@date", DateTime.UtcNow.Ticks)); SrsEntryBuilder srsEntryBuilder = new SrsEntryBuilder(); foreach (NameValueCollection nvcEntry in results) { yield return srsEntryBuilder.BuildEntity(nvcEntry, null); } } finally { if (connection != null) { connection.Dispose(); } } }
/// <summary> /// Retrieves and includes the SRS entries matching the given vocab and includes /// them in the entity. /// </summary> private void IncludeSrsEntries(DaoConnection connection, VocabEntity vocab) { string value = string.IsNullOrEmpty(vocab.KanjiWriting) ? vocab.KanaWriting : vocab.KanjiWriting; IEnumerable<NameValueCollection> nvcEntries = connection.Query( "SELECT * " + "FROM " + SqlHelper.Table_SrsEntry + " srs " + "WHERE srs." + SqlHelper.Field_SrsEntry_AssociatedVocab + "=@k", new DaoParameter("@k", value)); SrsEntryBuilder srsEntryBuilder = new SrsEntryBuilder(); foreach (NameValueCollection nvcEntry in nvcEntries) { vocab.SrsEntries.Add(srsEntryBuilder.BuildEntity(nvcEntry, null)); } }
/// <summary> /// Retrieves and includes the SRS entries matching the given kanji and includes /// them in the entity. /// </summary> internal static void IncludeSrsEntries(DaoConnection connection, KanjiEntity kanji) { IEnumerable<NameValueCollection> nvcEntries = connection.Query( "SELECT * " + "FROM " + SqlHelper.Table_SrsEntry + " srs " + "WHERE srs." + SqlHelper.Field_SrsEntry_AssociatedKanji + "=@k", new DaoParameter("@k", kanji.Character)); SrsEntryBuilder srsEntryBuilder = new SrsEntryBuilder(); foreach (NameValueCollection nvcEntry in nvcEntries) { kanji.SrsEntries.Add(srsEntryBuilder.BuildEntity(nvcEntry, null)); } }