@@ -97,16 +97,22 @@ class LanguageDBManager {
9797 /// - query: the query to run against the language database.
9898 /// - outputCols: the columns from which the values should come.
9999 /// - args: arguments to pass to `query`.
100- private func queryDBRows( query: String , outputCols _ : [ String ] , args: StatementArguments ) -> [ String ] {
100+ private func queryDBRows( query: String , outputCols: [ String ] , args: StatementArguments ) -> [ String ] {
101101 var outputValues = [ String] ( )
102102 do {
103103 guard let languageDB = database else { return [ ] }
104104 let rows = try languageDB. read { db in
105105 try Row . fetchAll ( db, sql: query, arguments: args)
106106 }
107107 for r in rows {
108- outputValues. append ( r [ " word " ] )
109- }
108+ // Loop through all columns.
109+ for col in outputCols {
110+ if let value = r [ col] as? String ,
111+ !value. trimmingCharacters ( in: . whitespaces) . isEmpty {
112+ outputValues. append ( value)
113+ }
114+ }
115+ }
110116 } catch let error as DatabaseError {
111117 let errorMessage = error. message
112118 let errorSQL = error. sql
@@ -301,20 +307,47 @@ extension LanguageDBManager {
301307
302308 /// Query the plural form of word in `nouns`.
303309 func queryNounPlural( of word: String ) -> [ String ] {
304- let query = """
305- SELECT
306- *
310+ let language = getControllerLanguageAbbr ( )
311+ let contract = ContractManager . shared. loadContract ( language: language)
307312
308- FROM
309- nouns
313+ let queryInfos = PluralManager . shared. buildPluralQuery (
314+ word: word,
315+ contract: contract
316+ )
310317
311- WHERE
312- noun = ?
313- """
314- let outputCols = [ " plural " ]
315- let args = [ word]
318+ // Try each query until we find a result.
319+ for queryInfo in queryInfos {
320+ let result = queryDBRow (
321+ query: queryInfo. query,
322+ outputCols: queryInfo. outputCols,
323+ args: StatementArguments ( queryInfo. args)
324+ )
316325
317- return queryDBRow ( query: query, outputCols: outputCols, args: StatementArguments ( args) )
326+ // If we found a result, return it.
327+ if result. count >= 2 && !result[ 1 ] . isEmpty {
328+ return [ result [ 1 ] ]
329+ }
330+ }
331+
332+ return [ ]
333+ }
334+
335+ /// Query all plural forms for the current language.
336+ func queryAllPluralForms( ) -> [ String ] ? {
337+ let language = getControllerLanguageAbbr ( )
338+ let contract = ContractManager . shared. loadContract ( language: language)
339+
340+ guard let queryInfo = PluralManager . shared. buildAllPluralsQuery ( contract: contract) else {
341+ return nil
342+ }
343+
344+ let result = queryDBRows (
345+ query: queryInfo. query,
346+ outputCols: queryInfo. outputCols,
347+ args: StatementArguments ( )
348+ )
349+
350+ return result == [ " " ] ? nil : result
318351 }
319352
320353 /// Query preposition form of word in `prepositions`.
0 commit comments