Light
Dark
System
v3latest
v3latest
v2
v1

Object types

This section describes introspection of object types.

Introspection of the schema::ObjectType:

Copy
db> 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
with module schema
select ObjectType {
    name,
    links: {
        name,
    },
    properties: {
        name,
    }
}
filter .name = 'schema::ObjectType';
{
    Object {
        name: 'schema::ObjectType',
        links: {
            Object { name: '__type__' },
            Object { name: 'annotations' },
            Object { name: 'bases' },
            Object { name: 'constraints' },
            Object { name: 'indexes' },
            Object { name: 'links' },
            Object { name: 'ancestors' },
            Object { name: 'pointers' },
            Object { name: 'properties' }
        },
        properties: {
            Object { name: 'id' },
            Object { name: 'abstract' },
            Object { name: 'name' }
        }
    }
}

Consider the following schema:

Copy
type Addressable {
    property address -> str;
}

type User extending Addressable {
    # define some properties and a link
    required property name -> str;

    multi link friends -> User;

    # define an index for User based on name
    index on (.name);
}

Introspection of User:

Copy
db> 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
... 
with module schema
select ObjectType {
    name,
    abstract,
    bases: { name },
    ancestors: { name },
    annotations: { name, @value },
    links: {
        name,
        cardinality,
        required,
        target: { name },
    },
    properties: {
        name,
        cardinality,
        required,
        target: { name },
    },
    constraints: { name },
    indexes: { expr },
}
filter .name = 'default::User';
{
    Object {
        name: 'default::User',
        abstract: false,
        bases: {Object { name: 'default::Addressable' }},
        ancestors: {
            Object { name: 'std::BaseObject' },
            Object { name: 'std::Object' },
            Object { name: 'default::Addressable' }
        },
        annotations: {},
        links: {
            Object {
                name: '__type__',
                cardinality: 'One',
                required: {},
                target: Object { name: 'schema::Type' }
            },
            Object {
                name: 'friends',
                cardinality: 'Many',
                required: false,
                target: Object { name: 'default::User' }
            }
        },
        properties: {
            Object {
                name: 'address',
                cardinality: 'One',
                required: false,
                target: Object { name: 'std::str' }
            },
            Object {
                name: 'id',
                cardinality: 'One',
                required: true,
                target: Object { name: 'std::uuid' }
            },
            Object {
                name: 'name',
                cardinality: 'One',
                required: true,
                target: Object { name: 'std::str' }
            }
        },
        constraints: {},
        indexes: {
            Object {
                expr: '.name'
            }
        }
    }
}
Light
Dark
System

We use ChatGPT with additional context from our documentation to answer your questions. Not all answers will be accurate. Please join our Discord if you need more help.