'Construct a new :class:`.Exists` against an existing
:class:`.Select` object.
Calling styles are of the following forms::
# use on an existing select()
s = select([table.c.col1]).where(table.c.col2==5)
s = exists(s)
# construct a select() at once
exists([\'*\'], **select_arguments).where(criterion)
# columns argument is optional, generates "EXISTS (SELECT *)"
# by default.
exists().where(table.c.col2==5)'

def __init__(self, *args, **kwargs):

    if (args and isinstance(args[0], (SelectBase, ScalarSelect))):
        s = args[0]
    else:
        if (not args):
            args = ([literal_column('*')],)
        s = Select(*args, **kwargs).as_scalar().self_group()
    UnaryExpression.__init__(self, s, operator=operators.exists, type_=type_api.BOOLEANTYPE)
