def get_uta_by_keyword( database, keyword ):
    """
    Returns the unicode encoded uta corresponding to index,
    dictionary of number, subject, kundoku
    """
    keyword = unsafe2safe( keyword.decode( 'utf-8' ) )
    where   = ' OR '.join(
        [ '%(key)s LIKE \'%%%(target)s%%\'' % dict
          ( key    = key,
            target = '%'.join( [ char
                                 for char in keyword ] ) )
          for key in [ 'subject', 'original', 'kundoku', 'kana', 'sachu',
                       'koui', 'jikou', 'kuni' ] ] )
    query   = SQL_UTA_BY_KEYWORD + where
    fetched = database_fetch( database, query )
    return dict( [ [ int( uta[ 'id' ] ),
                     dict( number   = dec( uta[ 'number' ] ),
                           subject  = dec( uta[ 'subject' ] ),
                           original = dec( uta[ 'original' ] ),
                           kundoku  = dec( uta[ 'kundoku' ] ),
                           kana     = dec( uta[ 'kana' ] ),
                           sachu    = dec( uta[ 'sachu' ] ),
                           koui     = dec( uta[ 'koui' ] ),
                           jikou    = dec( uta[ 'jikou' ] ),
                           kuni     = dec( uta[ 'kuni' ] ), ) ]
                   for uta in fetched ] )
def transition_of_num_of_registered():
    'the transition of number of registered users'
    database = database_open()
    database_execute( database, "SET max_error_count = 0" )
    fetched  = database_fetch( database, SQL_TRANSITION_USERS )
    database_execute( database, "SET max_error_count = 64" )
    database_close( database )
    return fetched
def get_user_by_mail( database, mail_address ):
    "get user id from user's mail address"
    query   = ''.join( [ 'SELECT id FROM manyoushu_personal_information WHERE ',
                         'mail_address = \'%s\'' % mail_address ] )
    fetched = database_fetch( database, query )
    if len( fetched ) < 1:
        return None
    else:
        return fetched[ 0 ]
def num_of_registered():
    'the number of registerd users'
    database = database_open()
    fetched  = database_fetch( database, SQL_NUM_OF_REGISTERED )
    database_close( database )
    try:
        return fetched[ 0 ][ 'COUNT( * )' ]
    except:
        return 0
def get_uta_by_indices( database, indices ):
    """
    Returns the unicode encoded uta corresponding to index,
    dictionary of number, subject, kundoku
    """
    indices = set( [ index % NUM_OF_UTA for index in indices ] )
    query   = ''.join( [ 'SELECT id, number, subject, kundoku FROM ',
                         'manyoushu_text WHERE ',
                         ' OR '.join( [ 'id = %d' % index
                                        for index in indices ] ) ] )
    fetched = database_fetch( database, query )
    return dict( [ [ int( uta[ 'id' ] ),
                     dict( number  = dec( uta[ 'number' ] ),
                           subject = dec( uta[ 'subject' ] ),
                           kundoku = dec( uta[ 'kundoku' ] ), ) ]
                   for uta in fetched ] )
def get_user_by_date( database, day, hour ):
    'get users corresponding to day and hour'
    query = SQL_USER_DATE % dict( day = day, hour = hour )
    return database_fetch( database, query )