EdgeDB 4.0 Π²Π΅ΡΠ΅ Π΅ Π½Π°Π»ΠΈΡΠ΅Π½. Π’ΠΎΠΉ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° ΡΠ΅Π»Π°ΡΠΈΠΎΠ½Π½ΠΎ-Π³ΡΠ°ΡΠΎΠ² ΠΌΠΎΠ΄Π΅Π» Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈ Π΅Π·ΠΈΠΊΠ° Π·Π° Π·Π°ΡΠ²ΠΊΠΈ EdgeQL, ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΈ ΠΉΠ΅ΡΠ°ΡΡ ΠΈΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ. ΠΠΎΠ΄ΡΡ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Python ΠΈ Rust (ΠΏΠ°ΡΡΠ΅Ρ ΠΈ ΠΊΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° ΡΠ°ΡΡΠΈ) ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·Π° Apache 2.0. ΠΡΠΎΠ΅ΠΊΡΡΡ ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π° ΠΊΠ°ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΊΠ° ΠΊΡΠΌ PostgreSQL. ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π·Π° Python, Go, Rust, .NET, Elixir ΠΈ TypeScript/Javascript. ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΡΠ° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΡΠ΅Π΄ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π‘Π£ΠΠ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ (REPL).
ΠΠΌΠ΅ΡΡΠΎ ΠΌΠΎΠ΄Π΅Π» Π½Π° Π΄Π°Π½Π½ΠΈ, Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈ, EdgeDB ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°, Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ ΠΎΠ±Π΅ΠΊΡΠΈ. ΠΠΌΠ΅ΡΡΠΎ Π²ΡΠ½ΡΠ½ΠΈ ΠΊΠ»ΡΡΠΎΠ²Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΡΡΠ΅Π· ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠ° Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅ (Π΅Π΄ΠΈΠ½ ΠΎΠ±Π΅ΠΊΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π½Π° Π΄ΡΡΠ³ ΠΎΠ±Π΅ΠΊΡ).
ΡΠΈΠΏ ΠΠΈΡΠ΅ { Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅: str; } ΡΠΈΠΏ Π€ΠΈΠ»ΠΌ { Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π³Π»Π°Π²ΠΈΠ΅: str; ΠΌΠ½ΠΎΠ³ΠΎ Π°ΠΊΡΡΠΎΡΠΈ: ΠΠΈΡΠ΅; }
ΠΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΡΡΠΊΠΎΡΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠΈ. ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ΅ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΡΠΎ ΡΠΈΠ»Π½ΠΎ Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ°, ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΈ. Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ Π½Π° ΡΡ Π΅ΠΌΠ°ΡΠ° Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ 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- ΠΠ½ ΠΠΎΡ", "ΠΠΎΡΡΠ½Ρ Π€ΠΈΡΠ±ΡΡΠ½" } ) }
Π Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ:
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΏΡΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎ ΡΡΡΡΠ΅Π½Π΅, ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° ΡΡΠ΅Π· ΠΏΠ»ΡΠ³ΠΈΠ½Π° 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 ΠΈΠ»ΠΈ Π²Π»ΠΈΠ·Π°Π½Π΅ ΡΡΠ΅Π· ΠΈΠΌΠ΅ΠΉΠ» ΠΈ ΠΏΠ°ΡΠΎΠ»Π°.
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ pgcrypto, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ hmac, gen_salt ΠΈ crypt Π·Π° Ρ Π΅ΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½Π΅. select ext::pgcrypto::digest('encrypt this', 'sha1');
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ pg_trgm Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΡΡ ΠΎΠ΄ΡΡΠ²ΠΎ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠ·ΠΎΠ²Π΅.
- ΠΠ°ΠΏΡΠ°Π²Π΅Π½ΠΈ ΡΠ° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°. ΠΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Π½Π° ΡΡΡΠ²ΡΡ ΠΠ°ΠΌΠ°Π»Π΅Π½ΠΎ Ρ 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
