Search
ctrl/
Ask AI
Light
Dark
System

Constraints

This section describes introspection of constraints.

Introspection of the schema::Constraint:

Copy
db> 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
with module schema
select ObjectType {
    name,
    links: {
        name,
    },
    properties: {
        name,
    }
}
filter .name = 'schema::Constraint';
{
    Object {
        name: 'schema::Constraint',
        links: {
            Object { name: '__type__' },
            Object { name: 'args' },
            Object { name: 'annotations' },
            Object { name: 'bases' },
            Object { name: 'ancestors' },
            Object { name: 'params' },
            Object { name: 'return_type' },
            Object { name: 'subject' }
        },
        properties: {
            Object { name: 'errmessage' },
            Object { name: 'expr' },
            Object { name: 'finalexpr' },
            Object { name: 'id' },
            Object { name: 'abstract' },
            Object { name: 'name' },
            Object { name: 'return_typemod' },
            Object { name: 'subjectexpr' }
        }
    }
}

Consider the following schema:

Copy
scalar type maxex_100 extending int64 {
    constraint max_ex_value(100);
}

Introspection of the scalar maxex_100 with focus on the constraint:

Copy
db> 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
with module schema
select ScalarType {
    name,
    constraints: {
        name,
        expr,
        annotations: { name, @value },
        subject: { name },
        params: { name, @value, type: { name } },
        return_typemod,
        return_type: { name },
        errmessage,
    },
}
filter .name = 'default::maxex_100';
{
    Object {
        name: 'default::maxex_100',
        constraints: {
            Object {
                name: 'std::max_ex_value',
                expr: '(__subject__ <= max)',
                annotations: {},
                subject: Object { name: 'default::maxex_100' },
                params: {
                    Object {
                        name: 'max',
                        type: Object { name: 'anytype' },
                        @value: '100'
                    }
                },
                return_typemod: 'SingletonType',
                return_type: Object { name: 'std::bool' }
                errmessage: '{__subject__} must be less ...',
            }
        }
    }
}