def getMorphemesFromDB(self, expression, deck, language):
     
     # Unique Morphemes
     log("Extract Morphemes")
     morphLemmes = self.extractMorphemes(expression, deck, language)
     factMorphemes = list()
     for morphemeLemme in morphLemmes:
         morphLemmeDB = self.lemmeDao.find(morphemeLemme)
         if morphLemmeDB == None:
             morpheme = Morpheme(0, 0, -1, None, 0, -1)
             morpheme.morphLemme = morphemeLemme
         else:
             morpheme = self.morphemeDao.findByLemmeId(morphLemmeDB.id)
             if morpheme == None:
                 continue
             morpheme.morphLemme = morphLemmeDB
         if morpheme not in factMorphemes:
             factMorphemes.append(morpheme)
     return factMorphemes
 def getMorphemes(self, decksId = None, expressions = None, status = None, status_changed = None, pos = None, subPos = None):
     
     db = self.learnXdB.openDataBase()
     c = db.cursor()
     
     sql = "Select base, pos, sub_pos, read, m.id, m.status, m.status_changed, mm.id, count(fm.fact_id) as c, m.score "
     sql += "From Morphemes m, FactsMorphemes fm, MorphemeLemmes mm, Facts f "
     
     if decksId != None:
         sql += ", Decks d "
     
     sql += "Where mm.id = m.morph_lemme_id and m.id = fm.morpheme_id and f.id = fm.fact_id "
     
     if decksId != None:
         sql += "and d.id = f.deck_id "
     
     t = list()
     if expressions != None:
         for expression in expressions:
             sql += " and (mm.base like ? or mm.read like ?) " 
             t.append("%" + expression + "%")
             t.append("%" + expression + "%")
     if status != None:
         sql += "and m.status = ? " 
         t.append(status)
     if status_changed != None:
         sql += "and m.status_changed = ? " 
         if status_changed:
             t.append(1)
         else:
             t.append(0)
     if pos != None:
         sql += "and pos = ? "
         t.append(pos)
     if subPos != None:
         sql += "and sub_pos = ? "
         t.append(subPos)
     if decksId != None and len(decksId) > 0:
         sql += "and ("
         i = 1
         for deckId in decksId:
             t.append(deckId)
             sql += "d.id = ?"
             if i < len(decksId):
                 sql += " or "
             i += 1
         sql += ")"
     
     sql += " group by m.id"
     
     log("getMorphemes SQL Start")
     log(sql)
     log(t)
     if len(t) > 0:
         c.execute(sql, t)
     else:
         c.execute(sql)
     log("getMorphemes SQL End")
     
     log("getMorphemes get Result Start")
     morphemes = []
     for row in c:
         morphemeLemme = MorphemeLemme(row[0], None, row[1], row[2], row[3], row[4])
         morpheme = Morpheme(row[5], row[6], row[7], morphemeLemme, row[9], row[4])
         morpheme.factsCount = row[8]
         morphemes.append(morpheme)
     log("getMorphemes get Result End")
     
     c.close()
     
     return morphemes