common/__init__.py
author Graziella Toutoungis <graziella.toutoungis@logilab.fr>
Tue, 05 May 2009 16:06:00 +0200
branchtls-sprint
changeset 1683 c74566e61f1a
parent 1370 c1cf86a66e30
child 1802 d628defebc17
permissions -rw-r--r--
don't display relation in the metadata category here

"""Common subpackage of cubicweb : defines library functions used both on the
hg stserver side and on the client side

:organization: Logilab
:copyright: 2001-2009 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
"""

from logilab.common.adbh import FunctionDescr

from cubicweb._exceptions import * # bw compat

from rql.utils import register_function, iter_funcnode_variables

class COMMA_JOIN(FunctionDescr):
    supported_backends = ('postgres', 'sqlite',)
    rtype = 'String'
    
    @classmethod
    def st_description(cls, funcnode):
        return ', '.join(term.get_description()
                         for term in iter_funcnode_variables(funcnode))
    
register_function(COMMA_JOIN)  # XXX do not expose?


class CONCAT_STRINGS(COMMA_JOIN):
    aggregat = True
    
register_function(CONCAT_STRINGS) # XXX bw compat

class GROUP_CONCAT(CONCAT_STRINGS):
    supported_backends = ('mysql', 'postgres', 'sqlite',)
    
register_function(GROUP_CONCAT)


class LIMIT_SIZE(FunctionDescr):
    supported_backends = ('postgres', 'sqlite',)
    rtype = 'String'
    
    @classmethod
    def st_description(cls, funcnode):
        return funcnode.children[0].get_description()
    
register_function(LIMIT_SIZE)


class TEXT_LIMIT_SIZE(LIMIT_SIZE):
    supported_backends = ('mysql', 'postgres', 'sqlite',)
    
register_function(TEXT_LIMIT_SIZE)