From a88b4d409d1d2c33abca9c513e7a374b31e293f2 Mon Sep 17 00:00:00 2001 From: Marvin Elsen Date: Sat, 21 Sep 2024 18:03:58 +0200 Subject: [PATCH] Implement find characters query --- .../willow/domain/DatabaseQueryTest.kt | 6 ++++++ .../willow/domain/SqliteDictionary.kt | 17 ++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/com/marvinelsen/willow/domain/DatabaseQueryTest.kt b/src/main/kotlin/com/marvinelsen/willow/domain/DatabaseQueryTest.kt index 11e4dd2..fa4367a 100644 --- a/src/main/kotlin/com/marvinelsen/willow/domain/DatabaseQueryTest.kt +++ b/src/main/kotlin/com/marvinelsen/willow/domain/DatabaseQueryTest.kt @@ -20,9 +20,15 @@ fun main() { val (shangWords, time3) = measureTimedValue { sqliteDictionary.findWordsContaining(shang) } + val (characters, time4) = measureTimedValue { + val searchi = sqliteDictionary.search("師範大學", SearchMode.TRADITIONAL).first() + sqliteDictionary.findCharacters(searchi) + } println(searchResults) println(shangWords) + println(characters) println(time) println(time2) println(time3) + println(time4) } diff --git a/src/main/kotlin/com/marvinelsen/willow/domain/SqliteDictionary.kt b/src/main/kotlin/com/marvinelsen/willow/domain/SqliteDictionary.kt index ae7a90b..e6436c4 100644 --- a/src/main/kotlin/com/marvinelsen/willow/domain/SqliteDictionary.kt +++ b/src/main/kotlin/com/marvinelsen/willow/domain/SqliteDictionary.kt @@ -53,6 +53,12 @@ class SqliteDictionary(private val connection: Connection) : Dictionary { ) } + private val findCharacters = """ + SELECT traditional, simplified, pinyin_with_tone_marks, pinyin_with_tone_numbers, zhuyin, definitions + FROM cedict + WHERE traditional IN (?) + """.trimIndent() + override fun search(query: String, searchMode: SearchMode) = when (searchMode) { SearchMode.PINYIN -> searchPinyin(query) SearchMode.SIMPLIFIED -> searchSimplified(query) @@ -73,7 +79,16 @@ class SqliteDictionary(private val connection: Connection) : Dictionary { } override fun findCharacters(entry: DictionaryEntry): List { - return emptyList() + val characterList = entry.traditional + .split("") + .filter { it.isNotBlank() } + .joinToString(",") { "'$it'" } + + val query = findCharacters.replace("?", characterList) + + val resultSet: ResultSet = connection.createStatement().executeQuery(query) + + return resultSet.toListOfDictionaryEntries() } private fun searchSimplified(query: String): List {