/// <summary> /// Retrieves all radicals. /// </summary> public IEnumerable <RadicalEntity> GetAllRadicals() { DaoConnection connection = null; try { connection = DaoConnection.Open(DaoConnectionEnum.KanjiDatabase); IEnumerable <NameValueCollection> results = connection.Query( string.Format("SELECT * FROM {0}", SqlHelper.Table_Radical)); RadicalBuilder radicalBuilder = new RadicalBuilder(); foreach (NameValueCollection nvcRadical in results) { RadicalEntity radical = radicalBuilder.BuildEntity(nvcRadical, null); IncludeKanji(connection, radical); yield return(radical); } } finally { if (connection != null) { connection.Dispose(); } } }
/// <summary> /// Retrieves all radicals. /// </summary> public IEnumerable<RadicalEntity> GetAllRadicals() { DaoConnection connection = null; try { connection = DaoConnection.Open(DaoConnectionEnum.KanjiDatabase); IEnumerable<NameValueCollection> results = connection.Query( "SELECT * FROM " + SqlHelper.Table_Radical); RadicalBuilder radicalBuilder = new RadicalBuilder(); foreach (NameValueCollection nvcRadical in results) { RadicalEntity radical = radicalBuilder.BuildEntity(nvcRadical, null); IncludeKanji(connection, radical); yield return radical; } } finally { if (connection != null) { connection.Dispose(); } } }
/// <summary> /// Retrieves and includes the radicals of the given kanji in the entity. /// </summary> internal static void IncludeRadicals(DaoConnection connection, KanjiEntity kanji) { IEnumerable <NameValueCollection> nvcRadicals = connection.Query( string.Format("SELECT * FROM {0} r JOIN {1} kr ON (kr.{2}=r.{3}) WHERE kr.{4}=@kanjiId;", SqlHelper.Table_Radical, SqlHelper.Table_Kanji_Radical, SqlHelper.Field_Kanji_Radical_RadicalId, SqlHelper.Field_Radical_Id, SqlHelper.Field_Kanji_Radical_KanjiId), new DaoParameter("@kanjiId", kanji.ID)); RadicalBuilder radicalBuilder = new RadicalBuilder(); foreach (NameValueCollection nvcRadical in nvcRadicals) { // For each meaning result : build a radical and set the associations. RadicalEntity radical = radicalBuilder.BuildEntity(nvcRadical, null); kanji.Radicals.Add(radical); } }
/// <summary> /// Computes and returns which radicals can still be used in a kanji filter in complement to the /// given set of filters, and still return kanji results. /// </summary> public IEnumerable <RadicalEntity> GetAvailableRadicals(RadicalGroup[] radicals, string textFilter, string meaningFilter, string anyReadingFilter, string onYomiFilter, string kunYomiFilter, string nanoriFilter, int jlptLevel, int wkLevel) { // Compute the filters. List <DaoParameter> parameters = new List <DaoParameter>(); string sqlFilter = KanjiDao.BuildKanjiFilterClauses(parameters, radicals, textFilter, meaningFilter, anyReadingFilter, onYomiFilter, kunYomiFilter, nanoriFilter, jlptLevel, wkLevel); DaoConnection connection = null; try { connection = DaoConnection.Open(DaoConnectionEnum.KanjiDatabase); IEnumerable <NameValueCollection> results = connection.Query( string.Format( "SELECT DISTINCT ckr.{0} Id " + "FROM {1} k JOIN {2} ckr " + "ON (ckr.{3}=k.{4}) {5}", SqlHelper.Field_Kanji_Radical_RadicalId, SqlHelper.Table_Kanji, SqlHelper.Table_Kanji_Radical, SqlHelper.Field_Kanji_Radical_KanjiId, SqlHelper.Field_Kanji_Id, sqlFilter), parameters.ToArray()); RadicalBuilder radicalBuilder = new RadicalBuilder(); foreach (NameValueCollection nvcRadical in results) { RadicalEntity radical = radicalBuilder.BuildEntity(nvcRadical, null); yield return(radical); } } finally { if (connection != null) { connection.Dispose(); } } }
/// <summary> /// Computes and returns which radicals can still be used in a kanji filter in complement to the /// given set of filters, and still return kanji results. /// </summary> public IEnumerable<RadicalEntity> GetAvailableRadicals(RadicalGroup[] radicals, string textFilter, string meaningFilter, string anyReadingFilter, string onYomiFilter, string kunYomiFilter, string nanoriFilter) { // Compute the filters. List<DaoParameter> parameters = new List<DaoParameter>(); string sqlFilter = KanjiDao.BuildKanjiFilterClauses(parameters, radicals, textFilter, meaningFilter, anyReadingFilter, onYomiFilter, kunYomiFilter, nanoriFilter); DaoConnection connection = null; try { connection = DaoConnection.Open(DaoConnectionEnum.KanjiDatabase); IEnumerable<NameValueCollection> results = connection.Query( "SELECT DISTINCT ckr." + SqlHelper.Field_Kanji_Radical_RadicalId + " Id " + "FROM " + SqlHelper.Table_Kanji + " k " + "JOIN " + SqlHelper.Table_Kanji_Radical + " ckr " + "ON (ckr." + SqlHelper.Field_Kanji_Radical_KanjiId + "=k." + SqlHelper.Field_Kanji_Id + ") " + sqlFilter, parameters.ToArray()); RadicalBuilder radicalBuilder = new RadicalBuilder(); foreach (NameValueCollection nvcRadical in results) { RadicalEntity radical = radicalBuilder.BuildEntity(nvcRadical, null); yield return radical; } } finally { if (connection != null) { connection.Dispose(); } } }
/// <summary> /// Retrieves and includes the radicals of the given kanji in the entity. /// </summary> internal static void IncludeRadicals(DaoConnection connection, KanjiEntity kanji) { IEnumerable<NameValueCollection> nvcRadicals = connection.Query( "SELECT * " + "FROM " + SqlHelper.Table_Radical + " r " + "JOIN " + SqlHelper.Table_Kanji_Radical + " kr " + "ON (kr." + SqlHelper.Field_Kanji_Radical_RadicalId + "=r." + SqlHelper.Field_Radical_Id + ") " + "WHERE kr." + SqlHelper.Field_Kanji_Radical_KanjiId + "=@kanjiId;", new DaoParameter("@kanjiId", kanji.ID)); RadicalBuilder radicalBuilder = new RadicalBuilder(); foreach (NameValueCollection nvcRadical in nvcRadicals) { // For each meaning result : build a radical and set the associations. RadicalEntity radical = radicalBuilder.BuildEntity(nvcRadical, null); kanji.Radicals.Add(radical); } }