ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΡΠ΅Π»ΠΈΠ· Π‘Π£ΠΠ EdgeDB 4.0, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅ΠΉ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΠΎ-Π³ΡΠ°ΡΠΎΠ²ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠ·ΡΠΊ Π·Π°ΠΏΡΠΎΡΠΎΠ² EdgeQL, ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠΌΠΈ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ. ΠΠΎΠ΄ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΡΠ·ΡΠΊΠ°Ρ Python ΠΈ Rust (ΠΏΠ°ΡΡΠ΅Ρ ΠΈ ΠΊΡΠΈΡΠΈΡΠ½ΡΠ΅ ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ°ΡΡΠΈ) ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0. ΠΡΠΎΠ΅ΠΊΡ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΠΎΡΠΌΠ΅ Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠΈ Π½Π°Π΄ PostgreSQL. ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Ρ Π΄Π»Ρ ΡΠ·ΡΠΊΠΎΠ² Python, Go, Rust. .NET, Elixir ΠΈ TypeScript/Javascript. ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π‘Π£ΠΠ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² (REPL).
ΠΠΌΠ΅ΡΡΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ°Π±Π»ΠΈΡ Π² EdgeDB ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ². ΠΠΌΠ΅ΡΡΠΎ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ (foreign key) Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ (ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°).
type Person { required name: str; } type Movie { required title: str; multi actors: Person; }
ΠΠ»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠ°ΠΊ ΡΡΡΠΎΠ³Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ², ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ²ΠΎΠΉΡΡΠ², Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈ Ρ ΡΠ°Π½ΠΈΠΌΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ. ΠΠ· ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΡ Π΅ΠΌΡ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ EdgeDB, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅ΠΌ-ΡΠΎ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ORM, ΠΎΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΌΠ΅ΡΠΈΠ²Π°Π½ΠΈΡ ΡΡ Π΅ΠΌ, ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² ΠΈΠ· ΡΠ°Π·Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° JSON.
ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΡΡ Π΅ΠΌΡ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ — ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡ Π΅ΠΌΡ, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ esdl-ΡΠ°ΠΉΠ»Π΅, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ «edgedb migration create» ΠΈ Π‘Π£ΠΠ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠΈΡ Π² ΡΡ Π΅ΠΌΠ΅ ΠΈ Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΊΡΠΈΠΏΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡΡ ΡΡ Π΅ΠΌΡ. ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΈΡΡΠΎΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡ Π΅ΠΌΡ.
ΠΠ»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ·ΡΠΊ Π·Π°ΠΏΡΠΎΡΠΎΠ² GraphQL, ΡΠ°ΠΊ ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ·ΡΠΊ EdgeDB, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΎΠ±ΠΎΠΉ Π°Π΄Π°ΠΏΡΠ°ΡΠΈΡ SQL Π΄Π»Ρ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ . ΠΠΌΠ΅ΡΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠ² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π·Π°ΠΏΡΠΎΡΠ° ΠΎΡΠΎΡΠΌΠ»ΡΡΡΡΡ Π² ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π° Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ΄Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ JOIN ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° EdgeQL Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²Π½ΡΡΡΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΈ ΡΠΈΠΊΠ»Ρ.
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’ } ) }
Π Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ:
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Π°Ρ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ fts. ΠΠ»Ρ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ fts::index, Π° Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΉ ΡΡΠ°Π·Π΅ ΡΡΠ΅Π΄ΠΈ ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ fts::search(). Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ Π² ΡΠΎΡΠΌΠ΅ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠΉ Π²Π΅Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ: type Item { required available: bool { default := false; }; required name: str; required description: str; index fts::index on ( fts::with_options( .name, language := fts::Language.eng ) ); } with res := ( select fts::search(Item, ‘candy corn’, language := ‘eng’) ) select res.object {name, score := res.score} order by res.score desc;
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ «multirange», ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠ΅ΡΡΠ²Π°ΡΡΠΈΡ ΡΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΎΠ². ΠΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΡ ΡΡ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ Π² Π·Π°Π΄Π°Π½Π½ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. Π‘ ΡΠΈΠΏΠΎΠΌ «multirange» ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π²ΡΠ΅ ΡΠ°Π½Π΅Π΅ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ². select multirange([range(8, 10)]) + range(1, 5) — range(3, 4);
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ GraphQL ΠΈ EdgeQL ΠΏΠΎΠ²Π΅ΡΡ HTTP.
- ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΠ²ΠΈΡΠ° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡΡΡΠ΅Π³ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΎΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΠ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ «auth», ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠ΅Π΅ OAuth ΠΈΠ»ΠΈ Π²Ρ ΠΎΠ΄ ΠΏΠΎ email ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ.
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ pgcrypto, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ hmac, gen_salt ΠΈ crypt Π΄Π»Ρ Ρ ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ. select ext::pgcrypto::digest(‘encrypt this’, ‘sha1’);
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ pg_trgm c ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡ ΠΎΠΆΠ΅ΡΡΠΈ ΡΡΡΠΎΠΊ.
- ΠΠ½Π΅ΡΠ΅Π½Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ²ΡΠΈΠ΅ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. ΠΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΡΠ½ΠΈΠΆΠ΅Π½ΠΎ Π½Π° 40%. ΠΠΎΠ΄ ΠΏΠ°ΡΡΠ΅ΡΠ° Π·Π°ΠΏΡΠΎΡΠΎΠ² EdgeQL ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½ Π½Π° ΡΠ·ΡΠΊΠ΅ Rust.
- Π ΡΠ·ΡΠΊ EdgeQL Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΈΠ²ΡΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΡΡΠ»ΠΎΠ²Π½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ (if … then .. else …). ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ»ΠΎΠ²Π½ΡΡ DML Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°Π·Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π°Π΄Π°Π½Π½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ. ΠΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ to_bytes(), to_str(), enc::base64_encode ΠΈ enc::base64_decode. Π ΡΡΠΈΠ³Π³Π΅ΡΠ°Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ «when». select if count(Object) > 0 then ‘got data’ else ‘no data’; select (select User filter .name = ‘Alice’) ?? (insert User { name := ‘Alice’ }); select enc::base64_encode(b’hello’);
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² Π·Π°ΠΏΡΠΎΡΡ GraphQL — Π²ΠΌΠ΅ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° __globals__.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru