def read_masterdata(self, criteria):
     criteria_sql = list()
     for key, value in criteria.items():
         criteria_sql.append(SqlHelper.key_value_to_selection_sql(key, value))
     selection_sql = ' AND '.join(criteria_sql)
     q = '''
         SELECT `code`, `name`
         FROM masterdata
         WHERE ({selection_sql})
     '''.format(selection_sql=selection_sql)
     return self.fetch_as_dict(q)
    def words_with_pattern(self, input_word, exists=False):
        '''Return all words with the given pattern.

        Inputs
        ------
        pattern: word with periods as jokers.
        exists: flag indicating whether to check if a word merely has to exist.

        Returns
        -------
        If exists == False: List of words that match the input pattern. Words are capitalized.
        If exists == True: Boolean to indicate if a word with the given input pattern exists.

        Example
        -------
        >>> words_with_pattern('u.tge...en')
        >>> ['UITGEBETEN', 'UITGEBOGEN', 'UITGEGETEN', 'UITGEGETEN', 'UITGEGOTEN',
             'UITGEKOMEN', 'UITGEKOZEN', 'UITGELADEN', 'UITGELOPEN', 'UITGEMALEN',
             'UITGENEPEN', 'UITGEREDEN', 'UITGEREZEN', 'UITGEVAREN', 'UITGEWEKEN',
             'UITGEWEZEN', 'UITGEWOGEN', 'UITGEZETEN', 'UITGEZOGEN', 'UITGEZOPEN']
        '''
        selection = dict()
        for i, input_char in enumerate(input_word):
            if input_char != '.':
                field = 'letter{:02d}'.format(i + 1)
                selection[field] = input_char.upper()
        field = 'letter{:02d}'.format(i + 2)
        selection[field] = ''
        selection_sql = SqlHelper.criteria_dict_to_selection_sql(selection)

        sql = 'SELECT word FROM by_letter WHERE {}'.format(selection_sql)

        if exists:
            sql += ' LIMIT 1'
            r = self.db.fetch_as_array(sql)
            if not r:
                return False
            else:
                return True
        else:
            r = self.db.fetch_as_array(sql)
            return r