Расширенные возможности

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