EdgeDB 4.0 DBMS ááá˝ááşáážááážáŻáááş áááşá ááşááááşáá áşááąááŹááąáŹáşáááşáážááˇáş EdgeQL query language ááᯠáĄááąáŹááşáĄáááşááąáŹáşááźáŽá¸ áážáŻááşáá˝áąá¸ááąáŹ áĄáááşáááşá¸ááťááąáŹááąááŹááźááˇáş ááŻááşááąáŹááşáááşáĄáá˝ááş áĄááąáŹááşá¸ááŻáśá¸ááźá áşáĄáąáŹááş ááŻááşááąáŹááşááąá¸ááŤáááşá ááŻááşááᯠPython áážááˇáş Rust (parser áážááˇáş performance-critical parts) ááźááˇáş ááąá¸ááŹá¸ááŹá¸ááźáŽá¸ Apache 2.0 áááŻááşá ááşáĄáąáŹááşáá˝ááş ááźááˇáşááąááŹá¸áááşá áááąáŹááťááşááᯠPostgreSQL áĄáá˝ááş áĄáááŻááááŻááááşáá áşááŻáĄááźá áş ááŽáá˝ááşááąááŤáááşá Client á áŹááźááˇáşáááŻááşááťáŹá¸áááş Python, Go, Rust ááŹááŹá ááŹá¸ááťáŹá¸áĄáá˝ááş ááźááşáááşááŹá¸ááŤáááşá .NETá Elixir áážááˇáş TypeScript/Javascript DBMS á áŽááśáááˇáşáá˝á˛áážáŻáážááˇáş áĄááźááşáĄáážááşááąá¸ááźááşá¸áážáŻááŻááşááąáŹááşááźááşá¸ (REPL) áĄáá˝ááş command line tools ááťáŹá¸ááᯠááśáˇáááŻá¸ááąá¸ááŤáááşá
áááŹá¸áĄááźáąááśááąááŹááąáŹáşáááşáĄá áŹá¸ EdgeDB áááş áĄááŹááášááŻáĄááťááŻá¸áĄá áŹá¸ááťáŹá¸áĄááąáŤáşáĄááźáąááśá ááźáąááźáŹá áá áşáá áşááŻáááŻáĄááŻáśá¸ááźáŻáááşá áááŻááşááśááźáŹá¸ááąáŹáˇááťáŹá¸áĄá áŹá¸á áĄááťááŻá¸áĄá áŹá¸ááťáŹá¸ááźáŹá¸ áááşáá˝ááşáážáŻááᯠáĄáááŻá¸áĄááŹá¸ááźááˇáş ááťáááşáááşááźááşá¸ááᯠáĄááŻáśá¸ááźáŻáááş (áĄááŹááášááŻáá áşááŻááᯠáĄááźáŹá¸áĄááŹááášááŻáá áşááŻá áááŻááşáááŻááşáážáŻáĄááźá áş ááŻáśá¸áááŻááşáááş)á
type Person { áááŻáĄááşááąáŹ áĄáááş: str; } áĄááťááŻá¸áĄá áŹá¸ ááŻááşáážááş { áááŻáĄááşááąáŹ ááąáŤááşá¸á ááş- str; áááŻááşááąáŹááşááąáŤááşá¸ááťáŹá¸á á˝áŹ- ááŻáášáááŻááşá }
query processing ááᯠáĄáážáááşááźážááˇáşáááş áĄáá˝ážááşá¸ááťáŹá¸ááᯠááŻáśá¸áááŻááşáááşá áááŻááşááŹááąáŹ áááŻááşáááŻááşáážáŻá áŹáááŻááşááźááşá¸á áááŻááşáááŻááşáážáŻáááşáááŻá¸áááˇáşáááşááťááşááťáŹá¸á áá˝ááşááťááşááŹá¸ááąáŹ ááŻááşááášááááťáŹá¸áážááˇáş ááááşá¸áááşá¸ááŹá¸áááˇáş ááŻááşááŻáśá¸ááŻááşáááşá¸ááťáŹá¸áá˛áˇáááŻáˇááąáŹ áĄááşášááŤáááşááťáŹá¸ááᯠááśáˇáááŻá¸ááąá¸ááŤáááşá ORM áá áşááŻáážááˇáşáĄáááşáááşáĄáážááşáááąáááˇáş EdgeDB object storage scheme ááĄááşášááŤáááşááťáŹá¸áááş schemas ááťáŹá¸ááᯠááąáŹáážáąáŹááźááşá¸á ááá°ááŽááąáŹáĄááŹááášááŻááťáŹá¸ááž ááŻááşááášááááťáŹá¸ááᯠááťáááşáááşááźááşá¸áážááˇáş ááąáŤááşá¸á ááşááŹá¸ááąáŹ JSON ááśáˇáááŻá¸áážáŻáááŻáˇ ááŤáááşááŤáááşá
Built-in tools ááťáŹá¸ááᯠschema migration ááᯠááááşá¸áááşá¸áááşáĄáá˝ááş ááąáŹááşááśáˇááąá¸áááş - ááŽá¸ááźáŹá¸ esdl áááŻááşáá˝ááş áááşáážááşááŹá¸áááˇáş schema áááŻááźáąáŹááşá¸áá˛ááźáŽá¸ááąáŹááşá "edgedb migration create" command ááᯠrun áááŻááşááŻáśááźááˇáş DBMS áááş schema áĄáá˝ááşá¸áážá ááá°ááŽáážáŻááťáŹá¸ááᯠáááŻááşá¸ááźáŹá¸á áááşááźáŹááźáŽá¸ script áá áşááŻáááŻáˇ áá˝ážáąáˇááźáąáŹááşá¸áááşáĄáá˝ááş áĄááźááşáĄáážááşáĄááťááŻá¸áááşááąáŹááşá á˝áŹ áááşááŽá¸ááąá¸áááşááźá áşááŤáááşá schema áĄáá áşá schema áĄááźáąáŹááşá¸áĄáá˛ááťáŹá¸áááááŻááşá¸áááŻáĄáááŻáĄááťáąáŹááşááźáąááŹááśáááşá
ááąá¸áá˝ááşá¸ááťáŹá¸áááşááŽá¸áááşáĄáá˝ááşá GraphQL query language áážááˇáş proprietary EdgeDB language ááźá áşáááˇáş hierarchical data áĄáá˝ááş SQL ááᯠáááŻááşááťáąáŹááŽáá˝áąááźá áşáĄáąáŹááş ááŻááşááąáŹááşááąá¸ááŤáááşá á áŹáááşá¸ááťáŹá¸áĄá áŹá¸á á áŻáśá ááşá¸ááąá¸ááźááşá¸áážáŻááááşááťáŹá¸ááᯠáá˝á˛áˇá ááşá¸áááşááąáŹááşááŻáśáááşá¸áááşá¸ááźááˇáş ááąáŹáşáááşááŹá¸ááźáŽá¸á áĄááąá¸á áááşááąá¸ááźááşá¸ááťááşááťáŹá¸áážááˇáş ááťáááşáááşáážáŻááťáŹá¸áĄá áŹá¸á áááşáááş EdgeQL ááąá¸áá˝ááşá¸áá áşááŻáĄáŹá¸ áĄááźáŹá¸ááąá¸áá˝ááşá¸áá áşááŻáĄáá˝ááşá¸ ááąáŹáşááźááťááşáá áşááŻáĄááźá áş áááşáážááşáááŻááşáááşá áá˝áąááąá¸ááťáąáážáŻááťáŹá¸áážááˇáş áááşáááşáážáŻááťáŹá¸ááᯠááśáˇáááŻá¸ááŹá¸áááşá
ááŻááşáážááş { ááąáŤááşá¸á ááşá áááŻááşááąáŹááşááťáŹá¸- { name } } filter .title = "The Matrix" ááŻááşáážááşááᯠáááˇáşáá˝ááşá¸á፠{ title := "The Matrix Resurrections", áááŻááşááąáŹááşááťáŹá¸ := ( Person filter .name in { 'Keanu Reeves', 'Carrie- Anne Moss á 'Laurence Fishburne' } ) }
ááŹá¸áážááşá¸áĄáá áşáá˝ááş-
- fts ááááşáĄááşáážáá áşáááˇáş á áŹááŹá¸áĄááźááˇáşáĄá áŻáśáážáŹáá˝áąáážáŻáĄáá˝ááş ááśáˇáááŻá¸áážáŻ áááşááąáŹááşá¸áááˇáşááŹá¸áááşá áááşáááˇáşáĄááŹááášááŻáááŻáááᯠáážáŹáá˝áąáááŻááşááąáŹá áŹáá˝ááşá áŹáááşá¸áĄááźá áşááźáąáŹááşá¸áá˛áááşá áááşáááş fts::index áĄáá˝ážááşá¸áááŻáĄááŻáśá¸ááźáŻáááˇáşááźáŽá¸ fts::search() ááŻááşááąáŹááşááťááşááᯠáĄáá˝ážááşá¸ááźáŻááŹá¸ááąáŹá áŹáá˝ááşá áŹáááşá¸ááťáŹá¸ááźáŹá¸áá˝ááş ááŽá¸ááźáŹá¸á áŹá áŻáá áşááŻáážáŹáá˝áąáááş áĄáááŻááźáŻááŹá¸áááşá ááááşááťáŹá¸ááᯠáá˝áąáˇáážááááˇáşáĄááŹáážááˇáş áááşá¸ááážáŹáá˝áąáážáŻáĄááąá¸ááťáááşááŤáážáááąáŹ tuple ááŻáśá áśááźááˇáş ááźááşááąá¸áááşá áĽáááŹ- Item áĄááťááŻá¸áĄá áŹá¸ { áááŻáĄááşáááş : bool { default := false; }; áááŻáĄááşááąáŹáĄáááş: str; áááŻáĄááşááąáŹááąáŹáşááźááťááş- str; áĄáá˝ážááşá¸ fts::index on ( fts::with_options( .name, language := fts::Language.eng ) ); } with res := ( select fts::search(Item, 'candy corn', language := 'eng') ) res.object {name, score := res.score} ááᯠres.score desc ááźááˇáş áážáŹáá°ááŤá
- ááźáŹá¸ááźááşááźáŹá¸ááŹáááťáŹá¸áááŻáááŻááşá áŹá¸ááźáŻáááş áááşáááŻá¸áá áşáᯠáááŻáˇáááŻááş áá áşááŻáááşáááŻááąáŹ áĄáááŻááşá¸áĄááźáŹá¸ááťáŹá¸ááᯠáááşáážááşáááˇáş ááąááŹáĄááťááŻá¸áĄá áŹá¸ "ááťááŻá¸á áŻáś" áĄáá áşáá áşáᯠáááşáááˇáşááŹá¸áááşá áááşáážááşááŹá¸ááąáŹ áĄáááŻááşá¸áĄááźáŹá¸ááťáŹá¸áĄáá˝ááşá¸ áááşááąááąáŹ á§ááááŹááťáŹá¸ááᯠááŻáśáážááşááźá áşáĄáąáŹááş áĄáááŻáĄááťáąáŹááş ááŻááşááąáŹááşááŤáááşá ááŻááşááąáŹááşáážáŻáĄáááŻááşá¸áĄááźáŹá¸ááťáŹá¸áĄáá˝ááş ááááşá ááážááááŻááşááąáŹ ááŻááşááąáŹááşááťááşááťáŹá¸áážááˇáş áĄáąáŹáşáááąááŹááťáŹá¸áĄáŹá¸ááŻáśá¸áááş "ááťááŻá¸á áŻáśááąáŹ" áĄááťááŻá¸áĄá áŹá¸ááźááˇáş ááŻááşááąáŹááşáááŻááşááŤáááşá ááťááŻá¸á áŻáśááᯠáá˝áąá¸ááŤ([áĄáááŻááşá¸(áá áá)]) + áĄáááŻááşá¸áĄááźáŹá¸(áá á ) â áĄáááŻááşá¸áĄááźáŹá¸(áá á);
- HTTP áážááááˇáş GraphQL áážááˇáş EdgeQL áááŻáˇ áááşááąáŹááşáá˝ááˇáşááᯠáááˇáşáááşáááş áá°áááşá¸áĄááąáŹááşáĄááŹá¸á áá á áşááźááşá¸ ááśáˇáááŻá¸áážáŻááźááˇáş áááˇáşáá˝ááşá¸ááźáŽá¸ áá˝ááˇáşááŹá¸áááşá
- ááąááŹááąáˇá áşáĽáááŹááž ááŽá¸ááźáŹá¸ááŻááşááąáŹááşáááˇáş áĄááąáŹááşáĄááŹá¸á áá á áşááźááşá¸áááşááąáŹááşáážáŻááᯠá áááşáááşá OAuth áážááˇáş áĄáŽá¸ááąá¸ááşáážááˇáş á ááŹá¸áážááşááᯠáĄááŻáśá¸ááźáŻá áĄááąáŹááˇáşáááşááźááşá¸ááᯠááśáˇáááŻá¸ááąá¸áááˇáş "auth" áááŻá¸ááťá˛áˇáážáŻááᯠáááˇáşáá˝ááşá¸ááŹá¸áááşá
- hashing áážááˇáş ááŻááşáážááşááźááşá¸áĄáá˝ááş hmacá gen_salt áážááˇáş crypt ááŻááşááąáŹááşááťááşááťáŹá¸ááᯠááśáˇáááŻá¸ááąá¸áááˇáş pgcrypto áááŻá¸ááťá˛áˇáážáŻá ext::pgcrypto::digest('á¤áĄááŹááᯠá áŹáážááşáááş'á 'sha1');
- string áááşáá°áááŻá¸áážáŹá¸ááᯠááŻáśá¸ááźááşáááşáĄáá˝ááş ááŻááşááąáŹááşááťááşááťáŹá¸áážááˇáşáĄáá° pg_trgm áááŻá¸ááťá˛áˇáážáŻááᯠáááˇáşáá˝ááşá¸ááŹá¸áááşá
- á á˝ááşá¸ááąáŹááşáááşáááŻá¸áááşá áąáááş áĄááąáŹááşá¸ááŻáśá¸ááźá áşáĄáąáŹááş ááźáŻááŻááşááŹá¸ááŤáááşá áážááşááŹááşááŻáśá¸á á˝á˛áážáŻááᯠáá˝ááˇáşááŹá¸áááş ááŹáᏠáá% ááťážáąáŹáˇááťááŹá¸áááşá EdgeQL query parser ááŻááşááᯠRust áá˝ááş ááźááşáááşááąá¸ááŹá¸ááŹá¸áááşá
- EdgeQL áááş áááŻáááŻáááşá¸áážáŽá¸ááąáŹ áĄááźáąáĄááąáááŻááşáᏠáĄááŹá¸áĄáááŻááşáá áşááŻáĄáá˝ááş ááśáˇáááŻá¸áážáŻ áááşááąáŹááşá¸ááąá¸áááş ( if ... then.. else ... ) áááşáážááşááŹá¸ááąáŹ áĄááźáąáĄááąááťáŹá¸áĄááąáŤáş áĄááźáąááśá áĄááťááŻá¸ááťááŻá¸ááąáŹ áĄááŹááášááŻááťáŹá¸ááᯠáááşááŽá¸áááşá áĄááşááááşááŻááşáááşáážááˇáş ááťááşáááş áĄááźáąáĄááąáĄáááŻááş DML ááᯠáĄááŻáśá¸ááźáŻáááş á á˝ááşá¸áááşááᯠááśáˇáááŻá¸ááąá¸ááŤáááşá ááŻááşááąáŹááşááťááşááťáŹá¸ááᯠto_bytes(), to_str(), enc::base64_encode áážááˇáş enc::base64_decode. Triggers ááťáŹá¸ááᯠ"when" expressions ááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻáááş áá˝ááˇáşááźáŻááŹá¸áááşá áĄáááşá count(Object) > 0 áááŻáá˝áąá¸á፠áááŻáˇááąáŹááş 'ááąááŹááážááááş' áĄááźáŹá¸ 'ááąááŹááážáááŤ'á select (áĄááŻáśá¸ááźáŻáá° filter áááŻáá˝áąá¸ááťááşááŤáname = 'Alice') ?? (áĄááŻáśá¸ááźáŻáá° {áĄáááş := 'Alice' } áááŻáááˇáşáá˝ááşá¸ááŤá enc::base64_encode(b'hello');
- GraphQL queries áááŻáˇ ááááŻáááşáááşáááŻá¸ááťáŹá¸ááᯠááźááşáááşá¸áááş áááşá¸áááşá¸áĄáá
áşáá
áşáᯠáááşáááˇáşáá˛áˇáááş - ááŽá¸ááźáŹá¸áĄáá˝ááşááᯠáĄááŻáśá¸ááźáŻáááˇáşáĄá
áŹá¸ __globals__ áĄááŹááášááŻáĄááąáŤáş áĄááźáąááśááŹá¸ááąáŹ ááááşá¸áážááşááťáŹá¸ááᯠááťáąáŹáşááźááşáááŻááşáážáŻááᯠáááˇáşáá˝ááşá¸ááŹá¸ááŤáááşá
source: opennet.ru
