'Promotes the join type of an alias to an outer join if it\'s possible
for the join to contain NULL values on the left. If \'unconditional\' is
False, the join is only promoted if it is nullable, otherwise it is
always promoted.
Returns True if the join was promoted.'

def promote_alias(self, alias, unconditional=False):

    if ((unconditional or self.alias_map[alias][NULLABLE]) and (self.alias_map[alias][JOIN_TYPE] != self.LOUTER)):
        data = list(self.alias_map[alias])
        data[JOIN_TYPE] = self.LOUTER
        self.alias_map[alias] = tuple(data)
        return True
    return False
