# -*- coding: utf-8 -*-
###########################################################################
# Copyright (c), The AiiDA team. All rights reserved. #
# This file is part of the AiiDA code. #
# #
# The code is hosted on GitHub at https://github.com/aiidateam/aiida_core #
# For further information on the license, see the LICENSE.txt file #
# For further information please visit http://www.aiida.net #
###########################################################################
from sqlalchemy.ext.compiler import compiles
from sqlalchemy.sql.expression import FunctionElement
[docs]class jsonb_array_length(FunctionElement):
name = 'jsonb_array_len'
@compiles(jsonb_array_length)
def compile(element, compiler, **kw):
"""
Get length of array defined in a JSONB column
"""
return "jsonb_array_length(%s)" % compiler.process(element.clauses)
[docs]class array_length(FunctionElement):
name = 'array_len'
@compiles(array_length)
def compile(element, compiler, **kw):
"""
Get length of array defined in a JSONB column
"""
return "array_length(%s)" % compiler.process(element.clauses)
[docs]class jsonb_typeof(FunctionElement):
name = 'jsonb_typeof'
[docs]@compiles(jsonb_typeof )
def compile(element, compiler, **kw):
"""
Get length of array defined in a JSONB column
"""
return "jsonb_typeof(%s)" % compiler.process(element.clauses)
[docs]def _get_column(colname, alias):
"""
Return the column for the projection, if the column name is specified.
"""
try:
return getattr(alias, colname)
except:
raise InputValidationError(
"\n{} is not a column of {}\n"
"Valid columns are:\n"
"{}".format(
colname, alias,
'\n'.join(alias._sa_class_manager.mapper.c.keys())
)
)