Source code for spyql.sqlfuncs

from spyql.nulltype import NULL
from spyql import log

# functions that support NULLs (and that need to be replaced in the query)
NULL_SAFE_FUNCS = {
    "int": "int_",
    "float": "float_",
    "str": "str_",
    "complex": "complex_",
}


[docs]def coalesce(val, default): """ returns ``default`` if ``val is NULL`` otherwise returns ``val`` """ if val is NULL: return default return val
ifnull = coalesce # alias
[docs]def nullif(a, b): """ returns ``NULL`` if ``a == b`` otherwise returns ``a`` """ if a == b: return NULL return a
# returns NULL if any argument equals NULL
[docs]def null_safe_call(fun, *args, **kwargs): if NULL in args or NULL in kwargs.values(): return NULL return fun(*args, **kwargs)
# NULL-safe functions
[docs]def float_(a): if a is NULL: return NULL try: return float(a) except ValueError as e: log.conversion_warning("float", e, a) return NULL
[docs]def int_(a, *args, **kwargs): if a is NULL or NULL in args or NULL in kwargs.values(): return NULL try: return int(a, *args, **kwargs) except ValueError as e: log.conversion_warning("int", e, a, **kwargs) return NULL
[docs]def complex_(*args): if NULL in args: return NULL try: return complex(*args) except ValueError as e: log.conversion_warning("complex", e, *args) return NULL
[docs]def str_(*args, **kwargs): if NULL in args or NULL in kwargs.values(): return NULL return str(*args, **kwargs)