EdgeDB 2.0 har slÀppts, med en relations-grafdatabasmodell och EdgeQL-frÄgesprÄk, optimerade för komplexa hierarkiska data. Koden Àr skriven i Python och Rust (parser och prestandakritiska delar) och distribueras under Apache 2.0-licensen. Projektet utvecklas som en överbyggnad pÄ PostgreSQL. Klientbibliotek finns för Python, Go, Rust och TypeScript/Javascript. Ett kommandoradsverktyg erbjuds för att hantera databasen och för interaktiv körning av frÄgor (REPL).
IstÀllet för en tabellbaserad datamodell anvÀnder EdgeDB ett deklarativt system baserat pÄ objekttyper. IstÀllet för primÀrnycklar (foreign key) för att definiera relationen mellan typer, anvÀnds lÀnkbindningar (en objekt kan anvÀndas som en egenskap av ett annat objekt).
type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }
För att pÄskynda bearbetningen av frÄgor kan index anvÀndas. Funktioner som strikt typning av egenskaper, vÀrdebegrÀnsningar, berÀknade egenskaper och lagrade procedurer stöds ocksÄ. En speciell egenskap hos EdgeDB:s objektlagringsschema, som liknar ORM, Àr möjligheten att blanda scheman, koppla egenskaper frÄn olika objekt och integrerat stöd för JSON.
Inbyggda verktyg för schema-migrering tillhandahĂ„lls â efter att schemat har Ă€ndrats i en separat esdl-fil, rĂ€cker det med att köra kommandot "edgedb migration create", sĂ„ analyserar databasen skillnaderna i schemat och genererar interaktivt ett script för att migrera till det nya schemat. Historiken för schemaĂ€ndringar spĂ„ras automatiskt.
För att skapa frÄgor stöds bÄde GraphQL-frÄgesprÄk och det egna EdgeDB-sprÄket, som Àr en anpassning av SQL för hierarkiska data. IstÀllet för listor presenteras frÄgeresultaten i en strukturerad form, och istÀllet för underfrÄgor och JOIN-operationer ges möjligheten att ange en EdgeQL-frÄga som ett uttryck inom en annan frÄga. Transaktioner och loopar stöds.
select Movie { title, actors: { name } } filter .title = "The Matrix" insert Movie { title := "The Matrix Resurrections", actors := ( select Person filter .name in { 'Keanu Reeves', 'Carrie-Anne Moss', 'Laurence Fishburne' } ) } for number in {0, 1, 2, 3} union ( select { number, number + 0.5 } );
I den nya versionen:
- En inbyggd webgrÀnssnitt för databashantering har lagts till, vilket gör det möjligt att visa och redigera data, köra EdgeQL-frÄgor och analysera den tillÀmpade lagringsschemat. GrÀnssnittet startas med kommandot "edgedb ui", efter vilket det Àr tillgÀngligt via localhost.

- Uttrycket "GROUP" har implementerats, vilket möjliggör segmentering och aggregering av data och gruppering av data efter valfria EdgeQL-uttryck, liknande gruppering i SELECT-operationen.
- Möjlighet att hantera Ätkomst pÄ objektiv nivÄ. à tkomstregler definieras pÄ lagringsschemanivÄ och gör det möjligt att begrÀnsa anvÀndningen av en viss uppsÀttning objekt i urval, insÀttnings-, borttagnings- och uppdateringsoperationer. Till exempel kan man lÀgga till en regel som tillÄter uppdatering av en publicering endast av författaren.
- Möjlighet att anvÀnda globala variabler i lagringsschemat har lagts till. En ny global variabel, current_user, har föreslagits för att koppla till anvÀndaren.
- Stöd för typer som definierar vÀrdeintervall (range) har lagts till.
- En officiell klientbibliotek för sprÄket Rust har förberetts.
- Det binÀra protokollet EdgeDB har stabiliserats, vilket gör det möjligt att hantera flera olika sessioner inom en enda nÀtverksanslutning, vidarebefordran via HTTP, anvÀndning av globala variabler och lokala tillstÄnd.
- Stöd för aktivering via socket har lagts till, vilket gör att man inte behöver hÄlla serverhanteraren i minnet och bara startar den vid försök att etablera en anslutning (nyttigt för resursbesparing pÄ utvecklarens system).
KĂ€lla: opennet.ru

