|
1 | 1 | package fr.berliat.hskwidget.data.dao |
2 | 2 |
|
3 | 3 | import androidx.room.Dao |
4 | | -import androidx.room.Embedded |
5 | 4 | import androidx.room.Query |
6 | | -import fr.berliat.hskwidget.data.model.ChineseWord |
7 | | -import fr.berliat.hskwidget.data.model.ChineseWordAnnotation |
8 | | - |
9 | | -data class AnnotatedChineseWord ( |
10 | | - @Embedded val word: ChineseWord?, |
11 | | - @Embedded val annotation: ChineseWordAnnotation?) { |
12 | | - |
13 | | - val simplified: String |
14 | | - get() { |
15 | | - return word?.simplified ?: annotation?.simplified!! |
16 | | - } |
17 | | - |
18 | | - companion object { |
19 | | - fun getBlank(simplified: String = ""): AnnotatedChineseWord { |
20 | | - return AnnotatedChineseWord( |
21 | | - ChineseWord.getBlank(simplified), |
22 | | - ChineseWordAnnotation.getBlank(simplified) |
23 | | - ) |
24 | | - } |
25 | | - } |
26 | | - |
27 | | - fun hasAnnotation(): Boolean { |
28 | | - return annotation?.firstSeen != null |
29 | | - } |
30 | | -} |
| 5 | +import fr.berliat.hskwidget.data.model.AnnotatedChineseWord |
31 | 6 |
|
32 | 7 | private const val select_left_join = |
33 | 8 | "SELECT a.a_simplified, COALESCE(w.simplified, a.a_simplified) simplified, a.a_searchable_text, " + |
@@ -63,6 +38,13 @@ interface AnnotatedChineseWordDAO { |
63 | 38 | " LIMIT :pageSize OFFSET (:page * :pageSize)") |
64 | 39 | suspend fun searchFromStrLike(str: String?, hasAnnotation: Boolean, page: Int = 0, pageSize: Int = 30): List<AnnotatedChineseWord> |
65 | 40 |
|
| 41 | + @Query("SELECT * FROM (" + |
| 42 | + " $select_left_join WHERE a.a_simplified IN (SELECT simplified FROM word_list_entries WHERE listId IN (:listIds) AND simplified NOT IN (:bannedWords))" + |
| 43 | + " UNION " + |
| 44 | + "$select_right_join WHERE w.simplified IN (SELECT simplified FROM word_list_entries WHERE listId IN (:listIds) AND simplified NOT IN (:bannedWords))" + |
| 45 | + ") ORDER BY RANDOM() LIMIT 1") |
| 46 | + suspend fun getRandomWordFromLists(listIds: List<Long>, bannedWords: Array<String>): AnnotatedChineseWord? |
| 47 | + |
66 | 48 | @Query("SELECT a.a_simplified, COALESCE(w.simplified, a.a_simplified) simplified, a.a_searchable_text, " + |
67 | 49 | " a.a_pinyins, a.notes, a.class_type, a.class_level, a.themes, a.first_seen, a.is_exam," + |
68 | 50 | " w.traditional, w.definition, w.hsk_level, w.pinyins, w.popularity, " + |
|
0 commit comments