Ejemplo n.º 1
0
def i_att_group_cardinality(ss: Substrate, ocard: Optional(cardinality), qore: Quads_or_Error) -> sctIdGroups_or_Error:
    if qore.inran('qerror'):
        return sctIdGroups_or_Error(error=qore.qerror)
    qv = quads_for(qore)
    rf = quad_direction(qore) == source_direction
    if ocard.is_empty:
        rval = qv.i_required_att_group_cardinality(N(1), many, rf)
    else:
        card = ocard.head
        if card.min_ > 0:
            rval = qv.i_required_att_group_cardinality(card.min_, card.max_, rf)
        else:
            rval = qv.i_optional_att_group_cardinality(ss, card.max_, rf)
    return sctIdGroups_or_Error(group_value=rval)
Ejemplo n.º 2
0
def i_groupAttribute(ss: Substrate, att: attribute) -> sctIdGroups_or_Error:
    att_sctids = i_attributeOperator(ss, att.attrOper, ss.i_attributeName(att.name))
    if att_sctids.inran('error'):
        return sctIdGroups_or_Error(gerror=att_sctids.error)
    elif att.opValue.inran('attrib_expr'):
        expr_interp = i_expressionComparisonOperator(ss, att.rf, result_sctids(att_sctids), att.opValue.attrib_expr)
        return i_att_group_cardinality(ss, att.card, expr_interp)
    elif att.opValue.inran('attrib_num'):
        num_interp = i_numericComparsionOperator(ss, att.rf, result_sctids(att_sctids), att.opValue.attrib_num)
        return i_att_group_cardinality(ss, att.card, num_interp)
    else:
        str_interp = i_stringComparisonOperator(ss, att.rf, result_sctids(att_sctids), att.opValue.attrib_str)
        return i_att_group_cardinality(ss, att.card, str_interp)