diff options
Diffstat (limited to 'lib/sqlalchemy/sql/functions.py')
-rw-r--r-- | lib/sqlalchemy/sql/functions.py | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/lib/sqlalchemy/sql/functions.py b/lib/sqlalchemy/sql/functions.py index d26589bd9..fd6607be0 100644 --- a/lib/sqlalchemy/sql/functions.py +++ b/lib/sqlalchemy/sql/functions.py @@ -15,6 +15,7 @@ from .. import util _registry = util.defaultdict(dict) + def register_function(identifier, fn, package="_default"): """Associate a callable with a particular func. name. @@ -39,6 +40,7 @@ class _GenericMeta(VisitableType): register_function(identifier, cls, package) super(_GenericMeta, cls).__init__(clsname, bases, clsdict) + class GenericFunction(Function): """Define a 'generic' function. @@ -113,6 +115,7 @@ class GenericFunction(Function): __metaclass__ = _GenericMeta coerce_arguments = True + def __init__(self, *args, **kwargs): parsed_args = kwargs.pop('_parsed_args', None) if parsed_args is None: @@ -129,6 +132,7 @@ class GenericFunction(Function): register_function("cast", cast) register_function("extract", extract) + class next_value(GenericFunction): """Represent the 'next value', given a :class:`.Sequence` as it's single argument. @@ -151,10 +155,12 @@ class next_value(GenericFunction): def _from_objects(self): return [] + class AnsiFunction(GenericFunction): def __init__(self, **kwargs): GenericFunction.__init__(self, **kwargs) + class ReturnTypeFromArgs(GenericFunction): """Define a function whose return type is the same as its arguments.""" @@ -164,15 +170,19 @@ class ReturnTypeFromArgs(GenericFunction): kwargs['_parsed_args'] = args GenericFunction.__init__(self, *args, **kwargs) + class coalesce(ReturnTypeFromArgs): pass + class max(ReturnTypeFromArgs): pass + class min(ReturnTypeFromArgs): pass + class sum(ReturnTypeFromArgs): pass @@ -180,21 +190,27 @@ class sum(ReturnTypeFromArgs): class now(GenericFunction): type = sqltypes.DateTime + class concat(GenericFunction): type = sqltypes.String + class char_length(GenericFunction): type = sqltypes.Integer def __init__(self, arg, **kwargs): GenericFunction.__init__(self, arg, **kwargs) + class random(GenericFunction): pass + class count(GenericFunction): - """The ANSI COUNT aggregate function. With no arguments, emits COUNT \*.""" + """The ANSI COUNT aggregate function. With no arguments, + emits COUNT \*. + """ type = sqltypes.Integer def __init__(self, expression=None, **kwargs): @@ -202,30 +218,38 @@ class count(GenericFunction): expression = literal_column('*') GenericFunction.__init__(self, expression, **kwargs) + class current_date(AnsiFunction): type = sqltypes.Date + class current_time(AnsiFunction): type = sqltypes.Time + class current_timestamp(AnsiFunction): type = sqltypes.DateTime + class current_user(AnsiFunction): type = sqltypes.String + class localtime(AnsiFunction): type = sqltypes.DateTime + class localtimestamp(AnsiFunction): type = sqltypes.DateTime + class session_user(AnsiFunction): type = sqltypes.String + class sysdate(AnsiFunction): type = sqltypes.DateTime + class user(AnsiFunction): type = sqltypes.String - |