Пример #1
0
        /// <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();
                }
            }
        }
Пример #2
0
        /// <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));
            }
        }
Пример #3
0
        /// <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();
                }
            }
        }
Пример #4
0
        /// <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));
            }
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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;
        }
Пример #7
0
        /// <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();
                }
            }
        }
Пример #8
0
        /// <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();
                }
            }
        }
Пример #9
0
        /// <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));
            }
        }
Пример #10
0
        /// <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));
            }
        }