Расширенные возможности
EdgeQL — это язык, который нельзя считать простым и игрушечным. Он поддерживает полиморфные запросы, полный набор встроенных удобных функций, кастинг JSON и многое другое.
Все приведенные ниже запросы предполагают следующую схему
select Hero {
id,
name,
movies := (
select Movie {
id, title
} filter Hero in .characters
)
}
insert Movie {
title := "The Avengers",
characters := {(
select Hero filter .secret_identity in {
'Iron Man',
'Captain America',
'Thor',
'Black Widow',
'Hulk',
'Hawkeye'
}
) union (
select Villain filter .name = "Loki"
)}
};
with
hero_name := "Spider-Man",
villain_name := "Doc Ock",
hero := (
select Hero filter .name = hero_name
),
insert Villain {
name := villain_name,
nemesis := hero
}
select <json>(
select Hero { id, name }
filter .name = "Peter Parker"
);
select Hero {
id,
name,
num_villains := count(.villains),
movie_titles := array_agg(
.<characters[is Movie].title
),
}
filter .name = "Tony Stark";
select Movie {
id,
title,
heroes := .characters[is Hero] {
id,
name,
secret_identity
},
villains := .characters[is Villain] {
id,
name
}
};
select Person {
id,
type := .__type__.name,
name,
[is Hero].secret_identity,
[is Villain].nemesis: { id, name }
};
select schema::ObjectType {
name,
is_abstract,
prop_names := array_agg(.properties.name)
}
filter .name ilike "default::%";
group Hero { name }
by .number_of_movies