This section describes introspection of collection types.
Introspection of the schema::Array
:
db> ... ... ... ... ... ... ... ... ... ...
WITH MODULE schema
SELECT ObjectType {
name,
links: {
name,
},
properties: {
name,
}
}
FILTER .name = 'schema::Array';
{ Object { name: 'schema::Array', links: { Object { name: '__type__' }, Object { name: 'element_type' } }, properties: { Object { name: 'id' }, Object { name: 'name' } } } }
For a type with an array
property, consider the following:
type User {
required property name -> str;
property favorites -> array<str>;
}
Introspection of the User
with emphasis on properties:
db> ... ... ... ... ... ... ... ... ... ... ...
WITH MODULE schema
SELECT ObjectType {
name,
properties: {
name,
target: {
name,
[IS Array].element_type: { name },
},
},
}
FILTER .name = 'default::User';
{ Object { name: 'default::User', properties: { Object { name: 'favorites', target: Object { name: 'array', element_type: Object { name: 'std::str' } } }, ... } } }
Introspection of the schema::Tuple
:
db> ... ... ... ... ... ... ... ... ... ...
WITH MODULE schema
SELECT ObjectType {
name,
links: {
name,
},
properties: {
name,
}
}
FILTER .name = 'schema::Tuple';
{ Object { name: 'schema::Tuple', links: { Object { name: '__type__' }, Object { name: 'element_types' } }, properties: { Object { name: 'id' }, Object { name: 'name' } } } }
For example, below is an introspection of the return type of
the sys::get_version()
function:
db> ... ... ... ... ... ... ... ... ...
WITH MODULE schema
SELECT `Function` {
return_type[IS Tuple]: {
element_types: {
name,
type: { name }
} ORDER BY .num
}
}
FILTER .name = 'sys::get_version';
{ Object { return_type: Object { element_types: { Object { name: 'major', type: Object { name: 'std::int64' } }, Object { name: 'minor', type: Object { name: 'std::int64' } }, Object { name: 'stage', type: Object { name: 'sys::VersionStage' } }, Object { name: 'stage_no', type: Object { name: 'std::int64' } }, Object { name: 'local', type: Object { name: 'array' } } } } } }