diff --git a/src/main/kotlin/com/marvinelsen/willow/domain/SqliteDictionary.kt b/src/main/kotlin/com/marvinelsen/willow/domain/SqliteDictionary.kt index 33cb18e..6604662 100644 --- a/src/main/kotlin/com/marvinelsen/willow/domain/SqliteDictionary.kt +++ b/src/main/kotlin/com/marvinelsen/willow/domain/SqliteDictionary.kt @@ -78,10 +78,11 @@ class SqliteDictionary(private val connection: Connection) : Dictionary { } private val findCharacters = """ - WITH cte(id, character) AS (VALUES ?) + WITH cte(id, character, syllable) AS (VALUES ?) SELECT traditional, simplified, pinyin_with_tone_marks, pinyin_with_tone_numbers, zhuyin, cedict_definitions, cross_straits_definitions, moe_definitions FROM entry INNER JOIN cte ON cte.character = entry.traditional OR cte.character = entry.simplified + WHERE cte.syllable = entry.pinyin_with_tone_numbers ORDER BY cte.id """.trimIndent() @@ -105,13 +106,24 @@ class SqliteDictionary(private val connection: Connection) : Dictionary { } override fun findCharacters(entry: DictionaryEntry): List { - val characterList = entry.traditional + val pinyinSyllablesWithToneNumbers = entry.pinyinWithToneNumbers + .lowercase() + .split(" ") + .filter { it.isNotBlank() } + + val characters = entry.traditional .split("") .filter { it.isNotBlank() } - .mapIndexed { index, s -> "($index, '$s')" } + .filter { it != "," } + .filter { it != "·" } + + val charactersWithSyllables = characters.zip(pinyinSyllablesWithToneNumbers) + + val queryInput = charactersWithSyllables + .mapIndexed { index, s -> "($index, '${s.first}', '${s.second}')" } .joinToString(",") - val query = findCharacters.replace("?", characterList) + val query = findCharacters.replace("?", queryInput) val resultSet: ResultSet = connection.createStatement().executeQuery(query)