From 563125029528719b50010de7cef9d9f13ffce6f3 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Tue, 18 Feb 2025 21:08:29 -0800 Subject: [PATCH 01/23] Kill :versionreplace: --- docs/reference/connection.rst | 7 +++---- docs/reference/ddl/annotations.rst | 2 +- docs/reference/ddl/extensions.rst | 8 ++++---- docs/reference/ddl/future.rst | 4 ++-- docs/reference/ddl/modules.rst | 6 +++--- docs/reference/ddl/objects.rst | 2 +- docs/reference/ddl/scalars.rst | 2 +- docs/reference/environment.rst | 6 +++--- docs/reference/http.rst | 3 +-- docs/reference/protocol/index.rst | 2 +- docs/reference/protocol/messages.rst | 3 +-- docs/reference/sql_adapter.rst | 5 ++--- docs/stdlib/cfg.rst | 26 +++----------------------- docs/stdlib/deprecated.rst | 11 +++++++++++ 14 files changed, 37 insertions(+), 50 deletions(-) diff --git a/docs/reference/connection.rst b/docs/reference/connection.rst index 015aad50b33..23bd1db1246 100644 --- a/docs/reference/connection.rst +++ b/docs/reference/connection.rst @@ -342,10 +342,9 @@ instance-level configuration object. Override behavior ^^^^^^^^^^^^^^^^^ -When specified, the connection parameters (user, password, and -:versionreplace:`database;5.0:branch`) will *override* the corresponding -element of a DSN, credentials file, etc. For instance, consider the following -environment variables: +When specified, the connection parameters (user, password, and |branch|) +will *override* the corresponding element of a DSN, credentials file, etc. +For instance, consider the following environment variables: .. code-block:: diff --git a/docs/reference/ddl/annotations.rst b/docs/reference/ddl/annotations.rst index 0a7cafe9a50..25a8e1b93ec 100644 --- a/docs/reference/ddl/annotations.rst +++ b/docs/reference/ddl/annotations.rst @@ -29,7 +29,7 @@ Description ----------- The command ``create abstract annotation`` defines a new annotation -for use in the current :versionreplace:`database;5.0:branch`. +for use in the current |branch|. If *name* is qualified with a module name, then the annotation is created in that module, otherwise it is created in the current module. diff --git a/docs/reference/ddl/extensions.rst b/docs/reference/ddl/extensions.rst index 55c0213fa26..c0bbdc0c3c6 100644 --- a/docs/reference/ddl/extensions.rst +++ b/docs/reference/ddl/extensions.rst @@ -26,7 +26,7 @@ Description ----------- The command ``create extension`` enables the specified extension for -the current :versionreplace:`database;5.0:branch`. +the current |branch|. Examples -------- @@ -39,7 +39,7 @@ schema: create extension graphql; Enable :ref:`EdgeQL over HTTP ` extension for the -current :versionreplace:`database;5.0:branch`: +current |branch|: .. code-block:: edgeql @@ -63,7 +63,7 @@ Description ----------- The command ``drop extension`` disables a currently active extension for the -current :versionreplace:`database;5.0:branch`. +current |branch|. Examples @@ -77,7 +77,7 @@ schema: drop extension graphql; Disable :ref:`EdgeQL over HTTP ` extension for the -current :versionreplace:`database;5.0:branch`: +current |branch|: .. code-block:: edgeql diff --git a/docs/reference/ddl/future.rst b/docs/reference/ddl/future.rst index 010dd057572..0e6cf34e1e1 100644 --- a/docs/reference/ddl/future.rst +++ b/docs/reference/ddl/future.rst @@ -26,7 +26,7 @@ Description ----------- The command ``create future`` enables the specified future behavior for -the current :versionreplace:`database;5.0:branch`. +the current |branch|. Examples -------- @@ -56,7 +56,7 @@ Description ----------- The command ``drop future`` disables a currently active future behavior for the -current :versionreplace:`database;5.0:branch`. However, this is only possible +current |branch|. However, this is only possible for versions of Gel when the behavior in question is not officially introduced. Once a particular behavior is introduced as the standard behavior in an Gel release, it cannot be disabled. Running this command will simply diff --git a/docs/reference/ddl/modules.rst b/docs/reference/ddl/modules.rst index afc578d85f9..e873dcd11e4 100644 --- a/docs/reference/ddl/modules.rst +++ b/docs/reference/ddl/modules.rst @@ -35,9 +35,9 @@ Description ----------- The command ``create module`` defines a new module for the current -:versionreplace:`database;5.0:branch`. The name of the new module must be +|branch|. The name of the new module must be distinct from any existing module in the current -:versionreplace:`database;5.0:branch`. Unlike :ref:`SDL module declaration +branch. Unlike :ref:`SDL module declaration ` the ``create module`` command does not have sub-commands, as module contents are created separately. @@ -85,7 +85,7 @@ Description ----------- The command ``drop module`` removes an existing empty module from the -current :versionreplace:`database;5.0:branch`. If the module contains any +current |branch|. If the module contains any schema items, this command will fail. diff --git a/docs/reference/ddl/objects.rst b/docs/reference/ddl/objects.rst index b855fe56762..4d51e61a517 100644 --- a/docs/reference/ddl/objects.rst +++ b/docs/reference/ddl/objects.rst @@ -35,7 +35,7 @@ Description ----------- The command ``create type`` defines a new object type for use in the -current :versionreplace:`database;5.0:branch`. +current |branch|. If *name* is qualified with a module name, then the type is created in that module, otherwise it is created in the current module. diff --git a/docs/reference/ddl/scalars.rst b/docs/reference/ddl/scalars.rst index 6c52796eb69..c539094ff33 100644 --- a/docs/reference/ddl/scalars.rst +++ b/docs/reference/ddl/scalars.rst @@ -32,7 +32,7 @@ Description ----------- The command ``create scalar type`` defines a new scalar type for use in the -current :versionreplace:`database;5.0:branch`. +current |branch|. If *name* is qualified with a module name, then the type is created in that module, otherwise it is created in the current module. diff --git a/docs/reference/environment.rst b/docs/reference/environment.rst index 0fb71192bf6..ad125dec861 100644 --- a/docs/reference/environment.rst +++ b/docs/reference/environment.rst @@ -91,8 +91,8 @@ GEL_SERVER_BOOTSTRAP_COMMAND_FILE ................................. Run the script when initializing the database. The script is run by the default -user within the default :versionreplace:`database;5.0:branch`. May be used with -or without :gelenv:`SERVER_BOOTSTRAP_ONLY`. +user within the default |branch|. May be used with or without +:gelenv:`SERVER_BOOTSTRAP_ONLY`. GEL_SERVER_BOOTSTRAP_SCRIPT_FILE @@ -103,7 +103,7 @@ GEL_SERVER_BOOTSTRAP_SCRIPT_FILE Use :gelenv:`SERVER_BOOTSTRAP_COMMAND_FILE` instead. Run the script when initializing the database. The script is run by the default -user within the default :versionreplace:`database;5.0:branch`. +user within the default |branch|. GEL_SERVER_COMPILER_POOL_MODE diff --git a/docs/reference/http.rst b/docs/reference/http.rst index 998f41a7ce8..d8545b212d1 100644 --- a/docs/reference/http.rst +++ b/docs/reference/http.rst @@ -25,8 +25,7 @@ Here's how to determine your *local* Gel instance's HTTP server URL: To determine the URL of a remote instance you have linked with the CLI, you can get both the hostname and port of the instance from the "Port" column of the :gelcmd:`instance list` table (formatted as ``:``). -The same guidance on local :versionreplace:`database;5.0:branch` names -applies to remote instances. +The same guidance on local |branch| names applies to remote instances. .. _ref_reference_health_checks: diff --git a/docs/reference/protocol/index.rst b/docs/reference/protocol/index.rst index cb24c7ff4e8..c7c86a32c9b 100644 --- a/docs/reference/protocol/index.rst +++ b/docs/reference/protocol/index.rst @@ -382,7 +382,7 @@ to finish implicit transaction. Restore Flow ------------ -Restore procedure fills up the :versionreplace:`database;5.0:branch` the +Restore procedure fills up the |branch| the client is connected to with the schema and data from the dump file. Flow is the following: diff --git a/docs/reference/protocol/messages.rst b/docs/reference/protocol/messages.rst index 4b61d8d7eac..f6dac4ffdbd 100644 --- a/docs/reference/protocol/messages.rst +++ b/docs/reference/protocol/messages.rst @@ -292,8 +292,7 @@ Restore Sent by: client. -Initiate restore to the current :versionreplace:`database;5.0:branch`. -See :ref:`ref_protocol_restore_flow`. +Initiate restore to the current |branch|. See :ref:`ref_protocol_restore_flow`. Format: diff --git a/docs/reference/sql_adapter.rst b/docs/reference/sql_adapter.rst index d1255dd759c..74c2a1bc68f 100644 --- a/docs/reference/sql_adapter.rst +++ b/docs/reference/sql_adapter.rst @@ -20,9 +20,8 @@ managed in |.gel| files using Gel Schema Definition Language and migration commands. Any Postgres-compatible client can connect to an Gel database by using the -same port that is used for the Gel protocol and the -:versionreplace:`database;5.0:branch` name, username, and password already used -for the database. +same port that is used for the Gel protocol and the |branch| name, username, +and password already used for the database. .. versionchanged:: 5.0 diff --git a/docs/stdlib/cfg.rst b/docs/stdlib/cfg.rst index 34f9f2042e7..2cf4eadd91b 100644 --- a/docs/stdlib/cfg.rst +++ b/docs/stdlib/cfg.rst @@ -317,35 +317,15 @@ Client connections ---------- -.. eql:type:: cfg::DatabaseConfig - - The :versionreplace:`database;5.0:branch`-level configuration object type. - - This type will have only one object instance. The ``cfg::DatabaseConfig`` - object represents the state of :versionreplace:`database;5.0:branch` and - instance-level Gel configuration. - - For overall configuration state please refer to the :eql:type:`cfg::Config` - instead. - - .. versionadded:: 5.0 - - As of |EdgeDB| 5.0, this config object represents database *branch* - and instance-level configuration. - - ----------- - - .. eql:type:: cfg::BranchConfig .. versionadded:: 5.0 - The :versionreplace:`database;5.0:branch`-level configuration object type. + The branch-level configuration object type. This type will have only one object instance. The ``cfg::BranchConfig`` - object represents the state of :versionreplace:`database;5.0:branch` and - instance-level Gel configuration. + object represents the state of the branch and instance-level Gel + configuration. For overall configuration state please refer to the :eql:type:`cfg::Config` instead. diff --git a/docs/stdlib/deprecated.rst b/docs/stdlib/deprecated.rst index a26722da047..46cde1f5082 100644 --- a/docs/stdlib/deprecated.rst +++ b/docs/stdlib/deprecated.rst @@ -135,3 +135,14 @@ Deprecated {'data'} db> select str_rtrim('data.:.:.', '.:'); {'data'} + +---------- + +.. eql:type:: cfg::DatabaseConfig + + The branch-level configuration object type. + + As of |EdgeDB| 5.0, this config object represents database *branch* + and instance-level configuration. + + **Use the identical** :eql:type:`cfg::BranchConfig` instead. From 511454ab021b6e38ae158774a8cc5e38eb30c326 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Sat, 15 Feb 2025 12:15:06 -0800 Subject: [PATCH 02/23] Refactor Indexes --- docs/datamodel/indexes.rst | 373 +++++++++++++++++++++++---------- docs/reference/ddl/index.rst | 1 - docs/reference/ddl/indexes.rst | 174 --------------- docs/reference/sdl/index.rst | 1 - docs/reference/sdl/indexes.rst | 76 ------- 5 files changed, 263 insertions(+), 362 deletions(-) delete mode 100644 docs/reference/ddl/indexes.rst delete mode 100644 docs/reference/sdl/indexes.rst diff --git a/docs/datamodel/indexes.rst b/docs/datamodel/indexes.rst index 1b9def1b21f..5fbd8e0138e 100644 --- a/docs/datamodel/indexes.rst +++ b/docs/datamodel/indexes.rst @@ -4,201 +4,354 @@ Indexes ======= -.. index:: index on, performance, postgres query planner +.. index:: + index on, performance, postgres query planner An index is a data structure used internally to speed up filtering, ordering, -and grouping operations. Indexes help accomplish this in two key ways: +and grouping operations in |Gel|. Indexes help accomplish this in two key ways: -- They are pre-sorted which saves time on costly sort operations on rows. +- They are pre-sorted, which saves time on costly sort operations on rows. - They can be used by the query planner to filter out irrelevant rows. .. note:: - The Postgres query planner decides when to use indexes for a query. In some - cases — for example, when tables are small and it would be faster to scan - the whole table than to use an index — an applicable index may be ignored. + The Postgres query planner decides when to use indexes for a query. In some + cases—e.g. when tables are small—it may be faster to scan the whole table + rather than use an index. In such scenarios, the index might be ignored. - For more information on how it does this, read `the Postgres query planner - documentation - `_. + For more information on how the planner decides this, see + `the Postgres query planner documentation + `_. -Most commonly, indexes are declared within object type declarations and -reference a particular property. The index can be used to speed up queries -which reference that property in a ``filter``, ``order by``, or ``group`` -clause. -.. note:: +Tradeoffs +========= + +While improving query performance, indexes also increase disk and memory usage +and can slow down insertions and updates. Creating too many indexes may be +detrimental; only index properties you often filter, order, or group by. + +.. important:: + **Foreign and primary keys** + + In SQL databases, indexes are commonly used to index *primary keys* and + *foreign keys*. Gel's analog to a SQL primary key is the ``id`` field + automatically created for each object, while a link in Gel is the analog + to a SQL foreign key. Both of these are automatically indexed. + + Moreover, any property with an :eql:constraint:`exclusive` constraint + is also automatically indexed. - While improving query performance, indexes also increase disk and memory - usage and slow down insertions and updates. Creating too many indexes may be - detrimental; only index properties you often filter, order, or group by. Index on a property -------------------- +=================== -Below, we are referencing the ``User.name`` property with the :ref:`dot -notation shorthand `: ``.name``. +Most commonly, indexes are declared within object type declarations and +reference a particular property. The index can be used to speed up queries +that reference that property in a filter, order by, or group by clause: .. code-block:: sdl - type User { - required name: str; - index on (.name); - } + type User { + required name: str; + index on (.name); + } By indexing on ``User.name``, the query planner will have access to that index -for use when planning queries containing the property in a filter, order, or -group by. This may result in better performance in these queries as the -database can look up a name in the index instead of scanning through all -``User`` objects sequentially, although whether or not to use the index is -ultimately up to the Postgres query planner. +when planning queries using the ``name`` property. This may result in better +performance as the database can look up a name in the index instead of scanning +through all ``User`` objects sequentially—though ultimately it's up to the +Postgres query planner whether to use the index. -To see if an index can help your query, try adding the :ref:`analyze -` keyword before a query with an index compared to one -without. +To see if an index helps, compare query plans by adding +:ref:`analyze ` to your queries. .. note:: - Even if your database is too small now to benefit from an index, it may - benefit from one as it continues to grow. + Even if your database is small now, you may benefit from an index as it grows. Index on an expression ----------------------- +====================== Indexes may be defined using an arbitrary *singleton* expression that references multiple properties of the enclosing object type. .. important:: + A singleton expression is an expression that's guaranteed to return + *at most one* element. As such, you can't index on a ``multi`` property. - A singleton expression is an expression that's guaranteed to return *at most - one* element. As such, you can't index on a ``multi`` property. +Example: .. code-block:: sdl - type User { - required first_name: str; - required last_name: str; - index on (str_lower(.firstname + ' ' + .lastname)); - } + type User { + required first_name: str; + required last_name: str; + index on (str_lower(.first_name + ' ' + .last_name)); + } + Index on multiple properties ----------------------------- +============================ .. index:: tuple -A *composite index* is an index that references multiple properties. This can -speed up queries that filter, order, or group on both properties. +A *composite index* references multiple properties. This can speed up queries +that filter, order, or group on multiple properties at once. .. note:: - An index on multiple properties may also be used in queries where only a - single property in the index is filtered, ordered, or grouped by. It is - best to have the properties most likely to be used in this way listed first - when you create the index on multiple properties. + An index on multiple properties may also be used in queries where only a + single property in the index is referenced. In many traditional database + systems, placing the most frequently used columns first in the composite + index can improve the likelihood of its use. - Read `the Postgres documentation on multicolumn indexes - `_ to - learn more about how the query planner uses these indexes. + Read `the Postgres documentation on multicolumn indexes + `_ to learn + more about how the query planner uses these indexes. -In Gel, this index is created by indexing on a ``tuple`` of properties. +In |Gel|, a composite index is created by indexing on a ``tuple`` of properties: .. code-block:: sdl - type User { - required name: str; - required email: str; - index on ((.name, .email)); - } + type User { + required name: str; + required email: str; + index on ((.name, .email)); + } Index on a link property ------------------------- +======================== .. index:: __subject__, linkprops -Link properties can also be indexed. +Link properties can also be indexed. The special placeholder +``__subject__`` refers to the source object in a link property expression: .. code-block:: sdl - abstract link friendship { - strength: float64; - index on (__subject__@strength); - } + abstract link friendship { + strength: float64; + index on (__subject__@strength); + } - type User { - multi friends: User { - extending friendship; - }; - } + type User { + multi friends: User { + extending friendship; + }; + } Specify a Postgres index type ------------------------------ +============================= .. index:: pg::hash, pg::btree, pg::gin, pg::gist, pg::spgist, pg::brin .. versionadded:: 3.0 -Gel exposes Postgres indexes that you can use in your schemas. These are -exposed through the ``pg`` module. +Gel exposes Postgres index types that can be used directly in schemas via +the ``pg`` module: -* ``pg::hash``- Index based on a 32-bit hash derived from the indexed value +- ``pg::hash`` : Index based on a 32-bit hash of the value +- ``pg::btree`` : B-tree index (can help with sorted data retrieval) +- ``pg::gin`` : Inverted index for multi-element data (arrays, JSON) +- ``pg::gist`` : Generalized Search Tree for range and geometric searches +- ``pg::spgist`` : Space-partitioned GiST +- ``pg::brin`` : Block Range INdex -* ``pg::btree``- B-tree index can be used to retrieve data in sorted order +Example: -* ``pg::gin``- GIN is an "inverted index" appropriate for data values that - contain multiple elements, such as arrays and JSON +.. code-block:: sdl -* ``pg::gist``- GIST index can be used to optimize searches involving ranges + type User { + required name: str; + index pg::spgist on (.name); + } -* ``pg::spgist``- SP-GIST index can be used to optimize searches involving - ranges and strings -* ``pg::brin``- BRIN (Block Range INdex) index works with summaries about the - values stored in consecutive physical block ranges in the database +Annotate an index +================= + +.. index:: annotation -You can use them like this: +Indexes can include annotations: .. code-block:: sdl - type User { - required name: str; - index pg::spgist on (.name); - }; + type User { + name: str; + index on (.name) { + annotation description := 'Indexing all users by name.'; + }; + } -Annotate an index ------------------ +.. _ref_eql_sdl_indexes: -.. index:: annotation +SDL declarations +================ -Indexes can be augmented with annotations. +|Gel's| Schema Definition Language (SDL) supports inline index declarations, +as seen above. The following syntax details how to declare an index in SDL. -.. code-block:: sdl +Syntax +------ - type User { - name: str; - index on (.name) { - annotation description := 'Indexing all users by name.'; - }; - } +.. sdl:synopsis:: -.. important:: + index on ( ) + [ except ( ) ] + [ "{" "}" ] ; + +.. rubric:: Description + +- :sdl:synopsis:`on ( )` + + The expression to index. It must be :ref:`Immutable ` + but may refer to the indexed object's properties/links. The expression itself + must be parenthesized. + +- :eql:synopsis:`except ( )` + + An optional condition. If ```` evaluates to ``true``, the object + is omitted from the index; if ``false`` or empty, it is included. + +- :sdl:synopsis:`` + + Allows setting index :ref:`annotation ` to a given + value. + + +.. _ref_eql_ddl_indexes: + +DDL commands +============ + +This section describes the DDL statements for creating, altering, and +dropping indexes. + +Create index +------------ + +:eql-statement: + +.. eql:synopsis:: + + create index on ( ) + [ except ( ) ] + [ "{" ; [...] "}" ] ; + + # where is one of + + create annotation := + +Creates a new index for a given object type or link using *index-expr*. + +- Most parameters/options match those in + :ref:`SDL > Indexes `. + +- Allowed subcommand: + + :eql:synopsis:`create annotation := ` + Assign an annotation to this index. + See :eql:stmt:`create annotation` for details. + +Example: + +.. code-block:: edgeql + + create type User { + create property name -> str { + set default := ''; + }; + + create index on (.name); + }; + + +Alter index +----------- + +:eql-statement: + +Alter the definition of an index. + +.. eql:synopsis:: + + alter index on ( ) [ except ( ) ] + [ "{" ; [...] "}" ] ; + + # where is one of + + create annotation := + alter annotation := + drop annotation + +The command ``alter index`` is used to change the :ref:`annotations +` of an index. The *index-expr* is used to +identify the index to be altered. + +:sdl:synopsis:`on ( )` + The specific expression for which the index is made. Note also + that ```` itself has to be parenthesized. + +The following subcommands are allowed in the ``alter index`` block: + +:eql:synopsis:`create annotation := ` + Set index :eql:synopsis:`` to + :eql:synopsis:``. + See :eql:stmt:`create annotation` for details. + +:eql:synopsis:`alter annotation ;` + Alter index :eql:synopsis:``. + See :eql:stmt:`alter annotation` for details. + +:eql:synopsis:`drop annotation ;` + Remove constraint :eql:synopsis:``. + See :eql:stmt:`drop annotation` for details. + + +Example: + +.. code-block:: edgeql + + alter type User { + alter index on (.name) { + create annotation title := 'User name index'; + }; + }; + + +Drop index +---------- + +:eql-statement: + +Remove an index from a given schema item. + +.. eql:synopsis:: + + drop index on ( ) [ except ( ) ] ; + +Removes an index from a schema item. + +- :sdl:synopsis:`on ( )` identifies the indexed expression. + +This statement can only be used as a subdefinition in another DDL statement. + +Example: + +.. code-block:: edgeql - **Foreign and primary keys** + alter type User { + drop index on (.name); + }; - In SQL databases, indexes are commonly used to index *primary keys* and - *foreign keys*. Gel's analog to SQL's primary key is the ``id`` field - that gets automatically created for each object, while a link in Gel - is the analog to SQL's foreign key. Both of these are automatically indexed. - Moreover, any property with an :eql:constraint:`exclusive` constraint - is also automatically indexed. .. list-table:: - :class: seealso + :class: seealso - * - **See also** - * - :ref:`SDL > Indexes ` - * - :ref:`DDL > Indexes ` - * - :ref:`Introspection > Indexes ` + * - **See also** + - :ref:`Introspection > Indexes ` diff --git a/docs/reference/ddl/index.rst b/docs/reference/ddl/index.rst index 31562c526d9..c64161c8c96 100644 --- a/docs/reference/ddl/index.rst +++ b/docs/reference/ddl/index.rst @@ -13,7 +13,6 @@ DDL links properties aliases - indexes constraints annotations globals diff --git a/docs/reference/ddl/indexes.rst b/docs/reference/ddl/indexes.rst deleted file mode 100644 index c33eda1ca54..00000000000 --- a/docs/reference/ddl/indexes.rst +++ /dev/null @@ -1,174 +0,0 @@ -.. _ref_eql_ddl_indexes: - -======= -Indexes -======= - -This section describes the DDL commands pertaining to -:ref:`indexes `. - - -Create index -============ - -:eql-statement: - - -:ref:`Define ` an new index for a given object -type or link. - -.. eql:synopsis:: - - create index on ( ) - [ except ( ) ] - [ "{" ; [...] "}" ] ; - - # where is one of - - create annotation := - - -Description ------------ - -The command ``create index`` constructs a new index for a given object type or -link using *index-expr*. - - -Parameters ----------- - -Most sub-commands and options of this command are identical to the -:ref:`SDL index declaration `. There's -only one subcommand that is allowed in the ``create index`` block: - -:eql:synopsis:`create annotation := ` - Set object type :eql:synopsis:`` to - :eql:synopsis:``. - - See :eql:stmt:`create annotation` for details. - - -Example -------- - -Create an object type ``User`` with an indexed ``name`` property: - -.. code-block:: edgeql - - create type User { - create property name -> str { - set default := ''; - }; - - create index on (.name); - }; - - -Alter index -=========== - -:eql-statement: - - -Alter the definition of an :ref:`index `. - -.. eql:synopsis:: - - alter index on ( ) [ except ( ) ] - [ "{" ; [...] "}" ] ; - - # where is one of - - create annotation := - alter annotation := - drop annotation - - -Description ------------ - -The command ``alter index`` is used to change the :ref:`annotations -` of an index. The *index-expr* is used to -identify the index to be altered. - - -Parameters ----------- - -:sdl:synopsis:`on ( )` - The specific expression for which the index is made. Note also - that ```` itself has to be parenthesized. - -The following subcommands are allowed in the ``alter index`` block: - -:eql:synopsis:`create annotation := ` - Set index :eql:synopsis:`` to - :eql:synopsis:``. - See :eql:stmt:`create annotation` for details. - -:eql:synopsis:`alter annotation ;` - Alter index :eql:synopsis:``. - See :eql:stmt:`alter annotation` for details. - -:eql:synopsis:`drop annotation ;` - Remove constraint :eql:synopsis:``. - See :eql:stmt:`drop annotation` for details. - - -Example -------- - -Add an annotation to the index on the ``name`` property of object type -``User``: - -.. code-block:: edgeql - - alter type User { - alter index on (.name) { - create annotation title := "User name index"; - }; - }; - - -Drop index -========== - -:eql-statement: - -Remove an index from a given schema item. - -.. eql:synopsis:: - - drop index on ( ) [ except ( ) ]; - -Description ------------ - -The command ``drop index`` removes an index from a schema item. - -:sdl:synopsis:`on ( )` - The specific expression for which the index was made. - -This statement can only be used as a subdefinition in another -DDL statement. - - -Example -------- - -Drop the ``name`` index from the ``User`` object type: - -.. code-block:: edgeql - - alter type User { - drop index on (.name); - }; - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Indexes ` - * - :ref:`SDL > Indexes ` - * - :ref:`Introspection > Indexes ` diff --git a/docs/reference/sdl/index.rst b/docs/reference/sdl/index.rst index b008a32eebb..1107a2f73fe 100644 --- a/docs/reference/sdl/index.rst +++ b/docs/reference/sdl/index.rst @@ -108,7 +108,6 @@ to the previous migration: links properties aliases - indexes constraints annotations globals diff --git a/docs/reference/sdl/indexes.rst b/docs/reference/sdl/indexes.rst deleted file mode 100644 index 7347dea6efd..00000000000 --- a/docs/reference/sdl/indexes.rst +++ /dev/null @@ -1,76 +0,0 @@ -.. _ref_eql_sdl_indexes: - -======= -Indexes -======= - -This section describes the SDL declarations pertaining to -:ref:`indexes `. - - -Example -------- - -Declare an index for a "User" based on the "name" property: - -.. code-block:: sdl - - type User { - required name: str; - address: str; - - multi friends: User; - - # define an index for User based on name - index on (.name) { - annotation title := 'User name index'; - } - } - -.. _ref_eql_sdl_indexes_syntax: - -Syntax ------- - -Define a new index corresponding to the :ref:`more explicit DDL -commands `. - -.. sdl:synopsis:: - - index on ( ) - [ except ( ) ] - [ "{" "}" ] ; - - -Description ------------ - -This declaration defines a new index with the following options: - -:sdl:synopsis:`on ( )` - The specific expression for which the index is made. - - The expression must be :ref:`Immutable ` but may - refer to the indexed object's properties and links. - - Note also that ```` itself has to be parenthesized. - -:eql:synopsis:`except ( )` - An optional expression defining a condition to create exceptions - to the index. If ```` evaluates to ``true``, - the object is omitted from the index. If it evaluates - to ``false`` or ``{}``, it appears in the index. - -The valid SDL sub-declarations are listed below: - -:sdl:synopsis:`` - Set index :ref:`annotation ` - to a given *value*. - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Indexes ` - * - :ref:`DDL > Indexes ` - * - :ref:`Introspection > Indexes ` From b62a9dc1cf29410ccde2a9b900c3cd37bfbcb71a Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Sat, 15 Feb 2025 13:17:54 -0800 Subject: [PATCH 03/23] Refactor functions --- docs/datamodel/functions.rst | 454 ++++++++++++++++++++++++++++++- docs/datamodel/indexes.rst | 4 +- docs/reference/ddl/functions.rst | 275 ------------------- docs/reference/ddl/index.rst | 1 - docs/reference/sdl/functions.rst | 188 ------------- docs/reference/sdl/index.rst | 1 - 6 files changed, 449 insertions(+), 474 deletions(-) delete mode 100644 docs/reference/ddl/functions.rst delete mode 100644 docs/reference/sdl/functions.rst diff --git a/docs/datamodel/functions.rst b/docs/datamodel/functions.rst index 7f2030a00f1..909cd6a160e 100644 --- a/docs/datamodel/functions.rst +++ b/docs/datamodel/functions.rst @@ -12,12 +12,11 @@ Functions large library of built-in functions and operators. These are documented in :ref:`Standard Library `. -Functions are ways to transform one set of data into another. User-defined Functions ----------------------- +====================== -It is also possible to define custom functions. For example, consider +Gel allows you to define custom functions. For example, consider a function that adds an exclamation mark ``'!'`` at the end of the string: @@ -34,10 +33,11 @@ This function accepts a :eql:type:`str` as an argument and produces a test> select exclamation({'Hello', 'World'}); {'Hello!', 'World!'} + .. _ref_datamodel_functions_modifying: Sets as arguments -^^^^^^^^^^^^^^^^^ +================= Calling a user-defined function on a set will always apply it as :ref:`*element-wise* `. @@ -78,8 +78,9 @@ applied element-wise. db> select magnitude({[3, 4], [5, 12]}); {5, 13} + Modifying Functions -^^^^^^^^^^^^^^^^^^^ +=================== .. versionadded:: 6.0 @@ -150,12 +151,451 @@ aggregated into an array as described above: } ); + +.. _ref_eql_sdl_functions: + +Declaring functions +=================== + +This section describes the SDL declarations pertaining to +:ref:`functions `. + + +Example +------- + +Declare a custom function that concatenates the length of a string +to the end of that string: + +.. code-block:: sdl + + function foo(s: str) -> str + using ( + select s ++ len(a) + ); + + +.. _ref_eql_sdl_functions_syntax: + +Syntax +------ + +Define a new function corresponding to the :ref:`more explicit DDL +commands `. + +.. sdl:synopsis:: + + function ([ ] [, ... ]) -> + using ( ); + + function ([ ] [, ... ]) -> + using ; + + function ([ ] [, ... ]) -> + "{" + [ ] + [ volatility := {'Immutable' | 'Stable' | 'Volatile' | 'Modifying'} ] + [ using ( ) ; ] + [ using ; ] + [ ... ] + "}" ; + + # where is: + + [ ] : [ ] [ = ] + + # is: + + [ { variadic | named only } ] + + # is: + + [ { set of | optional } ] + + # and is: + + [ ] + + +Description +----------- + +This declaration defines a new **function** with the following options: + +:eql:synopsis:`` + The name (optionally module-qualified) of the function to create. + +:eql:synopsis:`` + The kind of an argument: ``variadic`` or ``named only``. + + If not specified, the argument is called *positional*. + + The ``variadic`` modifier indicates that the function takes an + arbitrary number of arguments of the specified type. The passed + arguments will be passed as an array of the argument type. + Positional arguments cannot follow a ``variadic`` argument. + ``variadic`` parameters cannot have a default value. + + The ``named only`` modifier indicates that the argument can only + be passed using that specific name. Positional arguments cannot + follow a ``named only`` argument. + +:eql:synopsis:`` + The name of an argument. If ``named only`` modifier is used this + argument *must* be passed using this name only. + +.. _ref_sdl_function_typequal: + +:eql:synopsis:`` + The type qualifier: ``set of`` or ``optional``. + + The ``set of`` qualifier indicates that the function is taking the + argument as a *whole set*, as opposed to being called on the input + product element-by-element. + + User defined functions can not use ``set of`` arguments. + + The ``optional`` qualifier indicates that the function will be called + if the argument is an empty set. The default behavior is to return + an empty set if the argument is not marked as ``optional``. + +:eql:synopsis:`` + The data type of the function's arguments + (optionally module-qualified). + +:eql:synopsis:`` + An expression to be used as default value if the parameter is not + specified. The expression has to be of a type compatible with the + type of the argument. + +.. _ref_sdl_function_rettype: + +:eql:synopsis:`` + The return data type (optionally module-qualified). + + The ``set of`` modifier indicates that the function will return + a non-singleton set. + + The ``optional`` qualifier indicates that the function may return + an empty set. + +The valid SDL sub-declarations are listed below: + +:eql:synopsis:`volatility := {'Immutable' | 'Stable' | 'Volatile' | 'Modifying'}` + Function volatility determines how aggressively the compiler can + optimize its invocations. + + If not explicitly specified the function volatility is + :ref:`inferred ` from the function body. + + * An ``Immutable`` function cannot modify the database and is + guaranteed to return the same results given the same arguments + *in all statements*. + + * A ``Stable`` function cannot modify the database and is + guaranteed to return the same results given the same + arguments *within a single statement*. + + * A ``Volatile`` function cannot modify the database and can return + different results on successive calls with the same arguments. + + * A ``Modifying`` function can modify the database and can return + different results on successive calls with the same arguments. + +:eql:synopsis:`using ( )` + Specifies the body of the function. :eql:synopsis:`` is an + arbitrary EdgeQL expression. + +:eql:synopsis:`using ` + A verbose version of the :eql:synopsis:`using` clause that allows + specifying the language of the function body. + + * :eql:synopsis:`` is the name of the language that + the function is implemented in. Currently can only be ``edgeql``. + + * :eql:synopsis:`` is a string constant defining + the function. It is often helpful to use + :ref:`dollar quoting ` + to write the function definition string. + +:sdl:synopsis:`` + Set function :ref:`annotation ` + to a given *value*. + +The function name must be distinct from that of any existing function +with the same argument types in the same module. Functions of +different argument types can share a name, in which case the functions +are called *overloaded functions*. + + +.. _ref_eql_ddl_functions: + +DDL commands +============ + +This section describes the DDL statements for creating, altering, and +dropping functions. + + +Create function +--------------- + +:eql-statement: +:eql-haswith: + +Define a new function. + +.. eql:synopsis:: + + [ with [, ...] ] + create function ([ ] [, ... ]) -> + using ( ); + + [ with [, ...] ] + create function ([ ] [, ... ]) -> + using ; + + [ with [, ...] ] + create function ([ ] [, ... ]) -> + "{" [, ...] "}" ; + + # where is: + + [ ] : [ ] [ = ] + + # is: + + [ { variadic | named only } ] + + # is: + + [ { set of | optional } ] + + # and is: + + [ ] + + # and is one of + + set volatility := {'Immutable' | 'Stable' | 'Volatile' | 'Modifying'} ; + create annotation := ; + using ( ) ; + using ; + + +Description +^^^^^^^^^^^ + +The command ``create function`` defines a new function. If *name* is +qualified with a module name, then the function is created in that +module, otherwise it is created in the current module. + +The function name must be distinct from that of any existing function +with the same argument types in the same module. Functions of +different argument types can share a name, in which case the functions +are called *overloaded functions*. + + +Parameters +^^^^^^^^^^ + +Most sub-commands and options of this command are identical to the +:ref:`SDL function declaration `, with +some additional features listed below: + +:eql:synopsis:`set volatility := {'Immutable' | 'Stable' | 'Volatile' | 'Modifying'}` + Function volatility determines how aggressively the compiler can + optimize its invocations. Other than a slight syntactical + difference this is the same as the corresponding SDL declaration. + +:eql:synopsis:`create annotation := ` + Set the function's :eql:synopsis:`` to + :eql:synopsis:``. + + See :eql:stmt:`create annotation` for details. + + +Examples +^^^^^^^^ + +Define a function returning the sum of its arguments: + +.. code-block:: edgeql + + create function mysum(a: int64, b: int64) -> int64 + using ( + select a + b + ); + +The same, but using a variadic argument and an explicit language: + +.. code-block:: edgeql + + create function mysum(variadic argv: int64) -> int64 + using edgeql $$ + select sum(array_unpack(argv)) + $$; + +Define a function using the block syntax: + +.. code-block:: edgeql + + create function mysum(a: int64, b: int64) -> int64 { + using ( + select a + b + ); + create annotation title := "My sum function."; + }; + + +Alter function +-------------- + +:eql-statement: +:eql-haswith: + +Change the definition of a function. + +.. eql:synopsis:: + + [ with [, ...] ] + alter function ([ ] [, ... ]) "{" + [, ...] + "}" + + # where is: + + [ ] : [ ] [ = ] + + # and is one of + + set volatility := {'Immutable' | 'Stable' | 'Volatile' | 'Modifying'} ; + reset volatility ; + rename to ; + create annotation := ; + alter annotation := ; + drop annotation ; + using ( ) ; + using ; + + +Description +^^^^^^^^^^^ + +The command ``alter function`` changes the definition of a function. +The command allows changing annotations, the volatility level, and +other attributes. + + +Subcommands +^^^^^^^^^^^ + +The following subcommands are allowed in the ``alter function`` block +in addition to the commands common to the ``create function``: + +:eql:synopsis:`reset volatility` + Remove explicitly specified volatility in favor of the volatility + inferred from the function body. + +:eql:synopsis:`rename to ` + Change the name of the function to *newname*. + +:eql:synopsis:`alter annotation ;` + Alter function :eql:synopsis:``. + See :eql:stmt:`alter annotation` for details. + +:eql:synopsis:`drop annotation ;` + Remove function :eql:synopsis:``. + See :eql:stmt:`drop annotation` for details. + +:eql:synopsis:`reset errmessage;` + Remove the error message from this abstract constraint. + The error message specified in the base abstract constraint + will be used instead. + + +Example +^^^^^^^ + +.. code-block:: edgeql + + create function mysum(a: int64, b: int64) -> int64 { + using ( + select a + b + ); + create annotation title := "My sum function."; + }; + + alter function mysum(a: int64, b: int64) { + set volatility := 'Immutable'; + drop annotation title; + }; + + alter function mysum(a: int64, b: int64) { + using ( + select (a + b) * 100 + ) + }; + + +Drop function +------------- + +:eql-statement: +:eql-haswith: + + +Remove a function. + +.. eql:synopsis:: + + [ with [, ...] ] + drop function ([ ] [, ... ]); + + # where is: + + [ ] : [ ] [ = ] + + +Description +^^^^^^^^^^^ + +The command ``drop function`` removes the definition of an existing function. +The argument types to the function must be specified, since there +can be different functions with the same name. + + +Parameters +^^^^^^^^^^ + +:eql:synopsis:`` + The name (optionally module-qualified) of an existing function. + +:eql:synopsis:`` + The name of an argument used in the function definition. + +:eql:synopsis:`` + The mode of an argument: ``set of`` or ``optional`` or ``variadic``. + +:eql:synopsis:`` + The data type(s) of the function's arguments + (optionally module-qualified), if any. + + +Example +^^^^^^^ + +Remove the ``mysum`` function: + +.. code-block:: edgeql + + drop function mysum(a: int64, b: int64); + + .. list-table:: :class: seealso * - **See also** - * - :ref:`SDL > Functions ` - * - :ref:`DDL > Functions ` * - :ref:`Reference > Function calls ` * - :ref:`Introspection > Functions ` * - :ref:`Cheatsheets > Functions ` diff --git a/docs/datamodel/indexes.rst b/docs/datamodel/indexes.rst index 5fbd8e0138e..fd0850f3a61 100644 --- a/docs/datamodel/indexes.rst +++ b/docs/datamodel/indexes.rst @@ -190,8 +190,8 @@ Indexes can include annotations: .. _ref_eql_sdl_indexes: -SDL declarations -================ +Declaring indexes +================= |Gel's| Schema Definition Language (SDL) supports inline index declarations, as seen above. The following syntax details how to declare an index in SDL. diff --git a/docs/reference/ddl/functions.rst b/docs/reference/ddl/functions.rst deleted file mode 100644 index 57a1eabffe0..00000000000 --- a/docs/reference/ddl/functions.rst +++ /dev/null @@ -1,275 +0,0 @@ -.. _ref_eql_ddl_functions: - -========= -Functions -========= - -This section describes the DDL commands pertaining to -:ref:`functions `. - - -Create function -=============== - -:eql-statement: -:eql-haswith: - - -:ref:`Define ` a new function. - -.. eql:synopsis:: - - [ with [, ...] ] - create function ([ ] [, ... ]) -> - using ( ); - - [ with [, ...] ] - create function ([ ] [, ... ]) -> - using ; - - [ with [, ...] ] - create function ([ ] [, ... ]) -> - "{" [, ...] "}" ; - - # where is: - - [ ] : [ ] [ = ] - - # is: - - [ { variadic | named only } ] - - # is: - - [ { set of | optional } ] - - # and is: - - [ ] - - # and is one of - - set volatility := {'Immutable' | 'Stable' | 'Volatile' | 'Modifying'} ; - create annotation := ; - using ( ) ; - using ; - - -Description ------------ - -The command ``create function`` defines a new function. If *name* is -qualified with a module name, then the function is created in that -module, otherwise it is created in the current module. - -The function name must be distinct from that of any existing function -with the same argument types in the same module. Functions of -different argument types can share a name, in which case the functions -are called *overloaded functions*. - - -Parameters ----------- - -Most sub-commands and options of this command are identical to the -:ref:`SDL function declaration `, with -some additional features listed below: - -:eql:synopsis:`set volatility := {'Immutable' | 'Stable' | 'Volatile' | 'Modifying'}` - Function volatility determines how aggressively the compiler can - optimize its invocations. Other than a slight syntactical - difference this is the same as the corresponding SDL declaration. - -:eql:synopsis:`create annotation := ` - Set the function's :eql:synopsis:`` to - :eql:synopsis:``. - - See :eql:stmt:`create annotation` for details. - - -Examples --------- - -Define a function returning the sum of its arguments: - -.. code-block:: edgeql - - create function mysum(a: int64, b: int64) -> int64 - using ( - select a + b - ); - -The same, but using a variadic argument and an explicit language: - -.. code-block:: edgeql - - create function mysum(variadic argv: int64) -> int64 - using edgeql $$ - select sum(array_unpack(argv)) - $$; - -Define a function using the block syntax: - -.. code-block:: edgeql - - create function mysum(a: int64, b: int64) -> int64 { - using ( - select a + b - ); - create annotation title := "My sum function."; - }; - - -Alter function -============== - -:eql-statement: -:eql-haswith: - -Change the definition of a function. - -.. eql:synopsis:: - - [ with [, ...] ] - alter function ([ ] [, ... ]) "{" - [, ...] - "}" - - # where is: - - [ ] : [ ] [ = ] - - # and is one of - - set volatility := {'Immutable' | 'Stable' | 'Volatile' | 'Modifying'} ; - reset volatility ; - rename to ; - create annotation := ; - alter annotation := ; - drop annotation ; - using ( ) ; - using ; - - -Description ------------ - -The command ``alter function`` changes the definition of a function. -The command allows to change annotations, the volatility level, and -other attributes. - - -Subcommands ------------ - -The following subcommands are allowed in the ``alter function`` block -in addition to the commands common to the ``create function``: - -:eql:synopsis:`reset volatility` - Remove explicitly specified volatility in favor of the volatility - inferred from the function body. - -:eql:synopsis:`rename to ` - Change the name of the function to *newname*. - -:eql:synopsis:`alter annotation ;` - Alter function :eql:synopsis:``. - See :eql:stmt:`alter annotation` for details. - -:eql:synopsis:`drop annotation ;` - Remove function :eql:synopsis:``. - See :eql:stmt:`drop annotation` for details. - -:eql:synopsis:`reset errmessage;` - Remove the error message from this abstract constraint. - The error message specified in the base abstract constraint - will be used instead. - - -Example -------- - -.. code-block:: edgeql - - create function mysum(a: int64, b: int64) -> int64 { - using ( - select a + b - ); - create annotation title := "My sum function."; - }; - - alter function mysum(a: int64, b: int64) { - set volatility := 'Immutable'; - DROP ANNOTATION title; - }; - - alter function mysum(a: int64, b: int64) { - using ( - select (a + b) * 100 - ) - }; - - -Drop function -============= - -:eql-statement: -:eql-haswith: - - -Remove a function. - -.. eql:synopsis:: - - [ with [, ...] ] - drop function ([ ] [, ... ]); - - # where is: - - [ ] : [ ] [ = ] - - -Description ------------ - -The command ``drop function`` removes the definition of an existing function. -The argument types to the function must be specified, since there -can be different functions with the same name. - - -Parameters ----------- - -:eql:synopsis:`` - The name (optionally module-qualified) of an existing function. - -:eql:synopsis:`` - The name of an argument used in the function definition. - -:eql:synopsis:`` - The mode of an argument: ``set of`` or ``optional`` or ``variadic``. - -:eql:synopsis:`` - The data type(s) of the function's arguments - (optionally module-qualified), if any. - - -Example -------- - -Remove the ``mysum`` function: - -.. code-block:: edgeql - - drop function mysum(a: int64, b: int64); - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Functions ` - * - :ref:`SDL > Functions ` - * - :ref:`Reference > Function calls ` - * - :ref:`Introspection > Functions ` - * - :ref:`Cheatsheets > Functions ` diff --git a/docs/reference/ddl/index.rst b/docs/reference/ddl/index.rst index c64161c8c96..47f3c1a691b 100644 --- a/docs/reference/ddl/index.rst +++ b/docs/reference/ddl/index.rst @@ -17,7 +17,6 @@ DDL annotations globals access_policies - functions triggers mutation_rewrites extensions diff --git a/docs/reference/sdl/functions.rst b/docs/reference/sdl/functions.rst deleted file mode 100644 index 7f755784a47..00000000000 --- a/docs/reference/sdl/functions.rst +++ /dev/null @@ -1,188 +0,0 @@ -.. _ref_eql_sdl_functions: - -========= -Functions -========= - -This section describes the SDL declarations pertaining to -:ref:`functions `. - - -Example -------- - -Declare a custom function that concatenates the length of a string to -the end of the that string: - -.. code-block:: sdl - - function foo(s: str) -> str - using ( - select s ++ len(a) - ); - -.. _ref_eql_sdl_functions_syntax: - -Syntax ------- - -Define a new function corresponding to the :ref:`more explicit DDL -commands `. - -.. sdl:synopsis:: - - function ([ ] [, ... ]) -> - using ( ); - - function ([ ] [, ... ]) -> - using ; - - function ([ ] [, ... ]) -> - "{" - [ ] - [ volatility := {'Immutable' | 'Stable' | 'Volatile' | 'Modifying'} ] - [ using ( ) ; ] - [ using ; ] - [ ... ] - "}" ; - - # where is: - - [ ] : [ ] [ = ] - - # is: - - [ { variadic | named only } ] - - # is: - - [ { set of | optional } ] - - # and is: - - [ ] - - -Description ------------ - - - -This declaration defines a new constraint with the following options: - -:eql:synopsis:`` - The name (optionally module-qualified) of the function to create. - -:eql:synopsis:`` - The kind of an argument: ``variadic`` or ``named only``. - - If not specified, the argument is called *positional*. - - The ``variadic`` modifier indicates that the function takes an - arbitrary number of arguments of the specified type. The passed - arguments will be passed as as array of the argument type. - Positional arguments cannot follow a ``variadic`` argument. - ``variadic`` parameters cannot have a default value. - - The ``named only`` modifier indicates that the argument can only - be passed using that specific name. Positional arguments cannot - follow a ``named only`` argument. - -:eql:synopsis:`` - The name of an argument. If ``named only`` modifier is used this - argument *must* be passed using this name only. - -.. _ref_sdl_function_typequal: - -:eql:synopsis:`` - The type qualifier: ``set of`` or ``optional``. - - The ``set of`` qualifier indicates that the function is taking the - argument as a *whole set*, as opposed to being called on the input - product element-by-element. - - User defined functions can not use ``set of`` arguments. - - The ``optional`` qualifier indicates that the function will be called - if the argument is an empty set. The default behavior is to return - an empty set if the argument is not marked as ``optional``. - -:eql:synopsis:`` - The data type of the function's arguments - (optionally module-qualified). - -:eql:synopsis:`` - An expression to be used as default value if the parameter is not - specified. The expression has to be of a type compatible with the - type of the argument. - -.. _ref_sdl_function_rettype: - -:eql:synopsis:`` - The return data type (optionally module-qualified). - - The ``set of`` modifier indicates that the function will return - a non-singleton set. - - The ``optional`` qualifier indicates that the function may return - an empty set. - -The valid SDL sub-declarations are listed below: - -:eql:synopsis:`volatility := {'Immutable' | 'Stable' | 'Volatile' | 'Modifying'}` - Function volatility determines how aggressively the compiler can - optimize its invocations. - - If not explicitly specified the function volatility is - :ref:`inferred ` from the function body. - - * An ``Immutable`` function cannot modify the database and is - guaranteed to return the same results given the same arguments - *in all statements*. - - * A ``Stable`` function cannot modify the database and is - guaranteed to return the same results given the same - arguments *within a single statement*. - - * A ``Volatile`` function cannot modify the database and can return - different results on successive calls with the same arguments. - - * A ``Modifying`` function can modify the database and can return - different results on successive calls with the same arguments. - -:eql:synopsis:`using ( )` - Specified the body of the function. :eql:synopsis:`` is an - arbitrary EdgeQL expression. - -:eql:synopsis:`using ` - A verbose version of the :eql:synopsis:`using` clause that allows - to specify the language of the function body. - - * :eql:synopsis:`` is the name of the language that - the function is implemented in. Currently can only be ``edgeql``. - - * :eql:synopsis:`` is a string constant defining - the function. It is often helpful to use - :ref:`dollar quoting ` - to write the function definition string. - -:sdl:synopsis:`` - Set function :ref:`annotation ` - to a given *value*. - -The function name must be distinct from that of any existing function -with the same argument types in the same module. Functions of -different argument types can share a name, in which case the functions -are called *overloaded functions*. - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Functions ` - * - :ref:`DDL > Functions ` - * - :ref:`Reference > Function calls ` - * - :ref:`Introspection > Functions ` - * - :ref:`Cheatsheets > Functions ` - diff --git a/docs/reference/sdl/index.rst b/docs/reference/sdl/index.rst index 1107a2f73fe..7e374bb528d 100644 --- a/docs/reference/sdl/index.rst +++ b/docs/reference/sdl/index.rst @@ -112,7 +112,6 @@ to the previous migration: annotations globals access_policies - functions triggers mutation_rewrites extensions From 5c60f4d424c883836e99297e2084f01f9863fe28 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Sat, 15 Feb 2025 14:05:01 -0800 Subject: [PATCH 04/23] Refactor modules --- docs/datamodel/functions.rst | 5 +- docs/datamodel/index.rst | 66 +------- docs/datamodel/modules.rst | 295 +++++++++++++++++++++++++++++++++ docs/reference/ddl/index.rst | 1 - docs/reference/ddl/modules.rst | 99 ----------- docs/reference/sdl/index.rst | 1 - docs/reference/sdl/modules.rst | 123 -------------- 7 files changed, 299 insertions(+), 291 deletions(-) create mode 100644 docs/datamodel/modules.rst delete mode 100644 docs/reference/ddl/modules.rst delete mode 100644 docs/reference/sdl/modules.rst diff --git a/docs/datamodel/functions.rst b/docs/datamodel/functions.rst index 909cd6a160e..ec9079fbc29 100644 --- a/docs/datamodel/functions.rst +++ b/docs/datamodel/functions.rst @@ -157,8 +157,7 @@ aggregated into an array as described above: Declaring functions =================== -This section describes the SDL declarations pertaining to -:ref:`functions `. +This section describes the syntax to declare a function. Example @@ -218,7 +217,7 @@ commands `. Description ------------ +^^^^^^^^^^^ This declaration defines a new **function** with the following options: diff --git a/docs/datamodel/index.rst b/docs/datamodel/index.rst index 1a363e79a0f..54a9d372e1a 100644 --- a/docs/datamodel/index.rst +++ b/docs/datamodel/index.rst @@ -22,6 +22,7 @@ Schema annotations globals access_policies + modules functions triggers mutation_rewrites @@ -121,8 +122,6 @@ Instances can be branched when working on new features, similar to branches in your VCS. Each branch has its own schema and data. -.. _ref_datamodel_modules: - Module ^^^^^^ @@ -131,65 +130,4 @@ Each |branch| has a schema consisting of several schemas into logical units. In practice, though, most users put their entire schema inside a single module called ``default``. -.. code-block:: sdl - - module default { - # declare types here - } - -.. versionadded:: 3.0 - - You may define nested modules using the following syntax: - - .. code-block:: sdl - - module dracula { - type Person { - required property name -> str; - multi link places_visited -> City; - property strength -> int16; - } - - module combat { - function fight( - one: dracula::Person, - two: dracula::Person - ) -> str - using ( - (one.name ?? 'Fighter 1') ++ ' wins!' - IF (one.strength ?? 0) > (two.strength ?? 0) - ELSE (two.name ?? 'Fighter 2') ++ ' wins!' - ); - } - } - - Here we have a ``dracula`` module containing a ``Person`` type. Nested in - the ``dracula`` module we have a ``combat`` module. - -.. _ref_name_resolution: - -.. note:: Name resolution - - When referencing schema objects from another module, you must use - a *fully-qualified* name in the form ``module_name::object_name``. - -The following module names are reserved by |Gel| and contain pre-defined -types, utility functions, and operators. - -* ``std``: standard types, functions, and operators in the :ref:`standard - library ` -* ``math``: algebraic and statistical :ref:`functions ` -* ``cal``: local (non-timezone-aware) and relative date/time :ref:`types and - functions ` -* ``schema``: types describing the :ref:`introspection - ` schema -* ``sys``: system-wide entities, such as user roles and - :ref:`databases ` -* ``cfg``: configuration and settings - -.. versionadded:: 3.0 - - You can chain together module names in a fully-qualified name to traverse a - tree of nested modules. For example, to call the ``fight`` function in the - nested module example above, you would use - ``dracula::combat::fight()``. +Read more about modules in the :ref:`modules ` section. diff --git a/docs/datamodel/modules.rst b/docs/datamodel/modules.rst new file mode 100644 index 00000000000..b24a4dfc260 --- /dev/null +++ b/docs/datamodel/modules.rst @@ -0,0 +1,295 @@ +.. _ref_datamodel_modules: + +======= +Modules +======= + +Each |branch| has a schema consisting of several **modules**, each with +a unique name. Modules can be used to organize large schemas into +logical units. In practice, though, most users put their entire +schema inside a single module called ``default``. + +.. code-block:: sdl + + module default { + # declare types here + } + +.. _ref_name_resolution: + +Name resolution +=============== + +When you define a module that references schema objects from another module, +you must use a *fully-qualified* name in the form +``other_module_name::object_name``: + +.. code-block:: sdl + + module A { + type User extending B::AbstractUser; + } + + module B { + abstract type AbstractUser { + required name: str; + } + } + +Reserved module names +===================== + +The following module names are reserved by |Gel| and contain pre-defined +types, utility functions, and operators: + +* ``std``: standard types, functions, and operators in the :ref:`standard + library ` +* ``math``: algebraic and statistical :ref:`functions ` +* ``cal``: local (non-timezone-aware) and relative date/time :ref:`types and + functions ` +* ``schema``: types describing the :ref:`introspection + ` schema +* ``sys``: system-wide entities, such as user roles and + :ref:`databases ` +* ``cfg``: configuration and settings + + +.. _ref_eql_sdl_modules: + +Declaring modules +================= + +This section describes the syntax to declare a module. + +Example +------- + +Declare an empty module: + +.. code-block:: sdl + + module my_module {} + + +Declare a module with some content: + +.. code-block:: sdl + + module my_module { + type User { + required name: str; + } + } + +Declare a nested module: + +.. code-block:: sdl + + module dracula { + type Person { + required name: str; + multi places_visited: City; + strength: int16; + } + + module combat { + function fight( + one: dracula::Person, + two: dracula::Person + ) -> str + using ( + (one.name ?? 'Fighter 1') ++ ' wins!' + IF (one.strength ?? 0) > (two.strength ?? 0) + ELSE (two.name ?? 'Fighter 2') ++ ' wins!' + ); + } + } + +You can chain together module names in a fully-qualified name to traverse a +tree of nested modules. For example, to call the ``fight`` function in the +nested module example above, you would use +``dracula::combat::fight()``. + +Syntax +------ + +Define a module corresponding to the :ref:`more explicit DDL +commands `. + +.. sdl:synopsis:: + + module "{" + [ ] + ... + "}" + +Define a nested module: + +.. sdl:synopsis:: + + module "{" + [ ] + module "{" + [ ] + "}" + ... + "}" + + +Description +^^^^^^^^^^^ + +The module block declaration defines a new module similar to the +:eql:stmt:`create module` command, but it also allows putting the +module content as nested declarations: + +:sdl:synopsis:`` + Define various schema items that belong to this module. + +Unlike :eql:stmt:`create module`, a module block with the +same name can appear multiple times in an SDL document. In that case +all blocks with the same name are merged into a single module under +that name. For example: + +.. code-block:: sdl + + module my_module { + abstract type Named { + required name: str; + } + } + + module my_module { + type User extending Named; + } + +The above is equivalent to: + +.. code-block:: sdl + + module my_module { + abstract type Named { + required name: str; + } + + type User extending Named; + } + +Typically, in the documentation examples of SDL the *module block* is +omitted and instead its contents are described without assuming which +specific module they belong to. + +It's also possible to declare modules implicitly. In this style, SDL +declaration uses a :ref:`fully-qualified name ` for the +item that is being declared. The *module* part of the *fully-qualified* name +implies that a module by that name will be automatically created in the +schema. The following declaration is equivalent to the previous examples, +but it declares module ``my_module`` implicitly: + +.. code-block:: sdl + + abstract type my_module::Named { + required name: str; + } + + type my_module::User extending my_module::Named; + +A module block can be nested inside another module block to create a nested +module. If you want to reference an entity in a nested module by its +fully-qualified name, you will need to include all of the containing +modules' names: ``::::`` + +.. _ref_eql_ddl_modules: + +DDL commands +============ + +This section describes the DDL commands for creating and dropping +modules. + +Create module +------------- + +:eql-statement: + +Create a new module. + +.. eql:synopsis:: + + create module [ if not exists ]; + +There's a :ref:`corresponding SDL declaration ` +for a module, although in SDL a module declaration is likely to also +include that module's content. + +.. versionadded:: 3.0 + + You may also create a nested module. + + .. eql:synopsis:: + + create module :: [ if not exists ]; + +Description +^^^^^^^^^^^ + +The command ``create module`` defines a new module for the current +:versionreplace:`database;5.0:branch`. The name of the new module must be +distinct from any existing module in the current +:versionreplace:`database;5.0:branch`. Unlike :ref:`SDL module declaration +` the ``create module`` command does not have sub-commands; +module contents are created separately. + +Parameters +^^^^^^^^^^ + +:eql:synopsis:`if not exists` + Normally, creating a module that already exists is an error, but + with this flag the command will succeed. It is useful for scripts + that add something to a module or, if the module is missing, the + module is created as well. + +Examples +^^^^^^^^ + +Create a new module: + +.. code-block:: edgeql + + create module payments; + +.. versionadded:: 3.0 + + Create a new nested module: + + .. code-block:: edgeql + + create module payments::currencies; + + +Drop module +----------- + +:eql-statement: + +Remove a module. + +.. eql:synopsis:: + + drop module ; + +Description +^^^^^^^^^^^ + +The command ``drop module`` removes an existing empty module from the +current :versionreplace:`database;5.0:branch`. If the module contains any +schema items, this command will fail. + +Examples +^^^^^^^^ + +Remove a module: + +.. code-block:: edgeql + + drop module payments; diff --git a/docs/reference/ddl/index.rst b/docs/reference/ddl/index.rst index 47f3c1a691b..6ba03657e66 100644 --- a/docs/reference/ddl/index.rst +++ b/docs/reference/ddl/index.rst @@ -7,7 +7,6 @@ DDL :maxdepth: 3 :hidden: - modules objects scalars links diff --git a/docs/reference/ddl/modules.rst b/docs/reference/ddl/modules.rst deleted file mode 100644 index e873dcd11e4..00000000000 --- a/docs/reference/ddl/modules.rst +++ /dev/null @@ -1,99 +0,0 @@ -.. _ref_eql_ddl_modules: - -======= -Modules -======= - -This section describes the DDL commands pertaining to -:ref:`modules `. - - -Create module -============= - -:eql-statement: - -Create a new module. - -.. eql:synopsis:: - - create module [ if not exists ]; - -There's a :ref:`corresponding SDL declaration ` -for a module, although in SDL a module declaration is likely to also -include that module's content. - -.. versionadded:: 3.0 - - You may also create a nested module. - - .. eql:synopsis:: - - create module :: [ if not exists ]; - -Description ------------ - -The command ``create module`` defines a new module for the current -|branch|. The name of the new module must be -distinct from any existing module in the current -branch. Unlike :ref:`SDL module declaration -` the ``create module`` command does not have -sub-commands, as module contents are created separately. - -Parameters ----------- - -:eql:synopsis:`if not exists` - Normally creating a module that already exists is an error, but - with this flag the command will succeed. It is useful for scripts - that add something to a module or if the module is missing the - module is created as well. - -Examples --------- - -Create a new module: - -.. code-block:: edgeql - - create module payments; - -.. versionadded:: 3.0 - - Create a new nested module: - - .. code-block:: edgeql - - create module payments::currencies; - - -Drop module -=========== - -:eql-statement: - - -Remove a module. - -.. eql:synopsis:: - - drop module ; - - -Description ------------ - -The command ``drop module`` removes an existing empty module from the -current |branch|. If the module contains any -schema items, this command will fail. - - -Examples --------- - -Remove a module: - -.. code-block:: edgeql - - drop module payments; diff --git a/docs/reference/sdl/index.rst b/docs/reference/sdl/index.rst index 7e374bb528d..f480ba0194e 100644 --- a/docs/reference/sdl/index.rst +++ b/docs/reference/sdl/index.rst @@ -102,7 +102,6 @@ to the previous migration: :maxdepth: 3 :hidden: - modules objects scalars links diff --git a/docs/reference/sdl/modules.rst b/docs/reference/sdl/modules.rst deleted file mode 100644 index 81e3dff197b..00000000000 --- a/docs/reference/sdl/modules.rst +++ /dev/null @@ -1,123 +0,0 @@ -.. _ref_eql_sdl_modules: - -======= -Modules -======= - -This section describes the SDL commands pertaining to -:ref:`modules `. - - -Example -------- - -Declare an empty module: - -.. code-block:: sdl - - module my_module {} - - -Declare a module with some content: - -.. code-block:: sdl - - module my_module { - type User { - required name: str; - } - } - -Syntax ------- - -Define a module corresponding to the :ref:`more explicit DDL -commands `. - -.. sdl:synopsis:: - - module "{" - [ ] - ... - "}" - -.. versionadded:: 3.0 - - Define a nested module. - - .. sdl:synopsis:: - - module "{" - [ ] - module "{" - [ ] - "}" - ... - "}" - - -Description ------------ - -The module block declaration defines a new module similar to the -:eql:stmt:`create module` command, but it also allows putting the -module content as nested declarations: - -:sdl:synopsis:`` - Define various schema items that belong to this module. - -Unlike :eql:stmt:`create module` command, a module block with the -same name can appear multiple times in an SDL document. In that case -all blocks with the same name are merged into a single module under -that name. For example: - -.. code-block:: sdl - - module my_module { - abstract type Named { - required name: str; - } - } - - module my_module { - type User extending Named; - } - -The above is equivalent to: - -.. code-block:: sdl - - module my_module { - abstract type Named { - required name: str; - } - - type User extending Named; - } - -Typically, in the documentation examples of SDL the *module block* is -omitted and instead its contents are described without assuming which -specific module they belong to. - -It's also possible to declare modules implicitly. In this style SDL -declaration uses :ref:`fully-qualified -name` for the item that is being -declared. The *module* part of the *fully-qualified* name implies -that a module by that name will be automatically created in the -schema. The following declaration is equivalent to the previous -examples, but it declares module ``my_module`` implicitly: - -.. code-block:: sdl - - abstract type my_module::Named { - required name: str; - } - - type my_module::User extending my_module::Named; - -.. versionadded:: 3.0 - - A module block can be nested inside another module block to create a nested - module. If you want reference an entity in a nested module by its - fully-qualified name, you will need to reference all of the containing - modules' names: ``::::`` From 6d7f49366e285f2ab65ecb5b8d2fe8898ec1854d Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Sat, 15 Feb 2025 14:40:36 -0800 Subject: [PATCH 05/23] Unify triggers --- docs/datamodel/triggers.rst | 697 +++++++++++++++++++++----------- docs/reference/ddl/index.rst | 1 - docs/reference/ddl/triggers.rst | 131 ------ docs/reference/sdl/index.rst | 1 - docs/reference/sdl/triggers.rst | 112 ----- 5 files changed, 462 insertions(+), 480 deletions(-) delete mode 100644 docs/reference/ddl/triggers.rst delete mode 100644 docs/reference/sdl/triggers.rst diff --git a/docs/datamodel/triggers.rst b/docs/datamodel/triggers.rst index fb0f16a5823..87f29bc0d29 100644 --- a/docs/datamodel/triggers.rst +++ b/docs/datamodel/triggers.rst @@ -7,35 +7,76 @@ Triggers .. index:: trigger, after insert, after update, after delete, for each, for all, when, do, __new__, __old__ -.. edb:youtube-embed:: ImgMfb_jCJQ?start=41 - Triggers allow you to define an expression to be executed whenever a given query type is run on an object type. The original query will *trigger* your pre-defined expression to run in a transaction along with the original query. These can be defined in your schema. -.. note:: - Triggers cannot be used to *modify* the object that set off the trigger, - although they can be used with :eql:func:`assert` to do *validation* on - that object. If you need to modify the object, you can use :ref:`mutation - rewrites `. +Important notes +=============== + +Triggers are an advanced feature and have some caveats that +you should be aware of. + +Consider using mutation rewrites +-------------------------------- + +Triggers cannot be used to *modify* the object that set off the trigger, +although they can be used with :eql:func:`assert` to do *validation* on +that object. If you need to modify the object, you can use :ref:`mutation +rewrites `. + +Unified trigger query execution +------------------------------- + +All queries within triggers, along with the initial triggering query, are +compiled into a single combined SQL query under the hood. Keep this in mind +when designing triggers that modify existing records. If multiple ``update`` +queries within your triggers target the same object, only one of these +queries will ultimately be executed. To ensure all desired updates on an +object are applied, consolidate them into a single ``update`` query within +one trigger, instead of distributing them across multiple updates. + +Multi-stage trigger execution +----------------------------- + +In some cases, a trigger can cause another trigger to fire. When this +happens, Gel completes all the triggers fired by the initial query +before kicking off a new "stage" of triggers. In the second stage, any +triggers fired by the initial stage of triggers will fire. Gel will +continue adding trigger stages until all triggers are complete. -Here's an example that creates a simple audit log type so that we can keep +The exception to this is when triggers would cause a loop or would cause +the same trigger to be run in two different stages. These triggers will +generate an error. + +Data visibility +--------------- + +Any query in your trigger will return the state of the database *after* the +triggering query. If this query's results include the object that flipped +the trigger, the results will contain that object in the same state as +``__new__``. + + +Example: audit log +================== + +Here's an example that creates a simple **audit log** type so that we can keep track of what's happening to our users in a database. First, we will create a ``Log`` type: .. code-block:: sdl - type Log { - action: str; - timestamp: datetime { - default := datetime_current(); - } - target_name: str; - change: str; - } - + type Log { + action: str; + timestamp: datetime { + default := datetime_current(); + } + target_name: str; + change: str; + } With the ``Log`` type in place, we can write some triggers that will automatically create ``Log`` objects for any insert, update, or delete queries @@ -43,123 +84,93 @@ on the ``Person`` type: .. code-block:: sdl - type Person { - required name: str; - - trigger log_insert after insert for each do ( - insert Log { - action := 'insert', - target_name := __new__.name - } - ); - - trigger log_update after update for each do ( - insert Log { - action := 'update', - target_name := __new__.name, - change := __old__.name ++ '->' ++ __new__.name - } - ); - - trigger log_delete after delete for each do ( - insert Log { - action := 'delete', - target_name := __old__.name - } - ); - } + type Person { + required name: str; + + trigger log_insert after insert for each do ( + insert Log { + action := 'insert', + target_name := __new__.name + } + ); + + trigger log_update after update for each do ( + insert Log { + action := 'update', + target_name := __new__.name, + change := __old__.name ++ '->' ++ __new__.name + } + ); + + trigger log_delete after delete for each do ( + insert Log { + action := 'delete', + target_name := __old__.name + } + ); + } In a trigger's expression, we have access to the ``__old__`` and/or ``__new__`` variables which capture the object before and after the query. Triggers on ``update`` can use both variables. Triggers on ``delete`` can use ``__old__``. Triggers on ``insert`` can use ``__new__``. -.. note:: - - Any query in your trigger will return the state of the database *after* the - triggering query. If this query's results include the object that flipped - the trigger, the results will contain that object in the same state as - ``__new__``. - Now, whenever we run a query, we get a log entry as well: .. code-block:: edgeql-repl - db> insert Person {name := 'Jonathan Harker'}; - {default::Person {id: b4d4e7e6-bd19-11ed-8363-1737d8d4c3c3}} - db> select Log {action, timestamp, target_name, change}; - { - default::Log { - action: 'insert', - timestamp: '2023-03-07T18:56:02.403817Z', - target_name: 'Jonathan Harker', - change: {} - } - } - db> update Person filter .name = 'Jonathan Harker' - ... set {name := 'Mina Murray'}; - {default::Person {id: b4d4e7e6-bd19-11ed-8363-1737d8d4c3c3}} - db> select Log {action, timestamp, target_name, change}; - { - default::Log { - action: 'insert', - timestamp: '2023-03-07T18:56:02.403817Z', - target_name: 'Jonathan Harker', - change: {} - }, - default::Log { - action: 'update', - timestamp: '2023-03-07T18:56:39.520889Z', - target_name: 'Mina Murray', - change: 'Jonathan Harker->Mina Murray' - }, - } - db> delete Person filter .name = 'Mina Murray'; - {default::Person {id: b4d4e7e6-bd19-11ed-8363-1737d8d4c3c3}} - db> select Log {action, timestamp, target_name, change}; - { - default::Log { - action: 'insert', - timestamp: '2023-03-07T18:56:02.403817Z', - target_name: 'Jonathan Harker', - change: {} - }, - default::Log { - action: 'update', - timestamp: '2023-03-07T18:56:39.520889Z', - target_name: 'Mina Murray', - change: 'Jonathan Harker->Mina Murray' - }, - default::Log { - action: 'delete', - timestamp: '2023-03-07T19:00:52.636084Z', - target_name: 'Mina Murray', - change: {} - }, - } - -.. note:: - - All queries within triggers, along with the initial triggering query, are - compiled into a single combined query. Keep this in mind when - designing triggers that modify existing records. If multiple ``update`` - queries within your triggers target the same object, only one of these - queries will ultimately be executed. To ensure all desired updates on an - object are applied, consolidate them into a single ``update`` query within - one trigger, instead of distributing them across multiple updates. - -.. note:: - - In some cases, a trigger can cause another trigger to fire. When this - happens, Gel completes all the triggers fired by the initial query - before kicking off a new "stage" of triggers. In the second stage, any - triggers fired by the initial stage of triggers will fire. Gel will - continue adding trigger stages until all triggers are complete. - - The exception to this is when triggers would cause a loop or would cause - the same trigger to be run in two different stages. These triggers will - generate an error. - + db> insert Person {name := 'Jonathan Harker'}; + {default::Person {id: b4d4e7e6-bd19-11ed-8363-1737d8d4c3c3}} + db> select Log {action, timestamp, target_name, change}; + { + default::Log { + action: 'insert', + timestamp: '2023-03-07T18:56:02.403817Z', + target_name: 'Jonathan Harker', + change: {} + } + } + db> update Person filter .name = 'Jonathan Harker' + ... set {name := 'Mina Murray'}; + {default::Person {id: b4d4e7e6-bd19-11ed-8363-1737d8d4c3c3}} + db> select Log {action, timestamp, target_name, change}; + { + default::Log { + action: 'insert', + timestamp: '2023-03-07T18:56:02.403817Z', + target_name: 'Jonathan Harker', + change: {} + }, + default::Log { + action: 'update', + timestamp: '2023-03-07T18:56:39.520889Z', + target_name: 'Mina Murray', + change: 'Jonathan Harker->Mina Murray' + }, + } + db> delete Person filter .name = 'Mina Murray'; + {default::Person {id: b4d4e7e6-bd19-11ed-8363-1737d8d4c3c3}} + db> select Log {action, timestamp, target_name, change}; + { + default::Log { + action: 'insert', + timestamp: '2023-03-07T18:56:02.403817Z', + target_name: 'Jonathan Harker', + change: {} + }, + default::Log { + action: 'update', + timestamp: '2023-03-07T18:56:39.520889Z', + target_name: 'Mina Murray', + change: 'Jonathan Harker->Mina Murray' + }, + default::Log { + action: 'delete', + timestamp: '2023-03-07T19:00:52.636084Z', + target_name: 'Mina Murray', + change: {} + }, + } Our audit logging works, but the update logs have a major shortcoming: they log an update even when nothing changes. Any time an ``update`` query runs, @@ -169,30 +180,30 @@ rework of our ``update`` logging query: .. code-block:: sdl-invalid - trigger log_update after update for each - when (__old__.name != __new__.name) - do ( - insert Log { - action := 'update', - target_name := __new__.name, - change := __old__.name ++ '->' ++ __new__.name - } - ); + trigger log_update after update for each + when (__old__.name != __new__.name) + do ( + insert Log { + action := 'update', + target_name := __new__.name, + change := __old__.name ++ '->' ++ __new__.name + } + ); If this object were more complicated and we had many properties to compare, we could use a ``json`` cast to compare them all in one shot: .. code-block:: sdl-invalid - trigger log_update after update for each - when (__old__ {**} != __new__ {**}) - do ( - insert Log { - action := 'update', - target_name := __new__.name, - change := __old__.name ++ '->' ++ __new__.name - } - ); + trigger log_update after update for each + when (__old__ {**} != __new__ {**}) + do ( + insert Log { + action := 'update', + target_name := __new__.name, + change := __old__.name ++ '->' ++ __new__.name + } + ); You might find that one log entry per row is too granular or too noisy for your use case. In that case, a ``for all`` trigger may be a better fit. Here's a @@ -207,25 +218,25 @@ writes by making ``target_name`` and ``change`` :ref:`multi properties timestamp: datetime { default := datetime_current(); } - - target_name: str; - - change: str; - + multi target_name: str; - + multi change: str; + - target_name: str; + - change: str; + + multi target_name: str; + + multi change: str; } type Person { required name: str; - - trigger log_insert after insert for each do ( - + trigger log_insert after insert for all do ( + - trigger log_insert after insert for each do ( + + trigger log_insert after insert for all do ( insert Log { action := 'insert', target_name := __new__.name } ); - - trigger log_update after update for each do ( - + trigger log_update after update for all do ( + - trigger log_update after update for each do ( + + trigger log_update after update for all do ( insert Log { action := 'update', target_name := __new__.name, @@ -233,8 +244,8 @@ writes by making ``target_name`` and ``change`` :ref:`multi properties } ); - - trigger log_delete after delete for each do ( - + trigger log_delete after delete for all do ( + - trigger log_delete after delete for each do ( + + trigger log_delete after delete for all do ( insert Log { action := 'delete', target_name := __old__.name @@ -247,55 +258,55 @@ object instead of one ``Log`` object per row: .. code-block:: edgeql-repl - db> for name in {'Jonathan Harker', 'Mina Murray', 'Dracula'} - ... union ( - ... insert Person {name := name} - ... ); - { - default::Person {id: 3836f9c8-d393-11ed-9638-3793d3a39133}, - default::Person {id: 38370a8a-d393-11ed-9638-d3e9b92ca408}, - default::Person {id: 38370abc-d393-11ed-9638-5390f3cbd375}, - } - db> select Log {action, timestamp, target_name, change}; - { - default::Log { - action: 'insert', - timestamp: '2023-03-07T19:12:21.113521Z', - target_name: {'Jonathan Harker', 'Mina Murray', 'Dracula'}, - change: {}, - }, - } - db> for change in { - ... (old_name := 'Jonathan Harker', new_name := 'Jonathan'), - ... (old_name := 'Mina Murray', new_name := 'Mina') - ... } - ... union ( - ... update Person filter .name = change.old_name set { - ... name := change.new_name - ... } - ... ); - { - default::Person {id: 3836f9c8-d393-11ed-9638-3793d3a39133}, - default::Person {id: 38370a8a-d393-11ed-9638-d3e9b92ca408}, - } - db> select Log {action, timestamp, target_name, change}; - { - default::Log { - action: 'insert', - timestamp: '2023-04-05T09:21:17.514089Z', - target_name: {'Jonathan Harker', 'Mina Murray', 'Dracula'}, - change: {}, - }, - default::Log { - action: 'update', - timestamp: '2023-04-05T09:35:30.389571Z', - target_name: {'Jonathan', 'Mina'}, - change: {'Jonathan Harker->Jonathan', 'Mina Murray->Mina'}, - }, - } - -Validation using triggers -========================= + db> for name in {'Jonathan Harker', 'Mina Murray', 'Dracula'} + ... union ( + ... insert Person {name := name} + ... ); + { + default::Person {id: 3836f9c8-d393-11ed-9638-3793d3a39133}, + default::Person {id: 38370a8a-d393-11ed-9638-d3e9b92ca408}, + default::Person {id: 38370abc-d393-11ed-9638-5390f3cbd375}, + } + db> select Log {action, timestamp, target_name, change}; + { + default::Log { + action: 'insert', + timestamp: '2023-03-07T19:12:21.113521Z', + target_name: {'Jonathan Harker', 'Mina Murray', 'Dracula'}, + change: {}, + }, + } + db> for change in { + ... (old_name := 'Jonathan Harker', new_name := 'Jonathan'), + ... (old_name := 'Mina Murray', new_name := 'Mina') + ... } + ... union ( + ... update Person filter .name = change.old_name set { + ... name := change.new_name + ... } + ... ); + { + default::Person {id: 3836f9c8-d393-11ed-9638-3793d3a39133}, + default::Person {id: 38370a8a-d393-11ed-9638-d3e9b92ca408}, + } + db> select Log {action, timestamp, target_name, change}; + { + default::Log { + action: 'insert', + timestamp: '2023-04-05T09:21:17.514089Z', + target_name: {'Jonathan Harker', 'Mina Murray', 'Dracula'}, + change: {}, + }, + default::Log { + action: 'update', + timestamp: '2023-04-05T09:35:30.389571Z', + target_name: {'Jonathan', 'Mina'}, + change: {'Jonathan Harker->Jonathan', 'Mina Murray->Mina'}, + }, + } + +Example: validation +=================== .. index:: trigger, validate, assert @@ -307,50 +318,266 @@ common objects linked in both. .. code-block:: sdl - type Person { - required name: str; - multi friends: Person; - multi enemies: Person; - - trigger prohibit_frenemies after insert, update for each do ( - assert( - not exists (__new__.friends intersect __new__.enemies), - message := "Invalid frenemies", - ) - ) - } + type Person { + required name: str; + multi friends: Person; + multi enemies: Person; + + trigger prohibit_frenemies after insert, update for each do ( + assert( + not exists (__new__.friends intersect __new__.enemies), + message := "Invalid frenemies", + ) + ) + } With this trigger in place, it is impossible to link the same ``Person`` as both a friend and an enemy of any other person. .. code-block:: edgeql-repl - db> insert Person {name := 'Quincey Morris'}; - {default::Person {id: e4a55480-d2de-11ed-93bd-9f4224fc73af}} - db> insert Person {name := 'Dracula'}; - {default::Person {id: e7f2cff0-d2de-11ed-93bd-279780478afb}} - db> update Person - ... filter .name = 'Quincey Morris' - ... set { - ... enemies := ( - ... select detached Person filter .name = 'Dracula' - ... ) - ... }; - {default::Person {id: e4a55480-d2de-11ed-93bd-9f4224fc73af}} - db> update Person - ... filter .name = 'Quincey Morris' - ... set { - ... friends := ( - ... select detached Person filter .name = 'Dracula' - ... ) - ... }; - gel error: GelError: Invalid frenemies + db> insert Person {name := 'Quincey Morris'}; + {default::Person {id: e4a55480-d2de-11ed-93bd-9f4224fc73af}} + db> insert Person {name := 'Dracula'}; + {default::Person {id: e7f2cff0-d2de-11ed-93bd-279780478afb}} + db> update Person + ... filter .name = 'Quincey Morris' + ... set { + ... enemies := ( + ... select detached Person filter .name = 'Dracula' + ... ) + ... }; + {default::Person {id: e4a55480-d2de-11ed-93bd-9f4224fc73af}} + db> update Person + ... filter .name = 'Quincey Morris' + ... set { + ... friends := ( + ... select detached Person filter .name = 'Dracula' + ... ) + ... }; + gel error: GelError: Invalid frenemies + + +.. _ref_eql_sdl_triggers: + + +Declaring triggers +================== + +This section describes the syntax to declare a trigger. + + +Examples +-------- + +Declare a trigger that inserts a ``Log`` object for each new ``User`` object: + +.. code-block:: sdl + + type User { + required name: str; + + trigger log_insert after insert for each do ( + insert Log { + action := 'insert', + target_name := __new__.name + } + ); + } + +Declare a trigger that inserts a ``Log`` object conditionally when an update +query makes a change to a ``User`` object: + +.. code-block:: sdl + + type User { + required name: str; + + trigger log_update after update for each + when (__old__ {**} != __new__ {**}) + do ( + insert Log { + action := 'update', + target_name := __new__.name, + change := __old__.name ++ '->' ++ __new__.name + } + ); + } + +.. _ref_eql_sdl_triggers_syntax: + +Syntax +------ + +Define a new trigger corresponding to the :ref:`more explicit DDL +commands `. + +.. sdl:synopsis:: + + type "{" + trigger + after + {insert | update | delete} [, ...] + for {each | all} + [ when () ] + do + "}" + +Description +----------- + +This declaration defines a new trigger with the following options: + +:eql:synopsis:`` + The name (optionally module-qualified) of the type to be triggered on. + +:eql:synopsis:`` + The name of the trigger. + +:eql:synopsis:`insert | update | delete [, ...]` + The query type (or types) to trigger on. Separate multiple values with + commas to invoke the same trigger for multiple types of queries. + +:eql:synopsis:`each` + The expression will be evaluated once per modified object. ``__new__`` and + ``__old__`` in this context within the expression will refer to a single + object. + +:eql:synopsis:`all` + The expression will be evaluted once for the entire query, even if multiple + objects were modified. ``__new__`` and ``__old__`` in this context within + the expression refer to sets of the modified objects. + +.. versionadded:: 4.0 + + :eql:synopsis:`when ()` + Optionally provide a condition for the trigger. If the condition is + met, the trigger will run. If not, the trigger is skipped. + +:eql:synopsis:`` + The expression to be evaluated when the trigger is invoked. + +The trigger name must be distinct from that of any existing trigger +on the same type. + + +.. _ref_eql_ddl_triggers: + +DDL commands +============ + +This section describes the DDL statements for creating and dropping triggers. + +Create trigger +-------------- + +:eql-statement: + +:ref:`Define ` a new trigger. + +.. eql:synopsis:: + + {create | alter} type "{" + create trigger + after + {insert | update | delete} [, ...] + for {each | all} + [ when () ] + do + "}" + +Description +^^^^^^^^^^^ + +The command ``create trigger`` nested under ``create type`` or ``alter type`` +defines a new trigger for a given object type. + +The trigger name must be distinct from that of any existing trigger +on the same type. + +Parameters +^^^^^^^^^^ + +The options of this command are identical to the +:ref:`SDL trigger declaration `. + +Example +^^^^^^^ + +Declare a trigger that inserts a ``Log`` object for each new ``User`` object: + +.. code-block:: edgeql + + alter type User { + create trigger log_insert after insert for each do ( + insert Log { + action := 'insert', + target_name := __new__.name + } + ); + }; + +.. versionadded:: 4.0 + + Declare a trigger that inserts a ``Log`` object conditionally when an update + query makes a change to a ``User`` object: + + .. code-block:: edgeql + + alter type User { + create trigger log_update after update for each + when (__old__ {**} != __new__ {**}) + do ( + insert Log { + action := 'update', + target_name := __new__.name, + change := __old__.name ++ '->' ++ __new__.name + } + ); + } + +Drop trigger +------------ + +:eql-statement: + +Remove a trigger. + +.. eql:synopsis:: + + alter type "{" + drop trigger ; + "}" + +Description +^^^^^^^^^^^ + +The command ``drop trigger`` inside an ``alter type`` block removes the +definition of an existing trigger on the specified type. + +Parameters +^^^^^^^^^^ + +:eql:synopsis:`` + The name (optionally module-qualified) of the type being triggered on. + +:eql:synopsis:`` + The name of the trigger. + +Example +^^^^^^^ + +Remove the ``log_insert`` trigger on the ``User`` type: + +.. code-block:: edgeql + + alter type User { + drop trigger log_insert; + }; .. list-table:: :class: seealso * - **See also** - * - :ref:`SDL > Triggers ` - * - :ref:`DDL > Triggers ` * - :ref:`Introspection > Triggers ` diff --git a/docs/reference/ddl/index.rst b/docs/reference/ddl/index.rst index 6ba03657e66..6a7b53e6afb 100644 --- a/docs/reference/ddl/index.rst +++ b/docs/reference/ddl/index.rst @@ -16,7 +16,6 @@ DDL annotations globals access_policies - triggers mutation_rewrites extensions future diff --git a/docs/reference/ddl/triggers.rst b/docs/reference/ddl/triggers.rst deleted file mode 100644 index 6fae93596b1..00000000000 --- a/docs/reference/ddl/triggers.rst +++ /dev/null @@ -1,131 +0,0 @@ -.. _ref_eql_ddl_triggers: - -======== -Triggers -======== - -This section describes the DDL commands pertaining to -:ref:`triggers `. - - -Create trigger -============== - -:eql-statement: - - -:ref:`Define ` a new trigger. - -.. eql:synopsis:: - - {create | alter} type "{" - create trigger - after - {insert | update | delete} [, ...] - for {each | all} - [ when () ] - do - "}" - - -Description ------------ - -The command ``create trigger`` nested under ``create type`` or ``alter type`` -defines a new trigger for a given object type. - -The trigger name must be distinct from that of any existing trigger -on the same type. - -Parameters ----------- - -The options of this command are identical to the -:ref:`SDL trigger declaration `. - - -Example -------- - -Declare a trigger that inserts a ``Log`` object for each new ``User`` object: - -.. code-block:: edgeql - - alter type User { - create trigger log_insert after insert for each do ( - insert Log { - action := 'insert', - target_name := __new__.name - } - ); - }; - -Declare a trigger that inserts a ``Log`` object conditionally when an update -query makes a change to a ``User`` object: - -.. code-block:: edgeql - - alter type User { - create trigger log_update after update for each - when (__old__ {**} != __new__ {**}) - do ( - insert Log { - action := 'update', - target_name := __new__.name, - change := __old__.name ++ '->' ++ __new__.name - } - ); - } - - -Drop trigger -============ - -:eql-statement: - - -Remove a trigger. - -.. eql:synopsis:: - - alter type "{" - drop trigger ; - "}" - - -Description ------------ - -The command ``drop trigger`` inside an ``alter type`` block removes the -definition of an existing trigger on the specified type. - - -Parameters ----------- - -:eql:synopsis:`` - The name (optionally module-qualified) of the type being triggered on. - -:eql:synopsis:`` - The name of the trigger. - - -Example -------- - -Remove the ``log_insert`` trigger on the ``User`` type: - -.. code-block:: edgeql - - alter type User { - drop trigger log_insert; - }; - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Triggers ` - * - :ref:`SDL > Triggers ` - * - :ref:`Introspection > Triggers ` diff --git a/docs/reference/sdl/index.rst b/docs/reference/sdl/index.rst index f480ba0194e..71b20f6f9d2 100644 --- a/docs/reference/sdl/index.rst +++ b/docs/reference/sdl/index.rst @@ -111,7 +111,6 @@ to the previous migration: annotations globals access_policies - triggers mutation_rewrites extensions future diff --git a/docs/reference/sdl/triggers.rst b/docs/reference/sdl/triggers.rst deleted file mode 100644 index b498d5fb54f..00000000000 --- a/docs/reference/sdl/triggers.rst +++ /dev/null @@ -1,112 +0,0 @@ -.. _ref_eql_sdl_triggers: - -======== -Triggers -======== - -This section describes the SDL declarations pertaining to -:ref:`triggers `. - - -Example -------- - -Declare a trigger that inserts a ``Log`` object for each new ``User`` object: - -.. code-block:: sdl - - type User { - required name: str; - - trigger log_insert after insert for each do ( - insert Log { - action := 'insert', - target_name := __new__.name - } - ); - } - -.. versionadded:: 4.0 - -Declare a trigger that inserts a ``Log`` object conditionally when an update -query makes a change to a ``User`` object: - -.. code-block:: sdl - - type User { - required name: str; - - trigger log_update after update for each - when (__old__ {**} != __new__ {**}) - do ( - insert Log { - action := 'update', - target_name := __new__.name, - change := __old__.name ++ '->' ++ __new__.name - } - ); - } - -.. _ref_eql_sdl_triggers_syntax: - -Syntax ------- - -Define a new trigger corresponding to the :ref:`more explicit DDL -commands `. - -.. sdl:synopsis:: - - type "{" - trigger - after - {insert | update | delete} [, ...] - for {each | all} - [ when () ] - do - "}" - - -Description ------------ - -This declaration defines a new trigger with the following options: - -:eql:synopsis:`` - The name (optionally module-qualified) of the type to be triggered on. - -:eql:synopsis:`` - The name of the trigger. - -:eql:synopsis:`insert | update | delete [, ...]` - The query type (or types) to trigger on. Separate multiple values with - commas to invoke the same trigger for multiple types of queries. - -:eql:synopsis:`each` - The expression will be evaluated once per modified object. ``__new__`` and - ``__old__`` in this context within the expression will refer to a single - object. - -:eql:synopsis:`all` - The expression will be evaluted once for the entire query, even if multiple - objects were modified. ``__new__`` and ``__old__`` in this context within - the expression refer to sets of the modified objects. - -:eql:synopsis:`when ()` - Optionally provide a condition for the trigger. If the condition is - met, the trigger will run. If not, the trigger is skipped. - -:eql:synopsis:`` - The expression to be evaluated when the trigger is invoked. - -The trigger name must be distinct from that of any existing trigger -on the same type. - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Triggers ` - * - :ref:`DDL > Triggers ` - * - :ref:`Introspection > Triggers ` From 0389a3e5fb0495e0334f49775eeb2fb0d3a85572 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Sat, 15 Feb 2025 16:30:42 -0800 Subject: [PATCH 06/23] Merge constraints --- docs/datamodel/constraints.rst | 958 +++++++++++++++++++++++------ docs/datamodel/functions.rst | 20 +- docs/datamodel/modules.rst | 29 +- docs/datamodel/triggers.rst | 21 +- docs/reference/ddl/constraints.rst | 480 --------------- docs/reference/ddl/index.rst | 1 - docs/reference/sdl/constraints.rst | 164 ----- docs/reference/sdl/index.rst | 1 - 8 files changed, 790 insertions(+), 884 deletions(-) delete mode 100644 docs/reference/ddl/constraints.rst delete mode 100644 docs/reference/sdl/constraints.rst diff --git a/docs/datamodel/constraints.rst b/docs/datamodel/constraints.rst index 676fca306a8..e29cc12a8a1 100644 --- a/docs/datamodel/constraints.rst +++ b/docs/datamodel/constraints.rst @@ -1,4 +1,5 @@ .. _ref_datamodel_constraints: +.. _ref_eql_sdl_constraints: =========== Constraints @@ -8,74 +9,60 @@ Constraints max_ex_value, min_value, min_ex_value, max_len_value, min_len_value, regexp, __subject__ -.. important:: - - This section assumes a basic understanding of EdgeQL. - -Constraints give users fine-grained control over which data is considered -valid. They can be defined on :ref:`properties `, -:ref:`links `, :ref:`object types -`, and :ref:`custom scalars -`. +Constraints give users fine-grained control to ensure data consistency. +They can be defined on :ref:`properties `, +:ref:`links`, +:ref:`object types `, +and :ref:`custom scalars `. -Below is a simple property constraint. - -.. code-block:: sdl - - type User { - required username: str { - constraint exclusive; - } - } .. _ref_datamodel_constraints_builtin: -This example uses a built-in constraint, ``exclusive``. Refer to the table -below for a complete list; click the name of a given constraint for the full -documentation. +Standard constraints +==================== + +|Gel| includes a number of standard ready-to-use constraints: .. include:: ../stdlib/constraint_table.rst -.. _ref_datamodel_constraints_properties: Constraints on properties -------------------------- - -The ``max_len_value`` constraint below uses the built-in :eql:func:`len` -function, which returns the length of a string. +========================= .. code-block:: sdl - type User { - required username: str { - # usernames must be unique - constraint exclusive; + type User { + required username: str { + # usernames must be unique + constraint exclusive; + + # max length (built-in) + constraint max_len_value(25); + }; + } - # max length (built-in) - constraint max_len_value(25); - }; - } Custom constraints -^^^^^^^^^^^^^^^^^^ +================== The ``expression`` constraint is used to define custom constraint logic. Inside -custom constraints, the keyword ``__subject__`` can used to reference the +custom constraints, the keyword ``__subject__`` can be used to reference the *value* being constrained. .. code-block:: sdl - type User { - required username: str { - # max length (as custom constraint) - constraint expression on (len(__subject__) <= 25); - }; - } + type User { + required username: str { + # max length (as custom constraint) + constraint expression on (len(__subject__) <= 25); + }; + } + .. _ref_datamodel_constraints_objects: Constraints on object types ---------------------------- +=========================== Constraints can be defined on object types. This is useful when the constraint logic must reference multiple links or properties. @@ -88,47 +75,74 @@ constraint logic must reference multiple links or properties. .. code-block:: sdl - type ConstrainedVector { - required x: float64; - required y: float64; + type ConstrainedVector { + required x: float64; + required y: float64; - constraint expression on ( - .x ^ 2 + .y ^ 2 <= 25 - ); - } + constraint expression on ( + .x ^ 2 + .y ^ 2 <= 25 + ); + } -Note that the constraint expression cannot contain arbitrary EdgeQL! Due to -how constraints are implemented, you can only reference ``single`` (non-multi) -properties and links defined on the object type. +Note that the constraint expression are fairly restricted. Due +to how constraints are implemented, you can only reference ``single`` +(non-multi) properties and links defined on the object type: .. code-block:: sdl - # Not valid! - type User { - required username: str; - multi friends: User; + # Not valid! + type User { + required username: str; + multi friends: User; + + # ❌ constraints cannot contain paths with more than one hop + constraint expression on ('bob' in .friends.username); + } + +Abstract constraints +==================== + +.. code-block:: sdl + + abstract constraint min_value(min: anytype) { + errmessage := + 'Minimum allowed value for {__subject__} is {min}.'; - # ❌ constraints cannot contain paths with more than one hop - constraint expression on ('bob' in .friends.username); + using (__subject__ >= min); } + # use it like this: + + scalar type posint64 extending int64 { + constraint min_value(0); + } + + # or like this: + + type User { + required age: int16 { + constraint min_value(12); + }; + } + + Computed constraints -^^^^^^^^^^^^^^^^^^^^ +==================== -Constraints can be defined on computed properties. +Constraints can be defined on computed properties: .. code-block:: sdl - type User { - required username: str; - required clean_username := str_trim(str_lower(.username)); + type User { + required username: str; + required clean_username := str_trim(str_lower(.username)); - constraint exclusive on (.clean_username); - } + constraint exclusive on (.clean_username); + } Composite constraints -^^^^^^^^^^^^^^^^^^^^^ +===================== .. index:: tuple @@ -137,86 +151,83 @@ tuple of properties or links. .. code-block:: sdl - type User { - username: str; - } + type User { + username: str; + } - type BlogPost { - title: str; - author: User; + type BlogPost { + title: str; - constraint exclusive on ((.title, .author)); - } + author: User; + + constraint exclusive on ((.title, .author)); + } .. _ref_datamodel_constraints_partial: Partial constraints -^^^^^^^^^^^^^^^^^^^ +=================== .. index:: constraint exclusive on, except -Constraints on object types can be made partial, so that they don't apply -when some condition holds. +Constraints on object types can be made partial, so that they are not enforced +when the specified ``except`` condition is met. .. code-block:: sdl - type User { - required username: str; - deleted: bool; - - # Usernames must be unique unless marked deleted - constraint exclusive on (.username) except (.deleted); - } + type User { + required username: str; + deleted: bool; + # Usernames must be unique unless marked deleted + constraint exclusive on (.username) except (.deleted); + } -.. _ref_datamodel_constraints_links: Constraints on links --------------------- +==================== You can constrain links such that a given object can only be linked once by using :eql:constraint:`exclusive`: .. code-block:: sdl - type User { - required name: str; + type User { + required name: str; - # Make sure none of the "owned" items belong - # to any other user. - multi owns: Item { - constraint exclusive; - } + # Make sure none of the "owned" items belong + # to any other user. + multi owns: Item { + constraint exclusive; } + } + Link property constraints -^^^^^^^^^^^^^^^^^^^^^^^^^ +========================= You can also add constraints for :ref:`link properties `: .. code-block:: sdl - type User { - name: str; - multi friends: User { - strength: float64; - constraint expression on ( - @strength >= 0 - ); - } - } + type User { + name: str; -Link ``@source`` and ``@target`` constraints -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + multi friends: User { + strength: float64; -.. versionadded:: 4.0 + constraint expression on ( + @strength >= 0 + ); + } + } -.. index:: constraint exclusive on, @source, @target -.. note:: +Link's "@source" and "@target" +============================== - ``@source`` and ``@target`` are available starting with version 4.3. +.. index:: constraint exclusive on, @source, @target You can create a composite exclusive constraint on the object linking/linked *and* a link property by using ``@source`` or ``@target`` respectively. Here's @@ -225,18 +236,20 @@ checked them out: .. code-block:: sdl - type Book { - required title: str; - } - type User { - name: str; - multi checked_out: Book { - date: cal::local_date; - # Ensures a given Book can be checked out - # only once on a given day. - constraint exclusive on ((@target, @date)); - } + type Book { + required title: str; + } + + type User { + name: str; + multi checked_out: Book { + date: cal::local_date; + + # Ensures a given Book can be checked out + # only once on a given day. + constraint exclusive on ((@target, @date)); } + } Here, the constraint ensures that no book can be checked out to two ``User``\s on the same ``@date``. @@ -246,24 +259,26 @@ player picks in a color-based memory game: .. code-block:: sdl - type Player { - required name: str; - multi picks: Color { - order: int16; - constraint exclusive on ((@source, @order)); - } - } - type Color { - required name: str; + type Player { + required name: str; + + multi picks: Color { + order: int16; + + constraint exclusive on ((@source, @order)); } + } + + type Color { + required name: str; + } This constraint ensures that a single ``Player`` cannot pick two ``Color``\s at the same ``@order``. -.. _ref_datamodel_constraints_scalars: Constraints on custom scalars ------------------------------ +============================= Custom scalar types can be constrained. @@ -290,8 +305,8 @@ using arbitrary EdgeQL expressions. The example below uses the built-in } -Constraints and type inheritence --------------------------------- +Constraints and inheritance +=========================== .. index:: delegated constraint @@ -301,39 +316,38 @@ apply globally across all the types that inherited the constraint. .. code-block:: sdl - type User { - required name: str { - constraint exclusive; - } + type User { + required name: str { + constraint exclusive; } - type Administrator extending User; - type Moderator extending User; + } + type Administrator extending User; + type Moderator extending User; .. code-block:: edgeql-repl - db> insert Administrator { - ... name := 'Jan' - ... }; - {default::Administrator {id: 7aeaa146-f5a5-11ed-a598-53ddff476532}} - db> insert Moderator { - ... name := 'Jan' - ... }; - gel error: ConstraintViolationError: name violates exclusivity - constraint - Detail: value of property 'name' of object type 'default::Moderator' - violates exclusivity constraint - db> insert User { - ... name := 'Jan' - ... }; - gel error: ConstraintViolationError: name violates exclusivity - constraint - Detail: value of property 'name' of object type 'default::User' - violates exclusivity constraint - - -As this example demonstrates, this means if an object of one of the extending -types has a value for a property that is exclusive, an object of a different -extending type cannot have the same value. + gel> insert Administrator { + .... name := 'Jan' + .... }; + {default::Administrator {id: 7aeaa146-f5a5-11ed-a598-53ddff476532}} + + gel> insert Moderator { + .... name := 'Jan' + .... }; + gel error: ConstraintViolationError: name violates exclusivity constraint + Detail: value of property 'name' of object type 'default::Moderator' + violates exclusivity constraint + + gel> insert User { + .... name := 'Jan' + .... }; + gel error: ConstraintViolationError: name violates exclusivity constraint + Detail: value of property 'name' of object type 'default::User' + violates exclusivity constraint + +As this example demonstrates, if an object of one extending type has a value +for a property that is exclusive, an object of a *different* extending type +cannot have the same value. If that's not what you want, you can instead delegate the constraint to the inheriting types by prepending the ``delegated`` keyword to the constraint. @@ -342,48 +356,602 @@ on each of the inheriting types. .. code-block:: sdl - type User { - required name: str { - delegated constraint exclusive; - } + type User { + required name: str { + delegated constraint exclusive; } - type Administrator extending User; - type Moderator extending User; + } + type Administrator extending User; + type Moderator extending User; .. code-block:: edgeql-repl - db> insert Administrator { - ... name := 'Jan' - ... }; - {default::Administrator {id: 7aeaa146-f5a5-11ed-a598-53ddff476532}} - db> insert User { - ... name := 'Jan' - ... }; - {default::User {id: a6e3fdaf-c44b-4080-b39f-6a07496de66b}} - db> insert Moderator { - ... name := 'Jan' - ... }; - {default::Moderator {id: d3012a3f-0f16-40a8-8884-7203f393b63d}} - db> insert Moderator { - ... name := 'Jan' - ... }; - gel error: ConstraintViolationError: name violates exclusivity - constraint - Detail: value of property 'name' of object type 'default::Moderator' - violates exclusivity constraint + gel> insert Administrator { + .... name := 'Jan' + .... }; + {default::Administrator {id: 7aeaa146-f5a5-11ed-a598-53ddff476532}} + + gel> insert User { + .... name := 'Jan' + .... }; + {default::User {id: a6e3fdaf-c44b-4080-b39f-6a07496de66b}} + + gel> insert Moderator { + .... name := 'Jan' + .... }; + {default::Moderator {id: d3012a3f-0f16-40a8-8884-7203f393b63d}} + + gel> insert Moderator { + .... name := 'Jan' + .... }; + gel error: ConstraintViolationError: name violates exclusivity constraint + Detail: value of property 'name' of object type 'default::Moderator' + violates exclusivity constraint With the addition of ``delegated`` to the constraints, the inserts were -successful for each of the types. In this case, we did not hit a constraint -violation until we tried to insert a second ``Moderator`` object with the same -name as the one we had just inserted. +successful for each of the types. We did not hit a constraint violation +until we tried to insert a second ``Moderator`` object with the same +name as the existing one. + + +.. _ref_eql_sdl_constraints_syntax: + +Declaring constraints +===================== + +This section describes the syntax to declare a constraints. + +Syntax +------ + +Define a constraint corresponding to the :ref:`more explicit DDL +commands `. + +.. sdl:synopsis:: + + [{abstract | delegated}] constraint [ ( [] [, ...] ) ] + [ on ( ) ] + [ except ( ) ] + [ extending [, ...] ] + "{" + [ using ; ] + [ errmessage := ; ] + [ ] + [ ... ] + "}" ; + + # where is: + + [ : ] { | } + +Description +^^^^^^^^^^^ + +This declaration defines a new constraint with the following options: + +:eql:synopsis:`abstract` + If specified, the constraint will be *abstract*. + +:eql:synopsis:`delegated` + If specified, the constraint is defined as *delegated*, which means + that it will not be enforced on the type it's declared on, and the + enforcement will be delegated to the subtypes of this type. + This is particularly useful for :eql:constraint:`exclusive` + constraints in abstract types. This is only valid for *concrete + constraints*. + +:eql:synopsis:`` + The name (optionally module-qualified) of the new constraint. + +:eql:synopsis:`` + An optional list of constraint arguments. + + For an *abstract constraint* :eql:synopsis:`` optionally + specifies the argument name and :eql:synopsis:`` specifies + the argument type. + + For a *concrete constraint* :eql:synopsis:`` optionally + specifies the argument name and :eql:synopsis:`` specifies + the argument value. The argument value specification must match the + parameter declaration of the abstract constraint. + +:eql:synopsis:`on ( )` + An optional expression defining the *subject* of the constraint. + If not specified, the subject is the value of the schema item on which + the concrete constraint is defined. + + The expression must refer to the original subject of the constraint as + ``__subject__``. The expression must be + :ref:`Immutable `, but may refer to + ``__subject__`` and its properties and links. + + Note also that ```` itself has to + be parenthesized. + +:eql:synopsis:`except ( )` + An optional expression defining a condition to create exceptions to + the constraint. If ```` evaluates to ``true``, + the constraint is ignored for the current subject. If it evaluates + to ``false`` or ``{}``, the constraint applies normally. + + ``except`` may only be declared on object constraints, and otherwise + follows the same rules as ``on``. + +:eql:synopsis:`extending [, ...]` + If specified, declares the *parent* constraints for this abstract + constraint. + +The valid SDL sub-declarations are listed below: + +:eql:synopsis:`using ` + A boolean expression that returns ``true`` for valid data and + ``false`` for invalid data. The expression may refer to the + subject of the constraint as ``__subject__``. This declaration is + only valid for *abstract constraints*. + +:eql:synopsis:`errmessage := ` + An optional string literal defining the error message template + that is raised when the constraint is violated. The template is a + formatted string that may refer to constraint context variables in + curly braces. The template may refer to the following: + + - ``$argname`` -- the value of the specified constraint argument + - ``__subject__`` -- the value of the ``title`` annotation of the + scalar type, property or link on which the constraint is defined. + + If the content of curly braces does not match any variables, + the curly braces are emitted as-is. They can also be escaped by + using double curly braces. + +:sdl:synopsis:`` + Set constraint :ref:`annotation ` + to a given *value*. + + +.. _ref_eql_ddl_constraints: + +DDL commands +============ + +This section describes the DDL commands for creating and dropping +constraints and abstract constraints. + +Create abstract constraint +-------------------------- + +:eql-statement: +:eql-haswith: + +:ref:`Define ` a new abstract constraint. + +.. eql:synopsis:: + + [ with [ := ] module ] + create abstract constraint [ ( [] [, ...] ) ] + [ on ( ) ] + [ extending [, ...] ] + "{" ; [...] "}" ; + + # where is: + + [ : ] + + # where is one of + + using + set errmessage := + create annotation := + + +Description +^^^^^^^^^^^ +The command ``create abstract constraint`` defines a new abstract constraint. + +If *name* is qualified with a module name, then the constraint is created in +that module, otherwise it is created in the current module. The constraint +name must be distinct from that of any existing schema item in the module. + + +Parameters +^^^^^^^^^^ +Most sub-commands and options of this command are identical to the +:ref:`SDL constraint declaration `, +with some additional features listed below: + +:eql:synopsis:`[ := ] module ` + An optional list of module alias declarations to be used in the + migration definition. When *module-alias* is not specified, + *module-name* becomes the effective current module and is used + to resolve all unqualified names. + +:eql:synopsis:`set errmessage := ` + An optional string literal defining the error message template + that is raised when the constraint is violated. Other than a + slight syntactical difference this is the same as the + corresponding SDL declaration. + +:eql:synopsis:`create annotation := ;` + Set constraint annotation ```` to ````. + See :eql:stmt:`create annotation` for details. + + +Example +^^^^^^^ +Create an abstract constraint "uppercase" which checks if the subject +is a string in upper case: + +.. code-block:: edgeql + + create abstract constraint uppercase { + create annotation title := "Upper case constraint"; + + using (str_upper(__subject__) = __subject__); + + set errmessage := "{__subject__} is not in upper case"; + }; + + +Alter abstract constraint +------------------------- + +:eql-statement: +:eql-haswith: + +Alter the definition of an abstract constraint. + +.. eql:synopsis:: + + [ with [ := ] module ] + alter abstract constraint + "{" ; [...] "}" ; + + # where is one of + + rename to + using + set errmessage := + reset errmessage + create annotation := + alter annotation := + drop annotation + + +Description +^^^^^^^^^^^ + +The command ``alter abstract constraint`` changes the definition of an +abstract constraint item. *name* must be a name of an existing +abstract constraint, optionally qualified with a module name. + + +Parameters +^^^^^^^^^^ + +:eql:synopsis:`[ := ] module ` + An optional list of module alias declarations to be used in the + migration definition. When *module-alias* is not specified, + *module-name* becomes the effective current module and is used + to resolve all unqualified names. + +:eql:synopsis:`` + The name (optionally module-qualified) of the constraint to alter. + +Subcommands allowed in the ``alter abstract constraint`` block: + +:eql:synopsis:`rename to ` + Change the name of the constraint to *newname*. All concrete + constraints inheriting from this constraint are also renamed. + +:eql:synopsis:`alter annotation := ` + Alter constraint annotation ````. + See :eql:stmt:`alter annotation` for details. + +:eql:synopsis:`drop annotation ` + Remove annotation ````. + See :eql:stmt:`drop annotation` for details. + +:eql:synopsis:`reset errmessage` + Remove the error message from this abstract constraint. The error message + specified in the base abstract constraint will be used instead. + +All subcommands allowed in a ``create abstract constraint`` block are also +valid here. + + +Example +^^^^^^^ + +Rename the abstract constraint "uppercase" to "upper_case": + +.. code-block:: edgeql + + alter abstract constraint uppercase rename to upper_case; + + +Drop abstract constraint +------------------------ + +:eql-statement: +:eql-haswith: + +Remove an abstract constraint from the schema. + +.. eql:synopsis:: + + [ with [ := ] module ] + drop abstract constraint ; + + +Description +^^^^^^^^^^^ + +The command ``drop abstract constraint`` removes an existing abstract +constraint item from the database schema. If any schema items depending +on this constraint exist, the operation is refused. + + +Parameters +^^^^^^^^^^ + +:eql:synopsis:`[ := ] module ` + An optional list of module alias declarations to be used in the + migration definition. + +:eql:synopsis:`` + The name (optionally module-qualified) of the constraint to remove. + + +Example +^^^^^^^ + +Drop abstract constraint ``upper_case``: + +.. code-block:: edgeql + + drop abstract constraint upper_case; + + +Create constraint +----------------- + +:eql-statement: + +Define a concrete constraint on the specified schema item. + +.. eql:synopsis:: + + [ with [ := ] module ] + create [ delegated ] constraint + [ ( [] [, ...] ) ] + [ on ( ) ] + [ except ( ) ] + "{" ; [...] "}" ; + + # where is: + + [ : ] + + # where is one of + + set errmessage := + create annotation := + + +Description +^^^^^^^^^^^ + +The command ``create constraint`` defines a new concrete constraint. It can +only be used in the context of :eql:stmt:`create scalar type`, +:eql:stmt:`alter scalar type`, :eql:stmt:`create property`, +:eql:stmt:`alter property`, :eql:stmt:`create link`, or :eql:stmt:`alter link`. + +*name* must be a name (optionally module-qualified) of a previously defined +abstract constraint. + + +Parameters +^^^^^^^^^^ + +Most sub-commands and options of this command are identical to the +:ref:`SDL constraint declaration `, +with some additional features listed below: + +:eql:synopsis:`[ := ] module ` + An optional list of module alias declarations to be used in the + migration definition. + +:eql:synopsis:`set errmessage := ` + An optional string literal defining the error message template + that is raised when the constraint is violated. Other than a + slight syntactical difference, this is the same as the corresponding + SDL declaration. + +:eql:synopsis:`create annotation := ;` + An optional list of annotations for the constraint. See + :eql:stmt:`create annotation` for details. + + +Example +^^^^^^^ + +Create a "score" property on the "User" type with a minimum value +constraint: + +.. code-block:: edgeql + + alter type User create property score -> int64 { + create constraint min_value(0) + }; + +Create a Vector with a maximum magnitude: + +.. code-block:: edgeql + + create type Vector { + create required property x -> float64; + create required property y -> float64; + create constraint expression ON ( + __subject__.x^2 + __subject__.y^2 < 25 + ); + } + + +Alter constraint +---------------- + +:eql-statement: + +Alter the definition of a concrete constraint on the specified schema item. + +.. eql:synopsis:: + + [ with [ := ] module [, ...] ] + alter constraint + [ ( [] [, ...] ) ] + [ on ( ) ] + [ except ( ) ] + "{" ; [ ... ] "}" ; + + # -- or -- + + [ with [ := ] module [, ...] ] + alter constraint + [ ( [] [, ...] ) ] + [ on ( ) ] + ; + + # where is one of: + + set delegated + set not delegated + set errmessage := + reset errmessage + create annotation := + alter annotation + drop annotation + + +Description +^^^^^^^^^^^ + +The command ``alter constraint`` changes the definition of a concrete +constraint. Both single- and multi-command forms are supported. + + +Parameters +^^^^^^^^^^ + +:eql:synopsis:`[ := ] module ` + An optional list of module alias declarations for the migration. + +:eql:synopsis:`` + The name (optionally module-qualified) of the concrete constraint + that is being altered. + +:eql:synopsis:`` + A list of constraint arguments as specified at the time of + ``create constraint``. + +:eql:synopsis:`on ( )` + An expression defining the *subject* of the constraint as specified + at the time of ``create constraint``. + +The following subcommands are allowed in the ``alter constraint`` block: + +:eql:synopsis:`set delegated` + Mark the constraint as *delegated*, which means it will + not be enforced on the type it's declared on, and enforcement is + delegated to subtypes. Useful for :eql:constraint:`exclusive` constraints. + +:eql:synopsis:`set not delegated` + Mark the constraint as *not delegated*, so it is enforced globally across + the type and any extending types. + +:eql:synopsis:`rename to ` + Change the name of the constraint to ````. + +:eql:synopsis:`alter annotation ` + Alter a constraint annotation. + +:eql:synopsis:`drop annotation ` + Remove a constraint annotation. + +:eql:synopsis:`reset errmessage` + Remove the error message from this constraint, reverting to that of the + abstract constraint, if any. + +All subcommands allowed in ``create constraint`` are also valid in +``alter constraint``. + +Example +^^^^^^^ + +Change the error message on the minimum value constraint on the property +"score" of the "User" type: + +.. code-block:: edgeql + + alter type User alter property score + alter constraint min_value(0) + set errmessage := 'Score cannot be negative'; + + +Drop constraint +--------------- + +:eql-statement: +:eql-haswith: + +Remove a concrete constraint from the specified schema item. + +.. eql:synopsis:: + + [ with [ := ] module [, ...] ] + drop constraint + [ ( [] [, ...] ) ] + [ on ( ) ] + [ except ( ) ] ; + + +Description +^^^^^^^^^^^ + +The command ``drop constraint`` removes the specified constraint from +its containing schema item. + + +Parameters +^^^^^^^^^^ + +:eql:synopsis:`[ := ] module ` + Optional module alias declarations for the migration definition. + +:eql:synopsis:`` + The name (optionally module-qualified) of the concrete constraint + to remove. + +:eql:synopsis:`` + A list of constraint arguments as specified at the time of + ``create constraint``. + +:eql:synopsis:`on ( )` + Expression defining the *subject* of the constraint as specified + at the time of ``create constraint``. + +Example +^^^^^^^ + +Remove constraint "min_value" from the property "score" of the "User" type: + +.. code-block:: edgeql + + alter type User alter property score + drop constraint min_value(0); .. list-table:: :class: seealso * - **See also** - * - :ref:`SDL > Constraints ` - * - :ref:`DDL > Constraints ` - * - :ref:`Introspection > Constraints - ` + * - :ref:`Introspection > Constraints ` * - :ref:`Standard Library > Constraints ` diff --git a/docs/datamodel/functions.rst b/docs/datamodel/functions.rst index ec9079fbc29..3cf2e0f98a4 100644 --- a/docs/datamodel/functions.rst +++ b/docs/datamodel/functions.rst @@ -1,4 +1,5 @@ .. _ref_datamodel_functions: +.. _ref_eql_sdl_functions: ========= Functions @@ -152,30 +153,13 @@ aggregated into an array as described above: ); -.. _ref_eql_sdl_functions: +.. _ref_eql_sdl_functions_syntax: Declaring functions =================== This section describes the syntax to declare a function. - -Example -------- - -Declare a custom function that concatenates the length of a string -to the end of that string: - -.. code-block:: sdl - - function foo(s: str) -> str - using ( - select s ++ len(a) - ); - - -.. _ref_eql_sdl_functions_syntax: - Syntax ------ diff --git a/docs/datamodel/modules.rst b/docs/datamodel/modules.rst index b24a4dfc260..69a8d3a43c5 100644 --- a/docs/datamodel/modules.rst +++ b/docs/datamodel/modules.rst @@ -1,4 +1,5 @@ .. _ref_datamodel_modules: +.. _ref_eql_sdl_modules: ======= Modules @@ -53,25 +54,16 @@ types, utility functions, and operators: :ref:`databases ` * ``cfg``: configuration and settings - -.. _ref_eql_sdl_modules: - -Declaring modules -================= - -This section describes the syntax to declare a module. - -Example -------- - -Declare an empty module: +Example: empty module +===================== .. code-block:: sdl module my_module {} -Declare a module with some content: +Example: flat module +==================== .. code-block:: sdl @@ -81,7 +73,9 @@ Declare a module with some content: } } -Declare a nested module: + +Example: nested modules +======================= .. code-block:: sdl @@ -110,6 +104,13 @@ tree of nested modules. For example, to call the ``fight`` function in the nested module example above, you would use ``dracula::combat::fight()``. + +Declaring modules +================= + +This section describes the syntax to declare a module. + + Syntax ------ diff --git a/docs/datamodel/triggers.rst b/docs/datamodel/triggers.rst index 87f29bc0d29..aa19541799d 100644 --- a/docs/datamodel/triggers.rst +++ b/docs/datamodel/triggers.rst @@ -1,4 +1,5 @@ .. _ref_datamodel_triggers: +.. _ref_eql_sdl_triggers: ======== Triggers @@ -358,17 +359,8 @@ both a friend and an enemy of any other person. gel error: GelError: Invalid frenemies -.. _ref_eql_sdl_triggers: - - -Declaring triggers -================== - -This section describes the syntax to declare a trigger. - - -Examples --------- +Example: logging +================ Declare a trigger that inserts a ``Log`` object for each new ``User`` object: @@ -404,8 +396,15 @@ query makes a change to a ``User`` object: ); } + .. _ref_eql_sdl_triggers_syntax: + +Declaring triggers +================== + +This section describes the syntax to declare a trigger. + Syntax ------ diff --git a/docs/reference/ddl/constraints.rst b/docs/reference/ddl/constraints.rst deleted file mode 100644 index 30fe09fd252..00000000000 --- a/docs/reference/ddl/constraints.rst +++ /dev/null @@ -1,480 +0,0 @@ -.. _ref_eql_ddl_constraints: - -=========== -Constraints -=========== - -This section describes the DDL commands pertaining to -:ref:`constraints `. - - -Create abstract constraint -========================== - -:eql-statement: -:eql-haswith: - -:ref:`Define ` a new abstract constraint. - -.. eql:synopsis:: - - [ with [ := ] module ] - create abstract constraint [ ( [] [, ...] ) ] - [ on ( ) ] - [ extending [, ...] ] - "{" ; [...] "}" ; - - # where is: - - [ : ] - - # where is one of - - using - set errmessage := - create annotation := - - -Description ------------ - -The command ``create abstract constraint`` defines a new abstract constraint. - -If *name* is qualified with a module name, then the constraint is -created in that module, otherwise it is created in the current module. -The constraint name must be distinct from that of any existing schema item -in the module. - - -Parameters ----------- - -Most sub-commands and options of this command are identical to the -:ref:`SDL constraint declaration `, -with some additional features listed below: - -:eql:synopsis:`[ := ] module ` - An optional list of module alias declarations to be used in the - migration definition. When *module-alias* is not specified, - *module-name* becomes the effective current module and is used - to resolve all unqualified names. - -:eql:synopsis:`set errmessage := ` - An optional string literal defining the error message template - that is raised when the constraint is violated. Other than a - slight syntactical difference this is the same as the - corresponding SDL declaration. - -:eql:synopsis:`create annotation := ;` - Set constraint :eql:synopsis:`` to - :eql:synopsis:``. - - See :eql:stmt:`create annotation` for details. - - -Example -------- - -Create an abstract constraint "uppercase" which checks if the subject -is a string in upper case. - -.. code-block:: edgeql - - create abstract constraint uppercase { - create annotation title := "Upper case constraint"; - using (str_upper(__subject__) = __subject__); - set errmessage := "{__subject__} is not in upper case"; - }; - - -Alter abstract constraint -========================= - -:eql-statement: -:eql-haswith: - -Alter the definition of an -:ref:`abstract constraint `. - -.. eql:synopsis:: - - [ with [ := ] module ] - alter abstract constraint - "{" ; [...] "}" ; - - # where is one of - - rename to - using - set errmessage := - reset errmessage - create annotation := - alter annotation := - drop annotation - - -Description ------------ - -The command ``alter abstract constraint`` changes the definition of an -abstract constraint item. *name* must be a name of an existing -abstract constraint, optionally qualified with a module name. - - -Parameters ----------- - -:eql:synopsis:`[ := ] module ` - An optional list of module alias declarations to be used in the - migration definition. When *module-alias* is not specified, - *module-name* becomes the effective current module and is used - to resolve all unqualified names. - -:eql:synopsis:`` - The name (optionally module-qualified) of the constraint to alter. - -The following subcommands are allowed in the ``alter abstract -constraint`` block: - -:eql:synopsis:`rename to ` - Change the name of the constraint to *newname*. All concrete - constraints inheriting from this constraint are also renamed. - -:eql:synopsis:`alter annotation ;` - Alter constraint :eql:synopsis:``. - See :eql:stmt:`alter annotation` for details. - -:eql:synopsis:`drop annotation ;` - Remove constraint :eql:synopsis:``. - See :eql:stmt:`drop annotation` for details. - -:eql:synopsis:`reset errmessage;` - Remove the error message from this abstract constraint. - The error message specified in the base abstract constraint - will be used instead. - -All the subcommands allowed in a ``create abstract constraint`` block -are also valid subcommands for an ``alter abstract constraint`` block. - - -Example -------- - -Rename the abstract constraint "uppercase" to "upper_case": - -.. code-block:: edgeql - - alter abstract constraint uppercase rename to upper_case; - - -Drop abstract constraint -======================== - -:eql-statement: -:eql-haswith: - - -Remove an :ref:`abstract constraint ` -from the schema. - -.. eql:synopsis:: - - [ with [ := ] module ] - drop abstract constraint ; - - -Description ------------ - -The command ``drop abstract constraint`` removes an existing abstract -constraint item from the database schema. If any schema items -depending on this constraint exist, the operation is refused. - - -Parameters ----------- - -:eql:synopsis:`[ := ] module ` - An optional list of module alias declarations to be used in the - migration definition. When *module-alias* is not specified, - *module-name* becomes the effective current module and is used - to resolve all unqualified names. - -:eql:synopsis:`` - The name (optionally module-qualified) of the constraint to remove. - - -Example -------- - -Drop abstract constraint ``upper_case``: - -.. code-block:: edgeql - - drop abstract constraint upper_case; - - -Create constraint -================= - -:eql-statement: - -Define a concrete constraint on the specified schema item. - -.. eql:synopsis:: - - [ with [ := ] module ] - create [ delegated ] constraint - [ ( [] [, ...] ) ] - [ on ( ) ] - [ except ( ) ] - "{" ; [...] "}" ; - - # where is: - - [ : ] - - # where is one of - - set errmessage := - create annotation := - - -Description ------------ - -The command ``create constraint`` defines a new concrete constraint. -It can only be used in the context of :eql:stmt:`create scalar type`, -:eql:stmt:`alter scalar type`, :eql:stmt:`create property`, -:eql:stmt:`alter property`, :eql:stmt:`create link`, or -:eql:Stmt:`alter link`. - -*name* must be a name (optionally module-qualified) of previously defined -abstract constraint. - - -Parameters ----------- - -Most sub-commands and options of this command are identical to the -:ref:`SDL constraint declaration `, -with some additional features listed below: - -:eql:synopsis:`[ := ] module ` - An optional list of module alias declarations to be used in the - migration definition. When *module-alias* is not specified, - *module-name* becomes the effective current module and is used - to resolve all unqualified names. - -:eql:synopsis:`set errmessage := ` - An optional string literal defining the error message template - that is raised when the constraint is violated. Other than a - slight syntactical difference this is the same as the - corresponding SDL declaration. - -:eql:synopsis:`create annotation := ;` - An optional list of annotations for the constraint. - See :eql:stmt:`create annotation` for details. - - -Example -------- - -Create a "score" property on the "User" type with a minimum value -constraint: - -.. code-block:: edgeql - - alter type User create property score -> int64 { - create constraint min_value(0) - }; - -Create a Vector with a maximum magnitude: - -.. code-block:: edgeql - - create type Vector { - create required property x -> float64; - create required property y -> float64; - create constraint expression ON ( - __subject__.x^2 + __subject__.y^2 < 25 - ); - } - - -Alter constraint -================ - -:eql-statement: - -Alter the definition of a concrete constraint on the specified schema item. - -.. eql:synopsis:: - - [ with [ := ] module [, ...] ] - alter constraint - [ ( [] [, ...] ) ] - [ on ( ) ] - [ except ( ) ] - "{" ; [ ... ] "}" ; - - # -- or -- - - [ with [ := ] module [, ...] ] - alter constraint - [ ( [] [, ...] ) ] - [ on ( ) ] - ; - - # where is one of: - - set delegated - set not delegated - set errmessage := - reset errmessage - create annotation := - alter annotation - drop annotation - - -Description ------------ - -The command ``alter constraint`` changes the definition of a concrete -constraint. As for most ``alter`` commands, both single- and -multi-command forms are supported. - - -Parameters ----------- - -:eql:synopsis:`[ := ] module ` - An optional list of module alias declarations to be used in the - migration definition. When *module-alias* is not specified, - *module-name* becomes the effective current module and is used - to resolve all unqualified names. - -:eql:synopsis:`` - The name (optionally module-qualified) of the concrete constraint - that is being altered. - -:eql:synopsis:`` - A list of constraint arguments as specified at the time of - ``create constraint``. - -:eql:synopsis:`on ( )` - A expression defining the *subject* of the constraint as specified - at the time of ``create constraint``. - - -The following subcommands are allowed in the ``alter constraint`` block: - -:eql:synopsis:`set delegated` - If set, the constraint is defined as *delegated*, which means that it will - not be enforced on the type it's declared on, and the enforcement will be - delegated to the subtypes of this type. This is particularly useful for - :eql:constraint:`exclusive` constraints in abstract types. This is only - valid for *concrete constraints*. - -:eql:synopsis:`set not delegated` - If set, the constraint is defined as *not delegated*, which means that it - will be enforced globally across the type it's declared on and any - extending types. - -:eql:synopsis:`rename to ` - Change the name of the constraint to :eql:synopsis:``. - -:eql:synopsis:`alter annotation ;` - Alter constraint :eql:synopsis:``. - See :eql:stmt:`alter annotation` for details. - -:eql:synopsis:`drop annotation ;` - Remove an *annotation*. See :eql:stmt:`drop annotation` for details. - -:eql:synopsis:`reset errmessage;` - Remove the error message from this constraint. The error message - specified in the abstract constraint will be used instead. - -All the subcommands allowed in the ``create constraint`` block are also -valid subcommands for ``alter constraint`` block. - -Example -------- - -Change the error message on the minimum value constraint on the property -"score" of the "User" type: - -.. code-block:: edgeql - - alter type User alter property score - alter constraint min_value(0) - set errmessage := 'Score cannot be negative'; - - -Drop constraint -=============== - -:eql-statement: -:eql-haswith: - -Remove a concrete constraint from the specified schema item. - -.. eql:synopsis:: - - [ with [ := ] module [, ...] ] - drop constraint - [ ( [] [, ...] ) ] - [ on ( ) ] - [ except ( ) ] ; - - -Description ------------ - -The command ``drop constraint`` removes the specified constraint from -its containing schema item. - - -Parameters ----------- - -:eql:synopsis:`[ := ] module ` - An optional list of module alias declarations to be used in the - migration definition. When *module-alias* is not specified, - *module-name* becomes the effective current module and is used - to resolve all unqualified names. - -:eql:synopsis:`` - The name (optionally module-qualified) of the concrete constraint - to remove. - -:eql:synopsis:`` - A list of constraint arguments as specified at the time of - ``create constraint``. - -:eql:synopsis:`on ( )` - A expression defining the *subject* of the constraint as specified - at the time of ``create constraint``. - - -Example -------- - -Remove constraint "min_value" from the property "score" of the -"User" type: - -.. code-block:: edgeql - - alter type User alter property score - drop constraint min_value(0); - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Constraints ` - * - :ref:`SDL > Constraints ` - * - :ref:`Introspection > Constraints - ` - * - :ref:`Standard Library > Constraints ` diff --git a/docs/reference/ddl/index.rst b/docs/reference/ddl/index.rst index 6a7b53e6afb..11bef78acd5 100644 --- a/docs/reference/ddl/index.rst +++ b/docs/reference/ddl/index.rst @@ -12,7 +12,6 @@ DDL links properties aliases - constraints annotations globals access_policies diff --git a/docs/reference/sdl/constraints.rst b/docs/reference/sdl/constraints.rst deleted file mode 100644 index facf917c7ad..00000000000 --- a/docs/reference/sdl/constraints.rst +++ /dev/null @@ -1,164 +0,0 @@ -.. _ref_eql_sdl_constraints: - -=========== -Constraints -=========== - -This section describes the SDL declarations pertaining to -:ref:`constraints `. - - -Examples --------- - -Declare an *abstract* constraint: - -.. code-block:: sdl - - abstract constraint min_value(min: anytype) { - errmessage := - 'Minimum allowed value for {__subject__} is {min}.'; - - using (__subject__ >= min); - } - -Declare a *concrete* constraint on an integer type: - -.. code-block:: sdl - - scalar type posint64 extending int64 { - constraint min_value(0); - } - -Declare a *concrete* constraint on an object type: - -.. code-block:: sdl - - type Vector { - required x: float64; - required y: float64; - constraint expression on ( - __subject__.x^2 + __subject__.y^2 < 25 - ); - } - -.. _ref_eql_sdl_constraints_syntax: - -Syntax ------- - -Define a constraint corresponding to the :ref:`more explicit DDL -commands `. - -.. sdl:synopsis:: - - [{abstract | delegated}] constraint [ ( [] [, ...] ) ] - [ on ( ) ] - [ except ( ) ] - [ extending [, ...] ] - "{" - [ using ; ] - [ errmessage := ; ] - [ ] - [ ... ] - "}" ; - - # where is: - - [ : ] { | } - - -Description ------------ - -This declaration defines a new constraint with the following options: - -:eql:synopsis:`abstract` - If specified, the constraint will be *abstract*. - -:eql:synopsis:`delegated` - If specified, the constraint is defined as *delegated*, which - means that it will not be enforced on the type it's declared on, - and the enforcement will be delegated to the subtypes of this - type. This is particularly useful for :eql:constraint:`exclusive` - constraints in abstract types. This is only valid for *concrete - constraints*. - -:eql:synopsis:`` - The name (optionally module-qualified) of the new constraint. - -:eql:synopsis:`` - An optional list of constraint arguments. - - For an *abstract constraint* :eql:synopsis:`` optionally - specifies the argument name and :eql:synopsis:`` - specifies the argument type. - - For a *concrete constraint* :eql:synopsis:`` optionally - specifies the argument name and :eql:synopsis:`` - specifies the argument value. The argument value specification must - match the parameter declaration of the abstract constraint. - -:eql:synopsis:`on ( )` - An optional expression defining the *subject* of the constraint. - If not specified, the subject is the value of the schema item on - which the concrete constraint is defined. - - The expression must refer to the original subject of the constraint as - ``__subject__``. The expression must be - :ref:`Immutable `, but may refer to - ``__subject__`` and its properties and links. - - Note also that ```` itself has to - be parenthesized. - -:eql:synopsis:`except ( )` - An optional expression defining a condition to create exceptions - to the constraint. If ```` evaluates to ``true``, - the constraint is ignored for the current subject. If it evaluates - to ``false`` or ``{}``, the constraint applies normally. - - ``except`` may only be declared on object constraints, and is - otherwise follows the same rules as ``on``, above. - -:eql:synopsis:`extending [, ...]` - If specified, declares the *parent* constraints for this abstract - constraint. - -The valid SDL sub-declarations are listed below: - -:eql:synopsis:`using ` - A boolean expression that returns ``true`` for valid data and - ``false`` for invalid data. The expression may refer to the - subject of the constraint as ``__subject__``. This declaration is - only valid for *abstract constraints*. - -:eql:synopsis:`errmessage := ` - An optional string literal defining the error message template - that is raised when the constraint is violated. The template is a - formatted string that may refer to constraint context variables in - curly braces. The template may refer to the following: - - - ``$argname`` -- the value of the specified constraint argument - - ``__subject__`` -- the value of the ``title`` annotation of the - scalar type, property or link on which the constraint is - defined. - - If the content of curly braces does not match any variables, - the curly braces are emitted as-is. They can also be escaped by - using double curly braces. - -:sdl:synopsis:`` - Set constraint :ref:`annotation ` - to a given *value*. - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Constraints ` - * - :ref:`DDL > Constraints ` - * - :ref:`Introspection > Constraints - ` - * - :ref:`Standard Library > Constraints ` diff --git a/docs/reference/sdl/index.rst b/docs/reference/sdl/index.rst index 71b20f6f9d2..750afbae185 100644 --- a/docs/reference/sdl/index.rst +++ b/docs/reference/sdl/index.rst @@ -107,7 +107,6 @@ to the previous migration: links properties aliases - constraints annotations globals access_policies From e44afc2966de5e60f2e43b22ba869cd29a53e166 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Sat, 15 Feb 2025 17:00:44 -0800 Subject: [PATCH 07/23] Merge annotations --- docs/datamodel/annotations.rst | 366 +++++++++++++++++++++++++++-- docs/datamodel/constraints.rst | 9 +- docs/datamodel/functions.rst | 7 +- docs/datamodel/indexes.rst | 5 +- docs/datamodel/modules.rst | 7 +- docs/datamodel/triggers.rst | 8 +- docs/reference/ddl/annotations.rst | 279 ---------------------- docs/reference/ddl/index.rst | 1 - docs/reference/sdl/annotations.rst | 93 -------- docs/reference/sdl/index.rst | 1 - 10 files changed, 354 insertions(+), 422 deletions(-) delete mode 100644 docs/reference/ddl/annotations.rst delete mode 100644 docs/reference/sdl/annotations.rst diff --git a/docs/datamodel/annotations.rst b/docs/datamodel/annotations.rst index 4983081d205..203849dd9b9 100644 --- a/docs/datamodel/annotations.rst +++ b/docs/datamodel/annotations.rst @@ -1,46 +1,51 @@ .. _ref_datamodel_annotations: +.. _ref_eql_sdl_annotations: =========== Annotations =========== -.. index:: annotation, title, description, deprecated +.. index:: annotation -*Annotations* are named values associated with schema items and -are designed to hold arbitrary schema-level metadata represented as a -:eql:type:`str`. +*Annotations* are named values associated with schema items and are +designed to hold arbitrary schema-level metadata represented as a +:eql:type:`str` (unstructured text). + +Users can store JSON-encoded data in annotations if they need to store +more complex metadata. Standard annotations --------------------- +==================== + +.. index:: title, description, deprecated -There are a number of annotations defined in the standard library. -The following are the annotations which can be set on any schema item: +There are a number of annotations defined in the standard library. The +following are the annotations which can be set on any schema item: -- ``title`` -- ``description`` -- ``deprecated`` +- ``std::title`` +- ``std::description`` +- ``std::deprecated`` For example, consider the following declaration: .. code-block:: sdl - type Status { - annotation title := 'Activity status'; - annotation description := 'All possible user activities'; + type Status { + annotation title := 'Activity status'; + annotation description := 'All possible user activities'; - required name: str { - constraint exclusive - } + required name: str { + constraint exclusive } + } -The ``deprecated`` annotation is used to mark deprecated items (e.g. -:eql:func:`str_rpad`) and to provide some information such as what +And the ``std::deprecated`` annotation can be used to mark deprecated items +(e.g., :eql:func:`str_rpad`) and to provide some information such as what should be used instead. - User-defined annotations ------------------------- +======================== .. index:: abstract annotation @@ -58,12 +63,325 @@ and code generation. } +.. _ref_eql_sdl_annotations_syntax: + +Declaring annotations +===================== + +This section describes the syntax to use annotations in your schema. + +Syntax +------ + +.. sdl:synopsis:: + + # Abstract annotation form: + abstract [ inheritable ] annotation + [ "{" ; [...] "}" ] ; + + # Concrete annotation (same as ) form: + annotation := ; + +Description +^^^^^^^^^^^ + +There are two forms of annotation declarations: abstract and concrete. +The *abstract annotation* form is used for declaring new kinds of +annotation in a module. The *concrete annotation* declarations are +used as sub-declarations for all other declarations in order to +actually annotate them. + +The annotation declaration options are as follows: + +:eql:synopsis:`abstract` + If specified, the annotation will be *abstract*. + +:eql:synopsis:`inheritable` + If specified, the annotation will be *inheritable*. The + annotations are non-inheritable by default. That is, if a schema + item has an annotation defined on it, the descendants of that + schema item will not automatically inherit the annotation. Normal + inheritance behavior can be turned on by declaring the annotation + with the ``inheritable`` qualifier. This is only valid for *abstract + annotation*. + +:eql:synopsis:`` + The name (optionally module-qualified) of the annotation. + +:eql:synopsis:`` + Any string value that the specified annotation is intended to have + for the given context. + +The only valid SDL sub-declarations are *concrete annotations*: + +:sdl:synopsis:`` + Annotations can also have annotations. Set the *annotation* of the + enclosing annotation to a specific value. + + +.. _ref_eql_ddl_annotations: + +DDL commands +============ + +This section describes the low-level DDL commands for creating, altering, +and dropping annotations and abstract annotations. + +Create abstract annotation +-------------------------- + +:eql-statement: + +Define a new annotation. + +.. eql:synopsis:: + + [ with [, ...] ] + create abstract [ inheritable ] annotation + [ + "{" + create annotation := ; + [...] + "}" + ] ; + +Description +^^^^^^^^^^^ + +The command ``create abstract annotation`` defines a new annotation +for use in the current Gel database. + +If *name* is qualified with a module name, then the annotation is created +in that module, otherwise it is created in the current module. +The annotation name must be distinct from that of any existing schema item +in the module. + +The annotations are non-inheritable by default. That is, if a schema item +has an annotation defined on it, the descendants of that schema item will +not automatically inherit the annotation. Normal inheritance behavior can +be turned on by declaring the annotation with the ``inheritable`` qualifier. + +Most sub-commands and options of this command are identical to the +:ref:`SDL annotation declaration `. +There's only one subcommand that is allowed in the ``create +annotation`` block: + +:eql:synopsis:`create annotation := ` + Annotations can also have annotations. Set the + :eql:synopsis:`` of the + enclosing annotation to a specific :eql:synopsis:``. + See :eql:stmt:`create annotation` for details. + +Example +^^^^^^^ + +Declare an annotation ``extrainfo``: + +.. code-block:: edgeql + + create abstract annotation extrainfo; + + +Alter abstract annotation +------------------------- + +:eql-statement: + +Change the definition of an annotation. + +.. eql:synopsis:: + + alter abstract annotation + [ "{" ] ; [...] [ "}" ]; + + # where is one of + + rename to + create annotation := + alter annotation := + drop annotation + +Description +^^^^^^^^^^^ + +:eql:synopsis:`alter abstract annotation` changes the definition of an +abstract annotation. + +Parameters +^^^^^^^^^^ + +:eql:synopsis:`` + The name (optionally module-qualified) of the annotation to alter. + +The following subcommands are allowed in the ``alter abstract annotation`` +block: + +:eql:synopsis:`rename to ` + Change the name of the annotation to :eql:synopsis:``. + +:eql:synopsis:`alter annotation := ` + Annotations can also have annotations. Change + :eql:synopsis:`` to a specific + :eql:synopsis:``. See :eql:stmt:`alter annotation` for + details. + +:eql:synopsis:`drop annotation ` + Annotations can also have annotations. Remove annotation + :eql:synopsis:``. + See :eql:stmt:`drop annotation` for details. + +All the subcommands allowed in the ``create abstract annotation`` +block are also valid subcommands for ``alter annotation`` block. + +Example +^^^^^^^ + +Rename an annotation: + +.. code-block:: edgeql + + alter abstract annotation extrainfo + rename to extra_info; + + +Drop abstract annotation +------------------------ + +:eql-statement: + +Drop a schema annotation. + +.. eql:synopsis:: + + [ with [, ...] ] + drop abstract annotation ; + +Description +^^^^^^^^^^^ + +The command ``drop abstract annotation`` removes an existing schema +annotation from the database schema. Note that the ``inheritable`` +qualifier is not necessary in this statement. + +Example +^^^^^^^ + +Drop the annotation ``extra_info``: + +.. code-block:: edgeql + + drop abstract annotation extra_info; + + +Create annotation +----------------- + +:eql-statement: + +Define an annotation value for a given schema item. + +.. eql:synopsis:: + + create annotation := + +Description +^^^^^^^^^^^ + +The command ``create annotation`` defines an annotation for a schema item. + +:eql:synopsis:`` refers to the name of a defined annotation, +and :eql:synopsis:`` must be a constant EdgeQL expression +evaluating into a string. + +This statement can only be used as a subcommand in another +DDL statement. + +Example +^^^^^^^ + +Create an object type ``User`` and set its ``title`` annotation to +``"User type"``. + +.. code-block:: edgeql + + create type User { + create annotation title := "User type"; + }; + + +Alter annotation +---------------- + +:eql-statement: + +Alter an annotation value for a given schema item. + +.. eql:synopsis:: + + alter annotation := + +Description +^^^^^^^^^^^ + +The command ``alter annotation`` alters an annotation value on a schema item. + +:eql:synopsis:`` refers to the name of a defined annotation, +and :eql:synopsis:`` must be a constant EdgeQL expression +evaluating into a string. + +This statement can only be used as a subcommand in another +DDL statement. + +Example +^^^^^^^ + +Alter an object type ``User`` and alter the value of its previously set +``title`` annotation to ``"User type"``. + +.. code-block:: edgeql + + alter type User { + alter annotation title := "User type"; + }; + + +Drop annotation +--------------- + +:eql-statement: + +Remove an annotation from a given schema item. + +.. eql:synopsis:: + + drop annotation ; + +Description +^^^^^^^^^^^ + +The command ``drop annotation`` removes an annotation value from a schema item. + +:eql:synopsis:`` refers to the name of a defined annotation. +The annotation value does not have to exist on a schema item. + +This statement can only be used as a subcommand in another +DDL statement. + +Example +^^^^^^^ + +Drop the ``title`` annotation from the ``User`` object type: + +.. code-block:: edgeql + + alter type User { + drop annotation title; + }; + + .. list-table:: :class: seealso * - **See also** - * - :ref:`SDL > Annotations ` - * - :ref:`DDL > Annotations ` * - :ref:`Cheatsheets > Annotations ` - * - :ref:`Introspection > Object types - ` + * - :ref:`Introspection > Object types ` diff --git a/docs/datamodel/constraints.rst b/docs/datamodel/constraints.rst index e29cc12a8a1..6a065f4e989 100644 --- a/docs/datamodel/constraints.rst +++ b/docs/datamodel/constraints.rst @@ -399,14 +399,11 @@ name as the existing one. Declaring constraints ===================== -This section describes the syntax to declare a constraints. +This section describes the syntax to declare constraints in your schema. Syntax ------ -Define a constraint corresponding to the :ref:`more explicit DDL -commands `. - .. sdl:synopsis:: [{abstract | delegated}] constraint [ ( [] [, ...] ) ] @@ -513,7 +510,7 @@ The valid SDL sub-declarations are listed below: DDL commands ============ -This section describes the DDL commands for creating and dropping +This section describes the low-level DDL commands for creating and dropping constraints and abstract constraints. Create abstract constraint @@ -522,7 +519,7 @@ Create abstract constraint :eql-statement: :eql-haswith: -:ref:`Define ` a new abstract constraint. +Define a new abstract constraint. .. eql:synopsis:: diff --git a/docs/datamodel/functions.rst b/docs/datamodel/functions.rst index 3cf2e0f98a4..7077df1feff 100644 --- a/docs/datamodel/functions.rst +++ b/docs/datamodel/functions.rst @@ -158,14 +158,11 @@ aggregated into an array as described above: Declaring functions =================== -This section describes the syntax to declare a function. +This section describes the syntax to declare a function in your schema. Syntax ------ -Define a new function corresponding to the :ref:`more explicit DDL -commands `. - .. sdl:synopsis:: function ([ ] [, ... ]) -> @@ -316,7 +313,7 @@ are called *overloaded functions*. DDL commands ============ -This section describes the DDL statements for creating, altering, and +This section describes the low-level DDL commands for creating, altering, and dropping functions. diff --git a/docs/datamodel/indexes.rst b/docs/datamodel/indexes.rst index fd0850f3a61..1435d5bdd03 100644 --- a/docs/datamodel/indexes.rst +++ b/docs/datamodel/indexes.rst @@ -193,8 +193,7 @@ Indexes can include annotations: Declaring indexes ================= -|Gel's| Schema Definition Language (SDL) supports inline index declarations, -as seen above. The following syntax details how to declare an index in SDL. +This section describes the syntax to use indexes in your schema. Syntax ------ @@ -229,7 +228,7 @@ Syntax DDL commands ============ -This section describes the DDL statements for creating, altering, and +This section describes the low-level DDL commands for creating, altering, and dropping indexes. Create index diff --git a/docs/datamodel/modules.rst b/docs/datamodel/modules.rst index 69a8d3a43c5..b44a114f54d 100644 --- a/docs/datamodel/modules.rst +++ b/docs/datamodel/modules.rst @@ -108,15 +108,12 @@ nested module example above, you would use Declaring modules ================= -This section describes the syntax to declare a module. +This section describes the syntax to declare a module in your schema. Syntax ------ -Define a module corresponding to the :ref:`more explicit DDL -commands `. - .. sdl:synopsis:: module "{" @@ -205,7 +202,7 @@ modules' names: ``::::`` DDL commands ============ -This section describes the DDL commands for creating and dropping +This section describes the low-level DDL commands for creating and dropping modules. Create module diff --git a/docs/datamodel/triggers.rst b/docs/datamodel/triggers.rst index aa19541799d..57aa7086e82 100644 --- a/docs/datamodel/triggers.rst +++ b/docs/datamodel/triggers.rst @@ -403,14 +403,11 @@ query makes a change to a ``User`` object: Declaring triggers ================== -This section describes the syntax to declare a trigger. +This section describes the syntax to declare a trigger in your schema. Syntax ------ -Define a new trigger corresponding to the :ref:`more explicit DDL -commands `. - .. sdl:synopsis:: type "{" @@ -465,7 +462,8 @@ on the same type. DDL commands ============ -This section describes the DDL statements for creating and dropping triggers. +This section describes the low-level DDL commands for creating and dropping +triggers. Create trigger -------------- diff --git a/docs/reference/ddl/annotations.rst b/docs/reference/ddl/annotations.rst deleted file mode 100644 index 25a8e1b93ec..00000000000 --- a/docs/reference/ddl/annotations.rst +++ /dev/null @@ -1,279 +0,0 @@ -.. _ref_eql_ddl_annotations: - -=========== -Annotations -=========== - -This section describes the DDL commands pertaining to -:ref:`annotations `. - - -Create abstract annotation -========================== - -:eql-statement: - -:ref:`Define ` a new annotation. - -.. eql:synopsis:: - - [ with [, ...] ] - create abstract [ inheritable ] annotation - [ "{" - create annotation := ; - [...] - "}" ] ; - - -Description ------------ - -The command ``create abstract annotation`` defines a new annotation -for use in the current |branch|. - -If *name* is qualified with a module name, then the annotation is created -in that module, otherwise it is created in the current module. -The annotation name must be distinct from that of any existing schema item -in the module. - -The annotations are non-inheritable by default. That is, if a schema item -has an annotation defined on it, the descendants of that schema item will -not automatically inherit the annotation. Normal inheritance behavior can -be turned on by declaring the annotation with the ``inheritable`` qualifier. - -Most sub-commands and options of this command are identical to the -:ref:`SDL annotation declaration `. -There's only one subcommand that is allowed in the ``create -annotation`` block: - -:eql:synopsis:`create annotation := ` - Annotations can also have annotations. Set the - :eql:synopsis:`` of the - enclosing annotation to a specific :eql:synopsis:``. - See :eql:stmt:`create annotation` for details. - - -Example -------- - -Declare an annotation ``extrainfo``. - -.. code-block:: edgeql - - create abstract annotation extrainfo; - - -Alter abstract annotation -========================= - -:eql-statement: - - -Change the definition of an :ref:`annotation `. - -.. eql:synopsis:: - - alter abstract annotation - [ "{" ] ; [...] [ "}" ]; - - # where is one of - - rename to - create annotation := - alter annotation := - drop annotation - - -Description ------------ - -:eql:synopsis:`alter abstract annotation` changes the definition of an abstract -annotation. - - -Parameters ----------- - -:eql:synopsis:`` - The name (optionally module-qualified) of the annotation to alter. - -The following subcommands are allowed in the ``alter abstract annotation`` -block: - -:eql:synopsis:`rename to ` - Change the name of the annotation to :eql:synopsis:``. - -:eql:synopsis:`alter annotation ;` - Annotations can also have annotations. Change - :eql:synopsis:`` to a specific - :eql:synopsis:``. See :eql:stmt:`alter annotation` for - details. - -:eql:synopsis:`drop annotation ;` - Annotations can also have annotations. Remove annotation - :eql:synopsis:``. - See :eql:stmt:`drop annotation` for details. - -All the subcommands allowed in the ``create abstract annotation`` -block are also valid subcommands for ``alter annotation`` block. - - -Examples --------- - -Rename an annotation: - -.. code-block:: edgeql - - alter abstract annotation extrainfo - rename to extra_info; - - -Drop abstract annotation -======================== - -:eql-statement: - -Remove a :ref:`schema annotation `. - -.. eql:synopsis:: - - [ with [, ...] ] - drop abstract annotation ; - -Description ------------ - -The command ``drop abstract annotation`` removes an existing schema -annotation from the database schema. Note that the ``inheritable`` -qualifier is not necessary in this statement. - -Example -------- - -Drop the annotation ``extra_info``: - -.. code-block:: edgeql - - drop abstract annotation extra_info; - - -Create annotation -================= - -:eql-statement: - -Define an annotation value for a given schema item. - -.. eql:synopsis:: - - create annotation := - -Description ------------ - -The command ``create annotation`` defines an annotation for a schema item. - -:eql:synopsis:`` refers to the name of a defined annotation, -and :eql:synopsis:`` must be a constant EdgeQL expression -evaluating into a string. - -This statement can only be used as a subcommand in another -DDL statement. - - -Example -------- - -Create an object type ``User`` and set its ``title`` annotation to -``"User type"``. - -.. code-block:: edgeql - - create type User { - create annotation title := "User type"; - }; - - -Alter annotation -================ - -:eql-statement: - -Alter an annotation value for a given schema item. - -.. eql:synopsis:: - - alter annotation := - -Description ------------ - -The command ``alter annotation`` alters an annotation value on a schema item. - -:eql:synopsis:`` refers to the name of a defined annotation, -and :eql:synopsis:`` must be a constant EdgeQL expression -evaluating into a string. - -This statement can only be used as a subcommand in another -DDL statement. - - -Example -------- - -Alter an object type ``User`` and alter the value of its previously set -``title`` annotation to ``"User type"``. - -.. code-block:: edgeql - - alter type User { - alter annotation title := "User type"; - }; - - -Drop annotation -=============== - -:eql-statement: - - -Remove an annotation from a given schema item. - -.. eql:synopsis:: - - drop annotation ; - -Description ------------ - -The command ``drop annotation`` removes an annotation value from a schema item. - -:eql:synopsis:`` refers to the name of a defined annotation. -The annotation value does not have to exist on a schema item. - -This statement can only be used as a subcommand in another -DDL statement. - - -Example -------- - -Drop the ``title`` annotation from the ``User`` object type: - -.. code-block:: edgeql - - alter type User { - drop annotation title; - }; - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Annotations ` - * - :ref:`SDL > Annotations ` - * - :ref:`Cheatsheets > Annotations ` - * - :ref:`Introspection > Object types - ` diff --git a/docs/reference/ddl/index.rst b/docs/reference/ddl/index.rst index 11bef78acd5..4ef7d8bd3a1 100644 --- a/docs/reference/ddl/index.rst +++ b/docs/reference/ddl/index.rst @@ -12,7 +12,6 @@ DDL links properties aliases - annotations globals access_policies mutation_rewrites diff --git a/docs/reference/sdl/annotations.rst b/docs/reference/sdl/annotations.rst deleted file mode 100644 index d208dc5aebb..00000000000 --- a/docs/reference/sdl/annotations.rst +++ /dev/null @@ -1,93 +0,0 @@ -.. _ref_eql_sdl_annotations: - -=========== -Annotations -=========== - -This section describes the SDL declarations pertaining to -:ref:`annotations `. - - -Examples --------- - -Declare a new annotation: - -.. code-block:: sdl - - abstract annotation admin_note; - -Specify the value of an annotation for a type: - -.. code-block:: sdl - - type Status { - annotation admin_note := 'system-critical'; - required name: str { - constraint exclusive - } - } - -.. _ref_eql_sdl_annotations_syntax: - -Syntax ------- - -Define a new annotation corresponding to the :ref:`more explicit DDL -commands `. - -.. sdl:synopsis:: - - # Abstract annotation form: - abstract [ inheritable ] annotation - [ "{" ; [...] "}" ] ; - - # Concrete annotation (same as ) form: - annotation := ; - - -Description ------------ - -There are two forms of annotation declarations: abstract and concrete. -The *abstract annotation* form is used for declaring new kinds of -annotation in a module. The *concrete annotation* declarations are -used as sub-declarations for all other declarations in order to -actually annotate them. - -The annotation declaration options are as follows: - -:eql:synopsis:`abstract` - If specified, the annotation will be *abstract*. - -:eql:synopsis:`inheritable` - If specified, the annotation will be *inheritable*. The - annotations are non-inheritable by default. That is, if a schema - item has an annotation defined on it, the descendants of that - schema item will not automatically inherit the annotation. Normal - inheritance behavior can be turned on by declaring the annotation - with the ``inheritable`` qualifier. This is only valid for *abstract - annotation*. - -:eql:synopsis:`` - The name (optionally module-qualified) of the annotation. - -:eql:synopsis:`` - Any string value that the specified annotation is intended to have - for the given context. - -The only valid SDL sub-declarations are *concrete annotations*: - -:sdl:synopsis:`` - Annotations can also have annotations. Set the *annotation* of the - enclosing annotation to a specific value. - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Annotations ` - * - :ref:`DDL > Annotations ` - * - :ref:`Cheatsheets > Annotations ` - * - :ref:`Introspection > Object types - ` diff --git a/docs/reference/sdl/index.rst b/docs/reference/sdl/index.rst index 750afbae185..e8713187a02 100644 --- a/docs/reference/sdl/index.rst +++ b/docs/reference/sdl/index.rst @@ -107,7 +107,6 @@ to the previous migration: links properties aliases - annotations globals access_policies mutation_rewrites From 1920531b8e39da1e7d1d0919769ffe6ca6bc24f9 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Sat, 15 Feb 2025 20:58:15 -0800 Subject: [PATCH 08/23] Merge links --- docs/datamodel/links.rst | 1249 ++++++++++++++++++++-------------- docs/datamodel/modules.rst | 16 +- docs/edgeql/select.rst | 25 + docs/reference/ddl/index.rst | 1 - docs/reference/ddl/links.rst | 435 ------------ docs/reference/sdl/index.rst | 1 - docs/reference/sdl/links.rst | 210 ------ 7 files changed, 778 insertions(+), 1159 deletions(-) delete mode 100644 docs/reference/ddl/links.rst delete mode 100644 docs/reference/sdl/links.rst diff --git a/docs/datamodel/links.rst b/docs/datamodel/links.rst index 89ee5b2823b..f9483079642 100644 --- a/docs/datamodel/links.rst +++ b/docs/datamodel/links.rst @@ -4,54 +4,55 @@ Links ===== -.. index:: link, relation, source, target, backlinks, foreign key +Links define a relationship between two :ref:`object types ` in Gel. + +Links in |Gel| are incredibly powerful and flexible. They can be used to model +relationships of any cardinality, can be traversed in both directions, +can be polymorphic, and can have constraints, and many other things. -Links define a specific relationship between two :ref:`object -types `. Defining links --------------- +============== + +Links are *directional*; they have a **source** (the type on which they are +declared) and a **target** (the type they point to). + +E.g. the following schema defines a link from ``Person`` to ``Person`` and +a link from ``Company`` to ``Person``: .. code-block:: sdl - type Person { - best_friend: Person; - } + type Person { + link best_friend: Person; + } + + type Company { + multi link employees: Person; + } + +The ``employees`` link's source is ``Company`` and its target is ``Person``. + +The ``link`` keyword is optional, and can be omitted. -Links are *directional*; they have a source (the object type on which they are -declared) and a *target* (the type they point to). Link cardinality ----------------- +================ .. index:: single, multi All links have a cardinality: either ``single`` or ``multi``. The default is ``single`` (a "to-one" link). Use the ``multi`` keyword to declare a "to-many" -link. +link: .. code-block:: sdl - type Person { - multi friends: Person; - } - -On the other hand, backlinks work in reverse to find objects that link to the -object, and thus assume ``multi`` as a default. Use the ``single`` keyword to -declare a "to-one" backlink. - -.. code-block:: sdl - - type Author { - posts := .` to +``Shirts`` by traversing the ``Shirt.owner`` link *in reverse*, known as a +**backlink**. See the :ref:`select docs ` to learn more. + .. _ref_guide_one_to_many: One-to-many -^^^^^^^^^^^ +----------- Conceptually, one-to-many and many-to-one relationships are identical; the -"directionality" of a relation is just a matter of perspective. Here, the -same "shirt owner" relationship is represented with a ``multi`` link. +"directionality" is a matter of perspective. Here, the same "shirt owner" +relationship is represented with a ``multi`` link: .. code-block:: sdl - type Person { - required name: str; - multi shirts: Shirt { - # ensures a one-to-many relationship - constraint exclusive; - } + type Person { + required name: str; + multi shirts: Shirt { + # ensures a one-to-many relationship + constraint exclusive; } + } - type Shirt { - required color: str; - } + type Shirt { + required color: str; + } .. note:: - Don't forget the exclusive constraint! This is required to ensure that each - ``Shirt`` corresponds to a single ``Person``. Without it, the relationship - will be many-to-many. + Don't forget the ``exclusive`` constraint! Without it, the relationship + becomes many-to-many. Under the hood, a ``multi`` link is stored in an intermediate `association table `_, whereas a @@ -203,88 +283,84 @@ table `_, whereas a .. note:: - Choosing a link direction can be tricky when modeling these kinds of - relationships. Should you model the relationship as one-to-many using a - ``multi`` link, or as many-to-one using a ``single`` link with a - backlink to traverse in the other direction? A general rule of thumb - in this case is as follows. - - Use a ``multi`` link if: + Choosing a link direction can be tricky. Should you model this + relationship as one-to-many (with a ``multi`` link) or as many-to-one + (with a ``single`` link and a backlink)? A general rule of thumb: - - The relationship is relatively stable and thus not updated very - frequently. For example, a list of postal addresses in a - user profile. - - The number of elements in the link tends to be small. - - Otherwise, prefer a single link from one object type coupled with a - computed backlink on the other. This is marginally more efficient - and generally recommended when modeling 1:N relations: + - Use a ``multi`` link if the relationship is relatively stable and + not updated frequently, and the set of related objects is typically + small. For example, a list of postal addresses in a user profile. + - Otherwise, prefer a single link from one object type and a computed + backlink on the other. This can be more efficient and is generally + recommended for 1:N relations: .. code-block:: sdl - type Post { - required author: User; - } + type Post { + required author: User; + } + + type User { + multi posts := (.`. For instance: + + .. code-block:: edgeql + + # 🚫 Does not work + insert Movie { + title := 'The Incredible Hulk', + characters := { + ( + select Person { + @character_name := 'The Hulk' + } + filter .name = 'Mark Ruffalo' + ), + ( + select Person { + @character_name := 'Abomination' + } + filter .name = 'Tim Roth' + ) + } + }; - type Person { - name: str; - multi family_members: Person { - relationship: str; - } - } + will produce an error ``QueryError: invalid reference to link property in + top level shape``. + + One workaround is to insert them via a ``for`` loop, combined with + :eql:func:`assert_distinct`: + + .. code-block:: edgeql + + # ✅ Works! + insert Movie { + title := 'The Incredible Hulk', + characters := assert_distinct(( + with actors := { + ('The Hulk', 'Mark Ruffalo'), + ('Abomination', 'Tim Roth') + }, + for actor in actors union ( + select Person { + @character_name := actor.0 + } + filter .name = actor.1 + ) + )) + }; -.. note:: +Querying link properties +------------------------ - The divide between "link" and "property" is important when it comes to - understanding what link properties can do. They are link **properties**, - not link **links**. This means link properties can contain only primitive - data — data of any of the :ref:`scalar types ` like - ``str``, ``int32``, or ``bool``, :ref:`enums `, - :ref:`arrays `, and :ref:`tuples - `. They cannot contain links to other objects. +To query a link property, add the link property's name (prefixed with ``@``) +in the shape: - That means this would not work: +.. code-block:: edgeql-repl - .. code-block:: + db> select Person { + ... name, + ... family_members: { + ... name, + ... @relationship + ... } + ... }; - type Person { - name: str; - multi friends: Person { - introduced_by: Person; - } - } +.. note:: + + In the results above, Bob has a *step-sister* property on the link to + Alice, but Alice does not automatically have a property describing Bob. + Changes to link properties are not mirrored on the "backlink" side unless + explicitly updated, because link properties cannot be required. .. note:: - Link properties cannot be made required. They are always optional. + For a full guide on modeling, inserting, updating, and querying link + properties, see the :ref:`Using Link Properties ` + guide. + -Above, we model a family tree with a single ``Person`` type. The ``Person. -family_members`` link is a many-to-many relation; each ``family_members`` link -can contain a string ``relationship`` describing the relationship of the two -individuals. +.. _ref_datamodel_link_deletion: -Due to how they're persisted under the hood, link properties must always be -``single`` and ``optional``. +Deletion policies +================= -In practice, link properties are most useful with many-to-many relationships. -In that situation there's a significant difference between the *relationship* -described by the link and the *target object*. Thus it makes sense to separate -properties of the relationships and properties of the target objects. On the -other hand, for one-to-one, one-to-many, and many-to-one relationships there's -an exact correspondence between the link and one of the objects being linked. -In these situations any property of the relationship can be equally expressed -as the property of the source object (for one-to-many and one-to-one cases) or -as the property of the target object (for many-to-one and one-to-one cases). -It is generally advisable to use object properties instead of link properties -in these cases due to better ergonomics of selecting, updating, and even -casting into :eql:type:`json` when keeping all data in the same place rather -than spreading it across link and object properties. +.. index:: on target delete, on source delete, restrict, delete source, allow, + deferred restrict, delete target, if orphan +Links can declare their own **deletion policy** for when the **target** or +**source** is deleted. -Inserting and updating link properties -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Target deletion +--------------- -To add a link with a link property, add the link property to a shape on the -linked object being added. Be sure to prepend the link property's name with -``@``. +The clause ``on target delete`` determines the action when the target object is +deleted: -.. code-block:: edgeql +- ``restrict`` (default) — raises an exception if the target is deleted. +- ``delete source`` — deletes the source when the target is deleted (a cascade). +- ``allow`` — removes the target from the link if the target is deleted. +- ``deferred restrict`` — like ``restrict`` but defers the error until the + end of the transaction if the object remains linked. - insert Person { - name := "Bob", - family_members := ( - select detached Person { - @relationship := "sister" - } - filter .name = "Alice" - ) - }; +.. code-block:: sdl -The shape could alternatively be included on an insert if the object being -linked (the ``Person`` named "Alice" in this example) is being inserted as part -of the query. If the outer person ("Bob" in the example) already exists and -only the links need to be added, this can be done in an ``update`` query -instead of an ``insert`` as shown in the example above. + type MessageThread { + title: str; + } -Updating a link's property is similar to adding a new one except that you no -longer need to select from the object type being linked: you can instead select -the existing link on the object being updated because the link has already been -established. Here, we've discovered that Alice is actually Bob's *step*-sister, -so we want to change the link property on the already-established link between -the two: + type Message { + content: str; + chat: MessageThread { + on target delete delete source; + } + } -.. code-block:: edgeql - update Person - filter .name = "Bob" - set { - family_members := ( - select .family_members { - @relationship := "step-sister" - } - filter .name = "Alice" - ) - }; +.. _ref_datamodel_links_source_deletion: -Using ``select .family_members`` here with the shape including the link -property allows us to modify the link property of the existing link. +Source deletion +--------------- -.. warning:: +The clause ``on source delete`` determines the action when the **source** is +deleted: - A link property cannot be referenced in a set union *except* in the case of - a :ref:`for loop `. That means this will *not* work: - - .. code-block:: edgeql - - # 🚫 Does not work - insert Movie { - title := 'The Incredible Hulk', - characters := {( - select Person { - @character_name := 'The Hulk' - } filter .name = 'Mark Ruffalo' - ), - ( - select Person { - @character_name := 'Abomination' - } filter .name = 'Tim Roth' - )} - }; - - That query will produce an error: ``QueryError: invalid reference to link - property in top level shape`` - - You can use this workaround instead: - - .. code-block:: edgeql - - # ✅ Works! - insert Movie { - title := 'The Incredible Hulk', - characters := assert_distinct(( - with actors := { - ('The Hulk', 'Mark Ruffalo'), - ('Abomination', 'Tim Roth') - }, - for actor in actors union ( - select Person { - @character_name := actor.0 - } filter .name = actor.1 - ) - )) - }; - - Note that we are also required to wrap the ``actors`` query with - :eql:func:`assert_distinct` here to assure the compiler that the result set - is distinct. +- ``allow`` — deletes the source, removing the link to the target. +- ``delete target`` — unconditionally deletes the target as well. +- ``delete target if orphan`` — deletes the target if and only if it's no + longer linked by any other object *via the same link*. +.. code-block:: sdl -Querying link properties -^^^^^^^^^^^^^^^^^^^^^^^^ + type MessageThread { + title: str; + multi messages: Message { + on source delete delete target; + } + } -To query a link property, add the link property's name prepended with ``@`` to -a shape on the link. + type Message { + content: str; + } -.. code-block:: edgeql-repl +You can add ``if orphan`` if you'd like to avoid deleting a target that remains +linked elsewhere via the **same** link name. - db> select Person { - ... name, - ... family_members: { - ... name, - ... @relationship - ... } - ... }; - { - default::Person {name: 'Alice', family_members: {}}, - default::Person { - name: 'Bob', - family_members: { - default::Person {name: 'Alice', @relationship: 'step-sister'} - } - }, +.. code-block:: sdl-diff + + type MessageThread { + title: str; + multi messages: Message { + - on source delete delete target; + + on source delete delete target if orphan; + } } .. note:: - In the query results above, Alice appears to have no family members even - though we know that, if she is Bob's step-sister, he must be her - step-brother. We would need to update Alice manually before this is - reflected in the database. Since link properties cannot be required, not - setting one is always allowed and results in the value being the empty set - (``{}``). + The ``if orphan`` qualifier **does not** apply globally across + all links in the database or even all links from the same type. If another + link *by a different name* or *with a different on-target-delete* policy + points at the same object, it *doesn't* prevent the object from being + considered "orphaned" for the link that includes ``if orphan``. -.. note:: - For a full guide on modeling, inserting, updating, and querying link - properties, see the :ref:`Using Link Properties ` - guide. +.. _ref_datamodel_link_polymorphic: -.. _ref_datamodel_link_deletion: +Polymorphic links +================= -Deletion policies ------------------ +.. index:: abstract, subtypes, polymorphic -.. index:: on target delete, on source delete, restrict, delete source, allow, - deferred restrict, delete target, if orphan +Links can be **polymorphic**, i.e., have an ``abstract`` target. In the +example below, we have an abstract type ``Person`` with concrete subtypes +``Hero`` and ``Villain``: + +.. code-block:: sdl -Links can declare their own **deletion policy**. There are two kinds of events -that might trigger these policies: *target deletion* and *source deletion*. + abstract type Person { + name: str; + } -Target deletion -^^^^^^^^^^^^^^^ + type Hero extending Person { + # additional fields + } -Target deletion policies determine what action should be taken when the -*target* of a given link is deleted. They are declared with the ``on target -delete`` clause. + type Villain extending Person { + # additional fields + } + +A polymorphic link can target any non-abstract subtype: .. code-block:: sdl - type MessageThread { - title: str; - } + type Movie { + title: str; + multi characters: Person; + } - type Message { - content: str; - chat: MessageThread { - on target delete delete source; - } - } +When querying a polymorphic link, you can filter by a specific subtype, cast +the link to a subtype, etc. See :ref:`Polymorphic Queries ` +for details. -The ``Message.chat`` link in the example uses the ``delete source`` policy. -There are 4 available target deletion policies. +Abstract links +============== -- ``restrict`` (default) - Any attempt to delete the target object immediately - raises an exception. -- ``delete source`` - when the target of a link is deleted, the source - is also deleted. This is useful for implementing cascading deletes. +.. index:: abstract + +It's possible to define ``abstract`` links that aren't tied to a particular +source or target, and then extend them in concrete object types. This can help +eliminate repetitive declarations: - .. note:: +.. code-block:: sdl - There is `a limit - `_ to the depth of a deletion - cascade due to an upstream stack size limitation. + abstract link link_with_strength { + strength: float64; + index on (__subject__@strength); + } -- ``allow`` - the target object is deleted and is removed from the - set of the link targets. -- ``deferred restrict`` - any attempt to delete the target object - raises an exception at the end of the transaction, unless by - that time this object is no longer in the set of link targets. + type Person { + multi friends: Person { + extending link_with_strength; + }; + } -.. _ref_datamodel_links_source_deletion: -Source deletion -^^^^^^^^^^^^^^^ +.. _ref_eql_sdl_links_overloading: -Source deletion policies determine what action should be taken when the -*source* of a given link is deleted. They are declared with the ``on source -delete`` clause. +Overloading +=========== -There are 3 available source deletion policies: +.. index:: overloaded -- ``allow`` - the source object is deleted and is removed from the set of the - link's source objects. -- ``delete target`` - when the source of a link is deleted, the target - is unconditionally deleted. -- ``delete target if orphan`` - the source object is deleted and the target - object is unconditionally deleted unless the target object is linked to by - another source object via the same link. +When an inherited link is modified (by adding more constraints or changing its +target type, etc.), the ``overloaded`` keyword is required. This prevents +unintentional overloading due to name clashes: .. code-block:: sdl - type MessageThread { - title: str; - multi messages: Message { - on source delete delete target; - } - } + abstract type Friendly { + # this type can have "friends" + multi friends: Friendly; + } + + type User extending Friendly { + # overload the link target to to be specifically User + overloaded multi friends: User; + + # ... other links and properties + } + + +.. _ref_eql_sdl_links: +.. _ref_eql_sdl_links_syntax: + +Declaring links +=============== + +This section describes the syntax to use links in your schema. + +Syntax +------ + +.. sdl:synopsis:: + + # Concrete link form used inside type declaration: + [ overloaded ] [{required | optional}] [{single | multi}] + [ link ] : + [ "{" + [ extending [, ...] ; ] + [ default := ; ] + [ readonly := {true | false} ; ] + [ on target delete ; ] + [ on source delete ; ] + [ ] + [ ] + [ ] + ... + "}" ] + + # Computed link form used inside type declaration: + [{required | optional}] [{single | multi}] + [ link ] := ; + + # Computed link form used inside type declaration (extended): + [ overloaded ] [{required | optional}] [{single | multi}] + link [: ] + [ "{" + using () ; + [ extending [, ...] ; ] + [ ] + [ ] + ... + "}" ] + + # Abstract link form: + abstract link + [ "{" + [extending [, ...] ; ] + [ readonly := {true | false} ; ] + [ ] + [ ] + [ ] + [ ] + ... + "}" ] + +There are several forms of link declaration: + +- The *concrete link form* (inside a type) that points to an object type. +- The *computed link form* (inside a type) that provides a link via an + EdgeQL expression. +- The *abstract link form*, which can be declared at the module level + and extended in other types. + + +.. _ref_eql_ddl_links: + +DDL commands +============ + +This section describes the low-level DDL commands for creating, altering, and +dropping links. + +Create link +----------- + +:eql-statement: +:eql-haswith: + +Define a new link. + +.. eql:synopsis:: + + [ with [, ...] ] + {create|alter} type "{" + [ ... ] + create [{required | optional}] [{single | multi}] + link + [ extending [, ...] ] -> + [ "{" ; [...] "}" ] ; + [ ... ] + "}" + + # Computed link form: + + [ with [, ...] ] + {create|alter} type "{" + [ ... ] + create [{required | optional}] [{single | multi}] + link := ; + [ ... ] + "}" + + # Abstract link form: + + [ with [, ...] ] + create abstract link [::] [extending [, ...]] + [ "{" ; [...] "}" ] + + # where is one of + + set default := + set readonly := {true | false} + create annotation := + create property ... + create constraint ... + on target delete + on source delete + reset on target delete + create index on + +Description +^^^^^^^^^^^ - type Message { - content: str; - } +The combinations of ``create type ... create link`` and ``alter type ... +create link`` define a new concrete link for a given object type, in DDL form. -Under this policy, deleting a ``MessageThread`` will *unconditionally* delete -its ``messages`` as well. +There are three forms of ``create link``: -To avoid deleting a ``Message`` that is linked to by other ``MessageThread`` -objects via their ``message`` link, append ``if orphan`` to that link's -deletion policy. +1. The canonical definition form (specifying a target type). +2. The computed link form (declaring a link via an expression). +3. The abstract link form (declaring a module-level link). -.. code-block:: sdl-diff +Parameters +^^^^^^^^^^^ - type MessageThread { - title: str; - multi messages: Message { - - on source delete delete target; - + on source delete delete target if orphan; - } - } +Most sub-commands and options mirror those found in the +:ref:`SDL link declaration `. In DDL form: -.. note:: +- ``set default := `` specifies a default value. +- ``set readonly := {true | false}`` makes the link read-only or not. +- ``create annotation := `` adds an annotation. +- ``create property ...`` defines a property on the link. +- ``create constraint ...`` defines a constraint on the link. +- ``on target delete `` and ``on source delete `` specify + deletion policies. +- ``reset on target delete`` resets the target deletion policy to default + or inherited. +- ``create index on `` creates an index on the link. - The ``if orphan`` qualifier does not apply globally across all links in the - database or across any other links even if they're from the same type. - Deletion policies using ``if orphan`` will result in the target being - deleted unless +Examples +^^^^^^^^ - 1. it is linked by another object via **the same link the policy is on**, - or - 2. its deletion is restricted by another link's ``on target delete`` policy - (which defaults to ``restrict`` unless otherwise specified) +.. code-block:: edgeql - For example, a ``Message`` might be linked from both a ``MessageThread`` - and a ``Channel``, which is defined like this: + alter type User { + create multi link friends -> User + }; - .. code-block:: sdl +.. code-block:: edgeql - type Channel { - title: str; - multi messages: Message { - on target delete allow; - } - } + alter type User { + create link special_group := ( + select __source__.friends + filter .town = __source__.town + ) + }; - If the ``MessageThread`` linking to the ``Message`` is deleted, the source - deletion policy would still result in the ``Message`` being deleted as long - as no other ``MessageThread`` objects link to it on their ``messages`` link - and the deletion isn't otherwise restricted (e.g., the default policy of - ``on target delete restrict`` has been overridden, as in the schema above). - The object is deleted despite not being orphaned with respect to *all* - links because it *is* orphaned with respect to the ``MessageThread`` type's - ``messages`` field, which is the link governed by the deletion policy. - - If the ``Channel`` type's ``messages`` link had the default policy, the - outcome would change. - - .. code-block:: sdl-diff - - type Channel { - title: str; - multi messages: Message { - - on target delete allow; - } - } +.. code-block:: edgeql - With this schema change, the ``Message`` object would *not* be deleted, but - not because the message isn't globally orphaned. Deletion would be - prevented because of the default target deletion policy of ``restrict`` - which would now be in force on the linking ``Channel`` object's - ``messages`` link. + create abstract link orderable { + create property weight -> std::int64 + }; + + alter type User { + create multi link interests extending orderable -> Interest + }; + + +Alter link +---------- + +:eql-statement: +:eql-haswith: + +Changes the definition of a link. + +.. eql:synopsis:: + + [ with [, ...] ] + {create|alter} type "{" + [ ... ] + alter link + [ "{" ] ; [...] [ "}" ]; + [ ... ] + "}" + + [ with [, ...] ] + alter abstract link [::] + [ "{" ] ; [...] [ "}" ]; + + # where is one of + + set default := + reset default + set readonly := {true | false} + reset readonly + rename to + extending ... + set required + set optional + reset optionality + set single + set multi + reset cardinality + set type [using ()] + reset type + using () + create annotation := + alter annotation := + drop annotation + create property ... + alter property ... + drop property ... + create constraint ... + alter constraint ... + drop constraint ... + on target delete + on source delete + create index on + drop index on + +Description +^^^^^^^^^^^ - The limited scope of ``if orphan`` holds true even when the two links to an - object are from the same type. If ``MessageThread`` had two different links - both linking to messages — maybe the existing ``messages`` link and another - called ``related`` used to link other related ``Message`` objects that are - not in the thread — ``if orphan`` on a deletion policy on ``message`` could - result in linked messages being deleted even if they were also linked from - another ``MessageThread`` object's ``related`` link because they were - orphaned with respect to the ``messages`` link. +This command modifies an existing link on a type. It can also be used on +an abstract link at the module level. +Parameters +^^^^^^^^^^ -.. _ref_datamodel_link_polymorphic: +- ``rename to `` changes the link's name. +- ``extending ...`` changes or adds link parents. +- ``set required`` / ``set optional`` changes the link optionality. +- ``reset optionality`` reverts optionality to default or inherited value. +- ``set single`` / ``set multi`` changes cardinality. +- ``reset cardinality`` reverts cardinality to default or inherited value. +- ``set type [using ()]`` changes the link's target type. +- ``reset type`` reverts the link's type to inherited. +- ``using ()`` changes the expression of a computed link. +- ``create annotation``, ``alter annotation``, ``drop annotation`` manage + annotations. +- ``create property``, ``alter property``, ``drop property`` manage link + properties. +- ``create constraint``, ``alter constraint``, ``drop constraint`` manage + link constraints. +- ``on target delete `` and ``on source delete `` manage + deletion policies. +- ``reset on target delete`` reverts the target deletion policy. +- ``create index on `` / ``drop index on `` manage + indexes on link properties. + +Examples +^^^^^^^^ -Polymorphic links ------------------ +.. code-block:: edgeql -.. index:: abstract, subtypes + alter type User { + alter link friends create annotation title := "Friends"; + }; -Links can have ``abstract`` targets, in which case the link is considered -**polymorphic**. Consider the following schema: +.. code-block:: edgeql -.. code-block:: sdl + alter abstract link orderable rename to sorted; - abstract type Person { - name: str; - } +.. code-block:: edgeql - type Hero extending Person { - # additional fields - } + alter type User { + alter link special_group using ( + # at least one of the friend's interests + # must match the user's + select __source__.friends + filter .interests IN __source__.interests + ); + }; - type Villain extending Person { - # additional fields - } +Drop link +--------- -The ``abstract`` type ``Person`` has two concrete subtypes: ``Hero`` and -``Villain``. Despite being abstract, ``Person`` can be used as a link target in -concrete object types. +:eql-statement: +:eql-haswith: -.. code-block:: sdl +Removes the specified link from the schema. - type Movie { - title: str; - multi characters: Person; - } +.. eql:synopsis:: -In practice, the ``Movie.characters`` link can point to a ``Hero``, -``Villain``, or any other non-abstract subtype of ``Person``. For details on -how to write queries on such a link, refer to the :ref:`Polymorphic Queries -docs ` + [ with [, ...] ] + alter type "{" + [ ... ] + drop link + [ ... ] + "}" + [ with [, ...] ] + drop abstract link []:: -Abstract links --------------- +Description +^^^^^^^^^^^ -.. index:: abstract +- ``alter type ... drop link `` removes the link from an object type. +- ``drop abstract link `` removes an abstract link from the schema. -It's possible to define ``abstract`` links that aren't tied to a particular -*source* or *target*. If you're declaring several links with the same set -of properties, annotations, constraints, or indexes, abstract links can be used -to eliminate repetitive SDL. +Examples +^^^^^^^^ -.. code-block:: sdl +.. code-block:: edgeql - abstract link link_with_strength { - strength: float64; - index on (__subject__@strength); - } + alter type User drop link friends; + +.. code-block:: edgeql + + drop abstract link orderable; - type Person { - multi friends: Person { - extending link_with_strength; - }; - } .. list-table:: :class: seealso * - **See also** - * - :ref:`SDL > Links ` - * - :ref:`DDL > Links ` - * - :ref:`Introspection > Object types - ` + - :ref:`Introspection > Object types ` diff --git a/docs/datamodel/modules.rst b/docs/datamodel/modules.rst index b44a114f54d..a456b9bbcd7 100644 --- a/docs/datamodel/modules.rst +++ b/docs/datamodel/modules.rst @@ -54,16 +54,18 @@ types, utility functions, and operators: :ref:`databases ` * ``cfg``: configuration and settings -Example: empty module -===================== + +Modules are containers +====================== + +They can contain types, functions, and other modules. Here's an example of an +empty module: .. code-block:: sdl module my_module {} - -Example: flat module -==================== +And here's an example of a module with a type: .. code-block:: sdl @@ -74,8 +76,8 @@ Example: flat module } -Example: nested modules -======================= +Nested modules +============== .. code-block:: sdl diff --git a/docs/edgeql/select.rst b/docs/edgeql/select.rst index 68cbbb62dc6..8098038930a 100644 --- a/docs/edgeql/select.rst +++ b/docs/edgeql/select.rst @@ -623,6 +623,31 @@ traversing a backlink would look like this: .. _ref_eql_select_order: +Filtering, ordering, and limiting of links +========================================== + +Clauses like ``filter``, ``order by``, and ``limit`` can be used on links. +If no properties of a link are selected, you can place the clauses directly +inside the shape: + +.. code-block:: edgeql + + select User { + likes order by .title desc limit 10 + }; + +If properties are selected, place the clauses after the link's shape: + +.. code-block:: edgeql + + select User { + likes: { + id, + title + } order by .title desc limit 10 + }; + + Ordering -------- diff --git a/docs/reference/ddl/index.rst b/docs/reference/ddl/index.rst index 4ef7d8bd3a1..a456d0020d0 100644 --- a/docs/reference/ddl/index.rst +++ b/docs/reference/ddl/index.rst @@ -9,7 +9,6 @@ DDL objects scalars - links properties aliases globals diff --git a/docs/reference/ddl/links.rst b/docs/reference/ddl/links.rst deleted file mode 100644 index 57d3d52d5a8..00000000000 --- a/docs/reference/ddl/links.rst +++ /dev/null @@ -1,435 +0,0 @@ -.. _ref_eql_ddl_links: - -===== -Links -===== - -This section describes the DDL commands pertaining to -:ref:`links `. - - -Create link -=========== - -:eql-statement: -:eql-haswith: - -:ref:`Define ` a new link. - -.. eql:synopsis:: - - [ with [, ...] ] - {create|alter} type "{" - [ ... ] - create [{required | optional}] [{single | multi}] - link - [ extending [, ...] ] -> - [ "{" ; [...] "}" ] ; - [ ... ] - "}" - - # Computed link form: - - [ with [, ...] ] - {create|alter} type "{" - [ ... ] - create [{required | optional}] [{single | multi}] - link := ; - [ ... ] - "}" - - # Abstract link form: - - [ with [, ...] ] - create abstract link [::] [extending [, ...]] - [ "{" ; [...] "}" ] - - # where is one of - - set default := - set readonly := {true | false} - create annotation := - create property ... - create constraint ... - on target delete - on source delete - reset on target delete - create index on - - -Description ------------ - -The combinations of ``create type ... create link`` and ``alter type -... create link`` define a new concrete link for a given object type. - -There are three forms of ``create link``, as shown in the syntax synopsis -above. The first form is the canonical definition form, the second -form is a syntax shorthand for defining a -:ref:`computed link `, and the third is a -form to define an abstract link item. The abstract form allows creating -the link in the specified :eql:synopsis:``. Concrete link forms -are always created in the same module as the containing object type. - - -.. _ref_eql_ddl_links_syntax: - -Parameters ----------- - -Most sub-commands and options of this command are identical to the -:ref:`SDL link declaration `. The following -subcommands are allowed in the ``create link`` block: - -:eql:synopsis:`set default := ` - Specifies the default value for the link as an EdgeQL expression. - Other than a slight syntactical difference this is the same as the - corresponding SDL declaration. - -:eql:synopsis:`set readonly := {true | false}` - Specifies whether the link is considered *read-only*. Other than a - slight syntactical difference this is the same as the - corresponding SDL declaration. - -:eql:synopsis:`create annotation := ;` - Add an annotation :eql:synopsis:`` - set to :eql:synopsis:`` to the type. - - See :eql:stmt:`create annotation` for details. - -:eql:synopsis:`create property ...` - Define a concrete property item for this link. See - :eql:stmt:`create property` for details. - -:eql:synopsis:`create constraint ...` - Define a concrete constraint for this link. See - :eql:stmt:`create constraint` for details. - -:eql:synopsis:`on target delete ` - Valid values for *action* are: ``restrict``, ``DELETE - SOURCE``, ``allow``, and ``deferred restrict``. The details of - what ``on target delete`` options mean are described in - :ref:`this section `. - -:eql:synopsis:`reset on target delete` - Reset the delete policy to either the inherited value or to the - default ``restrict``. The details of what ``on target delete`` - options mean are described in :ref:`this section `. - -:eql:synopsis:`create index on ` - Define a new :ref:`index ` - using *index-expr* for this link. See - :eql:stmt:`create index` for details. - - -Examples --------- - -Define a new link ``friends`` on the ``User`` object type: - -.. code-block:: edgeql - - alter type User { - create multi link friends -> User - }; - -Define a new :ref:`computed link ` -``special_group`` on the ``User`` object type, which contains all the -friends from the same town: - -.. code-block:: edgeql - - alter type User { - create link special_group := ( - select __source__.friends - filter .town = __source__.town - ) - }; - -Define a new abstract link ``orderable`` and a concrete link -``interests`` that extends it, inheriting its ``weight`` property: - -.. code-block:: edgeql - - create abstract link orderable { - create property weight -> std::int64 - }; - - alter type User { - create multi link interests extending orderable -> Interest - }; - - - -Alter link -========== - -:eql-statement: -:eql-haswith: - - -Change the definition of a :ref:`link `. - -.. eql:synopsis:: - - [ with [, ...] ] - {create|alter} type "{" - [ ... ] - alter link - [ "{" ] ; [...] [ "}" ]; - [ ... ] - "}" - - - [ with [, ...] ] - alter abstract link [::] - [ "{" ] ; [...] [ "}" ]; - - # where is one of - - set default := - reset default - set readonly := {true | false} - reset readonly - rename to - extending ... - set required - set optional - reset optionality - set single - set multi - reset cardinality - set type [using () - create annotation := - alter annotation := - drop annotation - create property ... - alter property ... - drop property ... - create constraint ... - alter constraint ... - drop constraint ... - on target delete - on source delete - create index on - drop index on - -Description ------------ - -The combinations of``create type ... alter link`` and ``alter type ... -alter link`` change the definition of a concrete link for a given -object type. - -The command ``alter abstract link`` changes the definition of an -abstract link item. *name* must be the identity of an existing -abstract link, optionally qualified with a module name. - -Parameters ----------- - -The following subcommands are allowed in the ``alter link`` block: - -:eql:synopsis:`rename to ` - Change the name of the link item to *newname*. All concrete links - inheriting from this links are also renamed. - -:eql:synopsis:`extending ...` - Alter the link parent list. The full syntax of this subcommand is: - - .. eql:synopsis:: - - extending [, ...] - [ first | last | before | after ] - - This subcommand makes the link a child of the specified list - of parent links. The requirements for the parent-child - relationship are the same as when creating a link. - - It is possible to specify the position in the parent list - using the following optional keywords: - - * ``first`` -- insert parent(s) at the beginning of the - parent list, - * ``last`` -- insert parent(s) at the end of the parent list, - * ``before `` -- insert parent(s) before an - existing *parent*, - * ``after `` -- insert parent(s) after an existing - *parent*. - -:eql:synopsis:`set required` - Make the link *required*. - -:eql:synopsis:`set optional` - Make the link no longer *required* (i.e. make it *optional*). - -:eql:synopsis:`reset optionality` - Reset the optionality of the link to the default value (``optional``), - or, if the link is inherited, to the value inherited from links in - supertypes. - -:eql:synopsis:`set single` - Change the link set's maximum cardinality to *one*. Only - valid for concrete links. - -:eql:synopsis:`set multi` - Remove the upper limit on the link set's cardinality. Only valid for - concrete links. - -:eql:synopsis:`reset cardinality` - Reset the link set's maximum cardinality to the default value - (``single``), or to the value inherited from the link's supertypes. - -:eql:synopsis:`set type [using (`. The optional ``using`` clause specifies - a conversion expression that computes the new link value from the old. - The conversion expression must return a singleton set and is evaluated - on each element of ``multi`` links. A ``using`` clause must be provided - if there is no implicit or assignment cast from old to new type. - -:eql:synopsis:`reset type` - Reset the type of the link to be strictly the inherited type. This only - has an effect on links that have been :ref:`overloaded - ` in order to change their inherited - type. It is an error to ``reset type`` on a link that is not inherited. - -:eql:synopsis:`using ()` - Change the expression of a :ref:`computed link - `. Only valid for concrete links. - -:eql:synopsis:`alter annotation ;` - Alter link annotation :eql:synopsis:``. - See :eql:stmt:`alter annotation` for details. - -:eql:synopsis:`drop annotation ;` - Remove link item's annotation :eql:synopsis:``. - See :eql:stmt:`drop annotation` for details. - -:eql:synopsis:`alter property ...` - Alter the definition of a property item for this link. See - :eql:stmt:`alter property` for details. - -:eql:synopsis:`drop property ;` - Remove a property item from this link. See - :eql:stmt:`drop property` for details. - -:eql:synopsis:`alter constraint ...` - Alter the definition of a constraint for this link. See - :eql:stmt:`alter constraint` for details. - -:eql:synopsis:`drop constraint ;` - Remove a constraint from this link. See - :eql:stmt:`drop constraint` for details. - -:eql:synopsis:`drop index on ` - Remove an :ref:`index ` defined on *index-expr* - from this link. See :eql:stmt:`drop index` for details. - -:eql:synopsis:`reset default` - Remove the default value from this link, or reset it to the value - inherited from a supertype, if the link is inherited. - -:eql:synopsis:`reset readonly` - Set link writability to the default value (writable), or, if the link is - inherited, to the value inherited from links in supertypes. - -All the subcommands allowed in the ``create link`` block are also -valid subcommands for ``alter link`` block. - - -Examples --------- - -On the object type ``User``, set the ``title`` annotation of its -``friends`` link to ``"Friends"``: - -.. code-block:: edgeql - - alter type User { - alter link friends create annotation title := "Friends"; - }; - -Rename the abstract link ``orderable`` to ``sorted``: - -.. code-block:: edgeql - - alter abstract link orderable rename to sorted; - -Redefine the :ref:`computed link ` -``special_group`` to be those who have some shared interests: - -.. code-block:: edgeql - - alter type User { - create link special_group := ( - select __source__.friends - # at least one of the friend's interests - # must match the user's - filter .interests IN __source__.interests - ) - }; - - -Drop link -========= - -:eql-statement: -:eql-haswith: - - -Remove the specified link from the schema. - -.. eql:synopsis:: - - [ with [, ...] ] - alter type "{" - [ ... ] - drop link - [ ... ] - "}" - - - [ with [, ...] ] - drop abstract link []:: - - -Description ------------ - -The combination of ``alter type`` and ``drop link`` removes the -specified link from its containing object type. All links that -inherit from this link are also removed. - -The command ``drop abstract link`` removes an existing link item from -the database schema. All subordinate schema items defined on this -link, such as link properties and constraints, are removed as well. - - -Examples --------- - -Remove link ``friends`` from object type ``User``: - -.. code-block:: edgeql - - alter type User drop link friends; - - -Drop abstract link ``orderable``: - -.. code-block:: edgeql - - drop abstract link orderable; - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Links ` - * - :ref:`SDL > Links ` - * - :ref:`Introspection > Object types - ` diff --git a/docs/reference/sdl/index.rst b/docs/reference/sdl/index.rst index e8713187a02..f1fb2fd443a 100644 --- a/docs/reference/sdl/index.rst +++ b/docs/reference/sdl/index.rst @@ -104,7 +104,6 @@ to the previous migration: objects scalars - links properties aliases globals diff --git a/docs/reference/sdl/links.rst b/docs/reference/sdl/links.rst deleted file mode 100644 index 52bba673eb9..00000000000 --- a/docs/reference/sdl/links.rst +++ /dev/null @@ -1,210 +0,0 @@ -.. _ref_eql_sdl_links: - -===== -Links -===== - -This section describes the SDL declarations pertaining to -:ref:`links `. - - -Examples --------- - -Declare an *abstract* link "friends_base" with a helpful title: - -.. code-block:: sdl - - abstract link friends_base { - # declare a specific title for the link - annotation title := 'Close contacts'; - } - -Declare a *concrete* link "friends" within a "User" type: - -.. code-block:: sdl - - type User { - required name: str; - address: str; - # define a concrete link "friends" - multi friends: User { - extending friends_base; - }; - - index on (__subject__.name); - } - -.. _ref_eql_sdl_links_overloading: - -Overloading -~~~~~~~~~~~ - -Any time that the SDL declaration refers to an inherited link that is -being overloaded (by adding more constraints or changing the target -type, for example), the ``overloaded`` keyword must be used. This is -to prevent unintentional overloading due to name clashes: - -.. code-block:: sdl - - abstract type Friendly { - # this type can have "friends" - multi friends: Friendly; - } - - type User extending Friendly { - # overload the link target to be User, specifically - overloaded multi friends: User; - # ... other links and properties - } - -.. _ref_eql_sdl_links_syntax: - -Syntax ------- - -Define a new link corresponding to the :ref:`more explicit DDL -commands `. - -.. sdl:synopsis:: - - # Concrete link form used inside type declaration: - [ overloaded ] [{required | optional}] [{single | multi}] - [ link ] : - [ "{" - [ extending [, ...] ; ] - [ default := ; ] - [ readonly := {true | false} ; ] - [ on target delete ; ] - [ on source delete ; ] - [ ] - [ ] - [ ] - ... - "}" ] - - - # Computed link form used inside type declaration: - [{required | optional}] [{single | multi}] - [ link ] := ; - - # Computed link form used inside type declaration (extended): - [ overloaded ] [{required | optional}] [{single | multi}] - link [: ] - [ "{" - using () ; - [ extending [, ...] ; ] - [ ] - [ ] - ... - "}" ] - - # Abstract link form: - abstract link - [ "{" - [extending [, ...] ; ] - [ readonly := {true | false} ; ] - [ ] - [ ] - [ ] - [ ] - ... - "}" ] - - -Description ------------ - -There are several forms of link declaration, as shown in the syntax synopsis -above. The first form is the canonical definition form, the second form is used -for defining a :ref:`computed link `, and the last form -is used to define an abstract link. The abstract form allows declaring the link -directly inside a :ref:`module `. Concrete link forms are -always used as sub-declarations of an :ref:`object type -`. - -The following options are available: - -:eql:synopsis:`overloaded` - If specified, indicates that the link is inherited and that some - feature of it may be altered in the current object type. It is an - error to declare a link as *overloaded* if it is not inherited. - -:eql:synopsis:`required` - If specified, the link is considered *required* for the parent - object type. It is an error for an object to have a required - link resolve to an empty value. Child links **always** inherit - the *required* attribute, i.e it is not possible to make a - required link non-required by extending it. - -:eql:synopsis:`optional` - This is the default qualifier assumed when no qualifier is - specified, but it can also be specified explicitly. The link is - considered *optional* for the parent object type, i.e. it is - possible for the link to resolve to an empty value. - -:eql:synopsis:`multi` - Specifies that there may be more than one instance of this link - in an object, in other words, ``Object.link`` may resolve to a set - of a size greater than one. - -:eql:synopsis:`single` - Specifies that there may be at most *one* instance of this link - in an object, in other words, ``Object.link`` may resolve to a set - of a size not greater than one. ``single`` is assumed if nether - ``multi`` nor ``single`` qualifier is specified. - -:eql:synopsis:`extending [, ...]` - Optional clause specifying the *parents* of the new link item. - - Use of ``extending`` creates a persistent schema relationship - between the new link and its parents. Schema modifications - to the parent(s) propagate to the child. - - If the same *property* name exists in more than one parent, or - is explicitly defined in the new link and at least one parent, - then the data types of the property targets must be *compatible*. - If there is no conflict, the link properties are merged to form a - single property in the new link item. - -:eql:synopsis:`` - The type must be a valid :ref:`type expression ` - denoting an object type. - -The valid SDL sub-declarations are listed below: - -:eql:synopsis:`default := ` - Specifies the default value for the link as an EdgeQL expression. - The default value is used in an ``insert`` statement if an explicit - value for this link is not specified. - - The expression must be :ref:`Stable `. - -:eql:synopsis:`readonly := {true | false}` - If ``true``, the link is considered *read-only*. Modifications - of this link are prohibited once an object is created. All of the - derived links **must** preserve the original *read-only* value. - -:sdl:synopsis:`` - Set link :ref:`annotation ` - to a given *value*. - -:sdl:synopsis:`` - Define a concrete :ref:`property ` on the link. - -:sdl:synopsis:`` - Define a concrete :ref:`constraint ` on the link. - -:sdl:synopsis:`` - Define an :ref:`index ` for this abstract - link. Note that this index can only refer to link properties. - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Links ` - * - :ref:`DDL > Links ` - * - :ref:`Introspection > Object types - ` From e0574eebb67a808b682268b483c3bf1049b5ed0a Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Sat, 15 Feb 2025 21:01:11 -0800 Subject: [PATCH 09/23] Add a clarification about DDL commands --- docs/datamodel/annotations.rst | 5 ++++- docs/datamodel/constraints.rst | 4 +++- docs/datamodel/functions.rst | 4 +++- docs/datamodel/indexes.rst | 4 +++- docs/datamodel/links.rst | 3 ++- docs/datamodel/modules.rst | 4 +++- docs/datamodel/triggers.rst | 4 +++- 7 files changed, 21 insertions(+), 7 deletions(-) diff --git a/docs/datamodel/annotations.rst b/docs/datamodel/annotations.rst index 203849dd9b9..1ddb58929cb 100644 --- a/docs/datamodel/annotations.rst +++ b/docs/datamodel/annotations.rst @@ -125,7 +125,10 @@ DDL commands ============ This section describes the low-level DDL commands for creating, altering, -and dropping annotations and abstract annotations. +and dropping annotations and abstract annotations. You typically don't need to +use these commands directly, but knowing about them is useful for reviewing +migrations. + Create abstract annotation -------------------------- diff --git a/docs/datamodel/constraints.rst b/docs/datamodel/constraints.rst index 6a065f4e989..cea5b67b9dd 100644 --- a/docs/datamodel/constraints.rst +++ b/docs/datamodel/constraints.rst @@ -511,7 +511,9 @@ DDL commands ============ This section describes the low-level DDL commands for creating and dropping -constraints and abstract constraints. +constraints and abstract constraints. You typically don't need to use these +commands directly, but knowing about them is useful for reviewing migrations. + Create abstract constraint -------------------------- diff --git a/docs/datamodel/functions.rst b/docs/datamodel/functions.rst index 7077df1feff..58c6fbf6fda 100644 --- a/docs/datamodel/functions.rst +++ b/docs/datamodel/functions.rst @@ -314,7 +314,9 @@ DDL commands ============ This section describes the low-level DDL commands for creating, altering, and -dropping functions. +dropping functions. You typically don't need to use these commands directly, but +knowing about them is useful for reviewing migrations. + Create function diff --git a/docs/datamodel/indexes.rst b/docs/datamodel/indexes.rst index 1435d5bdd03..b4ffe37e92d 100644 --- a/docs/datamodel/indexes.rst +++ b/docs/datamodel/indexes.rst @@ -229,7 +229,9 @@ DDL commands ============ This section describes the low-level DDL commands for creating, altering, and -dropping indexes. +dropping indexes. You typically don't need to use these commands directly, but +knowing about them is useful for reviewing migrations. + Create index ------------ diff --git a/docs/datamodel/links.rst b/docs/datamodel/links.rst index f9483079642..36386c23e4a 100644 --- a/docs/datamodel/links.rst +++ b/docs/datamodel/links.rst @@ -801,7 +801,8 @@ DDL commands ============ This section describes the low-level DDL commands for creating, altering, and -dropping links. +dropping links. You typically don't need to use these commands directly, but +knowing about them is useful for reviewing migrations. Create link ----------- diff --git a/docs/datamodel/modules.rst b/docs/datamodel/modules.rst index a456b9bbcd7..051b359cb6d 100644 --- a/docs/datamodel/modules.rst +++ b/docs/datamodel/modules.rst @@ -205,7 +205,9 @@ DDL commands ============ This section describes the low-level DDL commands for creating and dropping -modules. +modules. You typically don't need to use these commands directly, but +knowing about them is useful for reviewing migrations. + Create module ------------- diff --git a/docs/datamodel/triggers.rst b/docs/datamodel/triggers.rst index 57aa7086e82..10141f8191f 100644 --- a/docs/datamodel/triggers.rst +++ b/docs/datamodel/triggers.rst @@ -463,7 +463,9 @@ DDL commands ============ This section describes the low-level DDL commands for creating and dropping -triggers. +triggers. You typically don't need to use these commands directly, but +knowing about them is useful for reviewing migrations. + Create trigger -------------- From 517d0c7da15629cf8acc71e4cc74b50bae9f7b70 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Sun, 16 Feb 2025 00:06:06 -0800 Subject: [PATCH 10/23] Merge extensions --- docs/datamodel/extensions.rst | 171 +++++++++++++++++++++++------- docs/datamodel/links.rst | 2 +- docs/reference/ddl/extensions.rst | 86 --------------- docs/reference/ddl/index.rst | 1 - docs/reference/sdl/extensions.rst | 44 -------- docs/reference/sdl/index.rst | 1 - 6 files changed, 135 insertions(+), 170 deletions(-) delete mode 100644 docs/reference/ddl/extensions.rst delete mode 100644 docs/reference/sdl/extensions.rst diff --git a/docs/datamodel/extensions.rst b/docs/datamodel/extensions.rst index 53a4ab6d932..d5585b6a0c6 100644 --- a/docs/datamodel/extensions.rst +++ b/docs/datamodel/extensions.rst @@ -6,12 +6,13 @@ Extensions .. index:: using extension -Extensions are the way |Gel| adds more functionality. In principle, -extensions could add new types, scalars, functions, etc., but, more +Extensions are the way |Gel| can be extended with more functionality. +They can add new types, scalars, functions, etc., but, more importantly, they can add new ways of interacting with the database. + Built-in extensions -------------------- +=================== .. index:: edgeql_http, graphql, auth, ai, pg_trgm, pg_unaccent, pgcrypto, pgvector @@ -37,76 +38,172 @@ There are a few built-in extensions available: .. _ref_datamodel_using_extension: -To enable these extensions, add a ``using`` statement at the top level of your schema: +To enable these extensions, add a ``using`` statement at the top level of +your schema: .. code-block:: sdl - using extension auth; - + using extension auth; + # or / and + using extension ai; Standalone extensions ---------------------- +===================== .. index:: postgis -Additionally, standalone extension packages can be installed via the CLI. +Additionally, standalone extension packages can be installed via the CLI, +with ``postgis`` being a notable example. List installed extensions: .. code-block:: bash - $ gel extension list -I my_instance - ┌─────────┬─────────┐ - │ Name │ Version │ - └─────────┴─────────┘ + $ gel extension list -I my_instance + ┌─────────┬─────────┐ + │ Name │ Version │ + └─────────┴─────────┘ List available extensions: .. code-block:: bash - $ gel extension list-available -I my_instance - ┌─────────┬───────────────┐ - │ Name │ Version │ - │ postgis │ 3.4.3+6b82d77 │ - └─────────┴───────────────┘ + $ gel extension list-available -I my_instance + ┌─────────┬───────────────┐ + │ Name │ Version │ + │ postgis │ 3.4.3+6b82d77 │ + └─────────┴───────────────┘ Install the ``postgis`` extension: .. code-block:: bash - $ gel extension install -I my_instance -E postgis - Found extension package: postgis version 3.4.3+6b82d77 - 00:00:03 [====================] 22.49 MiB/22.49 MiB - Extension 'postgis' installed successfully. + $ gel extension install -I my_instance -E postgis + Found extension package: postgis version 3.4.3+6b82d77 + 00:00:03 [====================] 22.49 MiB/22.49 MiB + Extension 'postgis' installed successfully. Check that extension is installed: .. code-block:: bash - $ gel extension list -I my_instance - ┌─────────┬───────────────┐ - │ Name │ Version │ - │ postgis │ 3.4.3+6b82d77 │ - └─────────┴───────────────┘ + $ gel extension list -I my_instance + ┌─────────┬───────────────┐ + │ Name │ Version │ + │ postgis │ 3.4.3+6b82d77 │ + └─────────┴───────────────┘ After installing extensions, make sure to restart your instance: .. code-block:: bash - $ gel instance restart -I my_instance + $ gel instance restart -I my_instance + +Standalone extensions can now be declared in the schema, same as +built-in extensions: + +.. code-block:: sdl + + using extension postgis; + +.. note:: + To restore a dump that uses a standalone extension, that extension must + be installed before the restore process. + +.. _ref_eql_sdl_extensions: + +Using extensions +================ + +Syntax +------ + +.. sdl:synopsis:: + + using extension ";" + + +Extension declaration must be outside any :ref:`module block +` since extensions affect the entire database and +not a specific module. + + + +.. _ref_eql_ddl_extensions: + +DDL commands +============ + +This section describes the low-level DDL commands for creating and +dropping extensions. You typically don't need to use these commands directly, +but knowing about them is useful for reviewing migrations. + + +create extension +---------------- + +:eql-statement: + +Enable a particular extension for the current schema. + +.. eql:synopsis:: + + create extension ";" + + +Description +^^^^^^^^^^^ + +The command ``create extension`` enables the specified extension for +the current :versionreplace:`database;5.0:branch`. + +Examples +^^^^^^^^ + +Enable :ref:`GraphQL ` extension for the current +schema: + +.. code-block:: edgeql + + create extension graphql; + +Enable :ref:`EdgeQL over HTTP ` extension for the +current :versionreplace:`database;5.0:branch`: + +.. code-block:: edgeql + + create extension edgeql_http; + + +drop extension +-------------- + +:eql-statement: + +Disable an extension. + +.. eql:synopsis:: + + drop extension ";" + + +The command ``drop extension`` disables a currently active extension for +the current |branch|. + +Examples +^^^^^^^^ + +Disable :ref:`GraphQL ` extension for the current +schema: -Standalone extensions can now be declared in the schema, same as :ref:`built-in -extensions `. +.. code-block:: edgeql -To restore a dump that uses a standalone extension, that extension must be installed -before the restore process. + drop extension graphql; +Disable :ref:`EdgeQL over HTTP ` extension for the +current :versionreplace:`database;5.0:branch`: -.. list-table:: - :class: seealso +.. code-block:: edgeql - * - **See also** - * - :ref:`SDL > Extensions ` - * - :eql:stmt:`DDL > CREATE EXTENSION ` - * - :eql:stmt:`DDL > DROP EXTENSION ` + drop extension edgeql_http; diff --git a/docs/datamodel/links.rst b/docs/datamodel/links.rst index 36386c23e4a..d620935914a 100644 --- a/docs/datamodel/links.rst +++ b/docs/datamodel/links.rst @@ -777,7 +777,7 @@ Syntax # Abstract link form: abstract link [ "{" - [extending [, ...] ; ] + [ extending [, ...] ; ] [ readonly := {true | false} ; ] [ ] [ ] diff --git a/docs/reference/ddl/extensions.rst b/docs/reference/ddl/extensions.rst deleted file mode 100644 index c0bbdc0c3c6..00000000000 --- a/docs/reference/ddl/extensions.rst +++ /dev/null @@ -1,86 +0,0 @@ -.. _ref_eql_ddl_extensions: - -========== -Extensions -========== - -This section describes the DDL commands pertaining to -:ref:`extensions `. - - -Create extension -================ - -:eql-statement: - -Enable a particular extension for the current schema. - -.. eql:synopsis:: - - create extension ";" - -There's a :ref:`corresponding SDL declaration ` -for enabling an extension, which is the recommended way of doing this. - -Description ------------ - -The command ``create extension`` enables the specified extension for -the current |branch|. - -Examples --------- - -Enable :ref:`GraphQL ` extension for the current -schema: - -.. code-block:: edgeql - - create extension graphql; - -Enable :ref:`EdgeQL over HTTP ` extension for the -current |branch|: - -.. code-block:: edgeql - - create extension edgeql_http; - - -drop extension -============== - -:eql-statement: - - -Disable an extension. - -.. eql:synopsis:: - - drop extension ";" - - -Description ------------ - -The command ``drop extension`` disables a currently active extension for the -current |branch|. - - -Examples --------- - -Disable :ref:`GraphQL ` extension for the current -schema: - -.. code-block:: edgeql - - drop extension graphql; - -Disable :ref:`EdgeQL over HTTP ` extension for the -current |branch|: - -.. code-block:: edgeql - - drop extension edgeql_http; - - diff --git a/docs/reference/ddl/index.rst b/docs/reference/ddl/index.rst index a456d0020d0..f522805c315 100644 --- a/docs/reference/ddl/index.rst +++ b/docs/reference/ddl/index.rst @@ -14,7 +14,6 @@ DDL globals access_policies mutation_rewrites - extensions future migrations diff --git a/docs/reference/sdl/extensions.rst b/docs/reference/sdl/extensions.rst deleted file mode 100644 index d73ded8d7c9..00000000000 --- a/docs/reference/sdl/extensions.rst +++ /dev/null @@ -1,44 +0,0 @@ -.. _ref_eql_sdl_extensions: - -========== -Extensions -========== - -This section describes the SDL commands pertaining to -:ref:`extensions `. - - -Syntax ------- - -Declare that the current schema enables a particular extension. - -.. sdl:synopsis:: - - using extension ";" - - -Description ------------ - -Extension declaration must be outside any :ref:`module block -` since extensions affect the entire database and -not a specific module. - - -Examples --------- - -Enable :ref:`GraphQL ` extension for the current -schema: - -.. code-block:: sdl - - using extension graphql; - -Enable :ref:`EdgeQL over HTTP ` extension for the -current database: - -.. code-block:: sdl - - using extension edgeql_http; diff --git a/docs/reference/sdl/index.rst b/docs/reference/sdl/index.rst index f1fb2fd443a..fdede59ee09 100644 --- a/docs/reference/sdl/index.rst +++ b/docs/reference/sdl/index.rst @@ -109,5 +109,4 @@ to the previous migration: globals access_policies mutation_rewrites - extensions future From 08d6670d8fcc14bb984905046eef8405f54ff2ce Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Sun, 16 Feb 2025 15:31:16 -0800 Subject: [PATCH 11/23] Merge access policies --- docs/datamodel/access_policies.rst | 776 +++++++++++++++---------- docs/datamodel/functions.rst | 2 - docs/datamodel/future.rst | 20 +- docs/datamodel/indexes.rst | 2 +- docs/reference/ddl/access_policies.rst | 225 ------- docs/reference/ddl/index.rst | 1 - docs/reference/sdl/access_policies.rst | 165 ------ docs/reference/sdl/index.rst | 1 - 8 files changed, 479 insertions(+), 713 deletions(-) delete mode 100644 docs/reference/ddl/access_policies.rst delete mode 100644 docs/reference/sdl/access_policies.rst diff --git a/docs/datamodel/access_policies.rst b/docs/datamodel/access_policies.rst index 184994804ad..e94e14013ea 100644 --- a/docs/datamodel/access_policies.rst +++ b/docs/datamodel/access_policies.rst @@ -7,12 +7,23 @@ Access Policies .. index:: access policy, object-level security, row-level security, RLS, allow, deny, using -Object types can contain security policies that restrict the set of objects -that can be selected, inserted, updated, or deleted by a particular query. -This is known as *object-level security* and it is similar in function to SQL's -row-level security. +Object types in |Gel| can contain security policies that restrict the set of +objects that can be selected, inserted, updated, or deleted by a particular +query. This is known as *object-level security* and is similar in function +to SQL's row-level security. -Let's start with a simple schema for a blog without any access policies. +When no access policies are defined, object-level security is not activated: +any properly authenticated client can carry out any operation on any object +in the database. Access policies allow you to ensure that the database itself +handles access control logic rather than having to implement it in every +application or service that connects to your database. + +Access policies can greatly simplify your backend code, centralizing access +control logic in a single place. They can also be extremely useful for +implementing AI agentic flows, where you want to have guardrails around +your data that agents can't break. + +We'll illustrate access policies in this document with this simple schema: .. code-block:: sdl @@ -25,37 +36,43 @@ Let's start with a simple schema for a blog without any access policies. required author: User; } -When no access policies are defined, object-level security is not activated. -Any properly authenticated client can carry out any operation on any object -in the database. At the moment, we would need to ensure that the app handles -the logic to restrict users from accessing other users' posts. Access -policies allow us to ensure that the database itself handles this logic, -thereby freeing us up from implementing access control in each and every -piece of software that accesses the data. .. warning:: - Once a policy is added to a particular object type, **all operations** - (``select``, ``insert``, ``delete``, ``update``, etc.) on any object of - that type are now *disallowed by default* unless specifically allowed by an - access policy! See the subsection on resolution order below for details. - -Defining a global -^^^^^^^^^^^^^^^^^ - -Global variables are the a convenient way to provide the context needed to -determine what sort of access should be allowed for a given object, as they -can be set and reset by the application as needed. - -To start, we'll add two global variables to our schema. We'll use one global -``uuid`` to represent the identity of the user executing the query, and an -enum for the other to represent the type of country that the user is currently -in. The enum represents three types of countries: those where the service has -not been rolled out, those with read-only access, and those with full access. -A global makes sense in this case because a user's current country is -context-specific: the same user who can access certain content in one country -might not be able to in another country due to different legal frameworks -(such as copyright length). + Once a policy is added to a particular object type, **all operations** + (``select``, ``insert``, ``delete``, ``update``, etc.) on any object of + that type are now *disallowed by default* unless specifically allowed by + an access policy! See :ref:`resolution order ` + below for details. + +Global variables +================ + +Global variables are a convenient way to set up the context for your access +policies. Gel's global variables are tightly integrated with the Gel's +data model, client APIs, EdgeQL and SQL, and the tooling around them. + +Global variables in Gel are not pre-defined. Users are free to define +as many globals in their schema as they want to represent the business +logic of their application. + +A common scenario is storing a ``current_user`` global representing +the user executing queries. We'd like to have a slightly more complex example +showing that you can use more than one global variable. Let's do that: + +* We'll use one *global* ``uuid`` to represent the identity of the user + executing the query. +* We'll have the ``Country`` *enum* to represent the type of country + that the user is currently in. The enum represents three types of + countries: those where the service has not been rolled out, those with + read-only access, and those with full access. +* We'll use the ``current_country`` *global* to represent the user's + current country. In our *example schema*, we want *country* to be + context-specific: the same user who can access certain content in one + country might not be able to in another country (let's imagine that's + due to different country-specific legal frameworks). + +Here is an illustration: .. code-block:: sdl-diff @@ -74,8 +91,7 @@ might not be able to in another country due to different legal frameworks required author: User; } -The value of these global variables is attached to the *client* you use to -execute queries. The exact API depends on which client library you're using: +You can set and reset these globals in Gel client libraries, for example: .. tabs:: @@ -83,11 +99,17 @@ execute queries. The exact API depends on which client library you're using: import createClient from 'gel'; - const client = createClient().withGlobals({ + const client = createClient(); + + // 'authedClient' will share the network connection with 'client', + // but will have the 'current_user' global set. + const authedClient = client.withGlobals({ current_user: '2141a5b4-5634-4ccc-b835-437863534c51', }); - await client.query(`select global current_user;`); + const result = await authedClient.query( + `select global current_user;`); + console.log(result); .. code-tab:: python @@ -100,6 +122,7 @@ execute queries. The exact API depends on which client library you're using: result = client.query(""" select global current_user; """) + print(result) .. code-tab:: go @@ -166,66 +189,53 @@ execute queries. The exact API depends on which client library you're using: .expect("Returning value"); -Defining a policy -^^^^^^^^^^^^^^^^^ +Defining policies +================= -Let's add two policies to our sample schema. +A policy example for our simple blog schema might look like: .. code-block:: sdl-diff - global current_user: uuid; - required global current_country: Country { - default := Country.None - } - scalar type Country extending enum; + global current_user: uuid; + required global current_country: Country { + default := Country.None + } + scalar type Country extending enum; - type User { - required email: str { constraint exclusive; } - } + type User { + required email: str { constraint exclusive; } + } - type BlogPost { - required title: str; - required author: User; + type BlogPost { + required title: str; + required author: User; - + access policy author_has_full_access - + allow all - + using (global current_user ?= .author.id - + and global current_country ?= Country.Full) { - + errmessage := "User does not have full access"; - + } - + access policy author_has_read_access - + allow select - + using (global current_user ?= .author.id - + and global current_country ?= Country.ReadOnly); - } + + access policy author_has_full_access + + allow all + + using (global current_user ?= .author.id + + and global current_country ?= Country.Full) { + + errmessage := "User does not have full access"; + + } -Let's break down the access policy syntax piece-by-piece. These policies grant -full read-write access (``all``) to the ``author`` of each ``BlogPost``, if -the author is in a country that allows full access to the service. Otherwise, -the same author will be restricted to either read-only access or no access at -all, depending on the country. + + access policy author_has_read_access + + allow select + + using (global current_user ?= .author.id + + and global current_country ?= Country.ReadOnly); + } -.. note:: +Explanation: + +- ``access policy `` introduces a new policy in an object type. +- ``allow all`` grants ``select``, ``insert``, ``update``, and ``delete`` + access if the condition passes. We also used a separate policy to allow + only ``select`` in some cases. +- ``using ()`` is a boolean filter restricting the set of objects to + which the policy applies. (We used the coalescing operator ``?=`` to + handle empty sets gracefully.) +- ``errmessage`` is an optional custom message to display in case of a write + violation. - We're using the *coalescing equality* operator ``?=`` because it returns - ``false`` even if one of its arguments is an empty set. - -- ``access policy``: The keyword used to declare a policy inside an object - type. -- ``author_has_full_access`` and ``author_has_read_access``: The names of these - policies; could be any string. -- ``allow``: The kind of policy; could be ``allow`` or ``deny`` -- ``all``: The set of operations being allowed/denied; a comma-separated list - of any number of the following: ``all``, ``select``, ``insert``, ``delete``, - ``update``, ``update read``, and ``update write``. -- ``using ()``: A boolean expression. Think of this as a ``filter`` - expression that defines the set of objects to which the policy applies. -- ``errmessage``: Here we have added an error message that will be shown in - case the policy expression returns ``false``. We could have added other - annotations of our own inside this code block instead of, or in addition - to ``errmessage``. - -Let's do some experiments. +Let's run some experiments in the REPL: .. code-block:: edgeql-repl @@ -242,58 +252,22 @@ Let's do some experiments. ... }; {default::BlogPost {id: e76afeae-03db-11ed-b346-fbb81f537ca6}} -We've created a ``User``, set the value of ``current_user`` to its ``id``, the -country to ``Country.Full``, and created a new ``BlogPost``. When we try to -select all ``BlogPost`` objects, we'll see the post we just created. - -.. code-block:: edgeql-repl - - db> select BlogPost; - {default::BlogPost {id: e76afeae-03db-11ed-b346-fbb81f537ca6}} - db> select count(BlogPost); - {1} - -Next, let's test what happens when the same user is in two other countries: -one that allows read-only access to our app, and another where we haven't -yet been given permission to roll out our service. +Because the user is in a "full access" country and the current user ID +matches the author, the new blog post is permitted. When the same user sets +``global current_country := Country.ReadOnly;``: .. code-block:: edgeql-repl db> set global current_country := Country.ReadOnly; OK: SET GLOBAL db> select BlogPost; - {default::BlogPost {id: dd274432-94ff-11ee-953e-0752e8ad3010}} + {default::BlogPost {id: e76afeae-03db-11ed-b346-fbb81f537ca6}} db> insert BlogPost { ... title := "My second post", ... author := (select User filter .id = global current_user) ... }; gel error: AccessPolicyError: access policy violation on insert of default::BlogPost (User does not have full access) - db> set global current_country := Country.None; - OK: SET GLOBAL - db> select BlogPost; - {} - -Note that for a ``select`` operation, the access policy works as a filter -by simply returning an empty set. Meanwhile, when attempting an ``insert`` -operation, the operation may or may not work and thus we have provided a -helpful error message in the access policy to give users a heads up on what -went wrong. - -Now let's move back to a country with full access, but set the -``global current_user`` to some other id: a new user that has yet to write -any blog posts. Now the number of ``BlogPost`` objects returned via -the ``count`` function is zero: - -.. code-block:: edgeql-repl - - db> set global current_country := Country.Full; - OK: SET GLOBAL - db> set global current_user := - ... 'd1c64b84-8e3c-11ee-86f0-d7ddecf3e9bd'; - OK: SET GLOBAL - db> select count(BlogPost); - {0} Finally, let's unset ``current_user`` and see how many blog posts are returned when we count them. @@ -314,76 +288,43 @@ When ``current_user`` has no value or has a different value from the But thanks to ``Country`` being set to ``Country.Full``, this user will be able to write a new blog post. -The access policies use global variables to define a "subgraph" of data that -is visible to a particular query. +**The bottom line:** access policies use global variables to define a +"subgraph" of data that is visible to your queries. + Policy types -^^^^^^^^^^^^ +============ -.. index:: accesss policy, select, insert, delete, update, update read, +.. index:: access policy, select, insert, delete, update, update read, update write, all -For the most part, the policy types correspond to EdgeQL's *statement types*: - -- ``select``: Applies to all queries; objects without a ``select`` permission - cannot be modified either. -- ``insert``: Applies to insert queries; executed *post-insert*. If an - inserted object violates the policy, the query will fail. -- ``delete``: Applies to delete queries. -- ``update``: Applies to update queries. - -Additionally, the ``update`` operation can be broken down into two -sub-policies: ``update read`` and ``update write``. +The types of policy rules map to the statement type in EdgeQL: -- ``update read``: This policy restricts *which* objects can be updated. It - runs *pre-update*; that is, this policy is executed before the updates have - been applied. As a result, an empty set is returned on an ``update read`` - when a query lacks access to perform the operation. -- ``update write``: This policy restricts *how* you update the objects; you - can think of it as a *post-update* validity check. As a result, an error - is returned on an ``update write`` when a query lacks access to perform - the operation. Preventing a ``User`` from transferring a ``BlogPost`` to - another ``User`` is one example of an ``update write`` access policy. - -Finally, there's an umbrella policy that can be used as a shorthand for all -the others. - -- ``all``: A shorthand policy that can be used to allow or deny full read/ - write permissions. Exactly equivalent to ``select, insert, update, delete``. +- ``select``: Controls which objects are visible to any query. +- ``insert``: Post-insert check. If the inserted object violates the policy, + the operation fails. +- ``delete``: Controls which objects can be deleted. +- ``update read``: Pre-update check on which objects can be updated at all. +- ``update write``: Post-update check for how objects can be updated. +- ``all``: Shorthand for granting or denying ``select, insert, update, + delete``. Resolution order -^^^^^^^^^^^^^^^^ - -An object type can contain an arbitrary number of access policies, including -several conflicting ``allow`` and ``deny`` policies. |Gel| uses a particular -algorithm for resolving these policies. - -.. figure:: images/ols.png - - The access policy resolution algorithm, explained with Venn diagrams. +================ -1. When no policies are defined on a given object type, all objects of that - type can be read or modified by any appropriately authenticated connection. +If multiple policies apply (some are ``allow`` and some are ``deny``), the +logic is: -2. Gel then applies all ``allow`` policies. Each policy grants a - *permission* that is scoped to a particular *set of objects* as defined by - the ``using`` clause. Conceptually, these permissions are merged with - the ``union`` / ``or`` operator to determine the set of allowable actions. +1. If there are no policies, access is allowed. +2. All ``allow`` policies collectively form a *union* / *or* of allowed sets. +3. All ``deny`` policies *subtract* from that union, overriding allows! +4. The final set of objects is the intersection of the above logic for each + operation: ``select, insert, update read, update write, delete``. -3. After the ``allow`` policies are resolved, the ``deny`` policies can be - used to carve out exceptions to the ``allow`` rules. Deny rules *supersede* - allow rules! As before, the set of objects targeted by the policy is - defined by the ``using`` clause. - -4. This results in the final access level: a set of objects targetable by each - of ``select``, ``insert``, ``update read``, ``update write``, and - ``delete``. - -Currently, by default the access policies affect the values visible -in expressions of *other* access -policies. This means that they can affect each other in various ways. Because -of this, great care needs to be taken when creating access policies based on -objects other than the ones they are defined on. For example: +By default, once you define any policy on an object type, you must explicitly +allow the operations you need. This is a common **pitfall** when you are +starting out with access policies (but you will develop an intuition for this +quickly). Let's look at an example: .. code-block:: sdl @@ -410,45 +351,34 @@ objects other than the ones they are defined on. For example: using (global current_user ?= .author.id); } -In the above schema only the admin will see a non-empty ``author`` link, -because only the admin can see any user objects at all. This means that -instead of making ``BlogPost`` visible to its author, all non-admin authors -won't be able to see their own posts. The above issue can be remedied by -making the current user able to see their own ``User`` record. - -.. _ref_datamodel_access_policies_nonrecursive: -.. _nonrecursive: +In the above schema only admins will see a non-empty ``author`` link when +running ``select BlogPost { author }``. Why? Because only admins can see +``User`` objects at all: ``admin_only`` policy is the only one defined on +the ``User`` type! -.. note:: +This means that instead of making ``BlogPost`` visible to its author, all +non-admin authors won't be able to see their own posts. The above issue can be +remedied by making the current user able to see their own ``User`` record. - Starting with |EdgeDB| 3.0, access policy restrictions will **not** apply to - any access policy expression. This means that when reasoning about access - policies it is no longer necessary to take other policies into account. - Instead, all data is visible for the purpose of *defining* an access - policy. - This change is being made to simplify reasoning about access policies and - to allow certain patterns to be express efficiently. Since those who have - access to modifying the schema can remove unwanted access policies, no - additional security is provided by applying access policies to each - other's expressions. +Interaction between policies +============================ - It is possible (and recommended) to enable this :ref:`future - ` behavior in |EdgeDB| 2.6 and later by adding the - following to the schema: ``using future nonrecursive_access_policies;`` +Policy expressions themselves do not take other policies into account +(since |EdgeDB| 3). This makes it easier to reason about policies. Custom error messages -^^^^^^^^^^^^^^^^^^^^^ +===================== .. index:: access policy, errmessage, using -When you run a query that attempts a write and is restricted by an access -policy, you will get a generic error message. +When an ``insert`` or ``update write`` violates an access policy, Gel will +raise a generic ``AccessPolicyError``: .. code-block:: - gel error: AccessPolicyError: access policy violation on insert of - + gel error: AccessPolicyError: access policy violation + on insert of .. note:: @@ -458,9 +388,8 @@ policy, you will get a generic error message. simply won't get the data that is being restricted. Other operations (``insert`` and ``update write``) will return an error message. -If you have multiple access policies, it can be useful to know which policy is -restricting your query and provide a friendly error message. You can do this -by adding a custom error message to your policy. +If multiple policies are in effect, it can be helpful to define a distinct +``errmessage`` in your policy: .. code-block:: sdl-diff @@ -499,134 +428,126 @@ will receive this error: gel error: AccessPolicyError: access policy violation on insert of default::User (Only admins may query Users) + Disabling policies -^^^^^^^^^^^^^^^^^^ +================== .. index:: apply_access_policies You may disable all access policies by setting the ``apply_access_policies`` :ref:`configuration parameter ` to ``false``. -You may also toggle access policies using the "Disable Access Policies" -checkbox in the "Config" dropdown in the Gel UI (accessible by running -the CLI command :gelcmd:`ui` from inside your project). This is the most -convenient way to temporarily disable access policies since it applies only to -your UI session. +You may also temporarily disable access policies using the Gel UI configuration +checkbox (or via :gelcmd:`ui`), which only applies to your UI session. +More examples +============= -Examples -^^^^^^^^ +Here are some additional patterns: -Blog posts are publicly visible if ``published`` but only writable by the -author. +1. Publicly visible blog posts, only writable by the author: -.. code-block:: sdl-diff - - global current_user: uuid; + .. code-block:: sdl-diff - type User { - required email: str { constraint exclusive; } - } + global current_user: uuid; - type BlogPost { - required title: str; - required author: User; - + required published: bool { default := false }; + type User { + required email: str { constraint exclusive; } + } - access policy author_has_full_access - allow all - using (global current_user ?= .author.id); - + access policy visible_if_published - + allow select - + using (.published); - } + type BlogPost { + required title: str; + required author: User; + + required published: bool { default := false }; -Blog posts are visible to friends but only modifiable by the author. + access policy author_has_full_access + allow all + using (global current_user ?= .author.id); + + access policy visible_if_published + + allow select + + using (.published); + } -.. code-block:: sdl-diff +2. Visible to friends, only modifiable by the author: - global current_user: uuid; + .. code-block:: sdl-diff - type User { - required email: str { constraint exclusive; } - + multi friends: User; - } + global current_user: uuid; - type BlogPost { - required title: str; - required author: User; + type User { + required email: str { constraint exclusive; } + + multi friends: User; + } - access policy author_has_full_access - allow all - using (global current_user ?= .author.id); - + access policy friends_can_read - + allow select - + using ((global current_user in .author.friends.id) ?? false); - } + type BlogPost { + required title: str; + required author: User; -Blog posts are publicly visible except to users that have been ``blocked`` by -the author. + access policy author_has_full_access + allow all + using (global current_user ?= .author.id); + + access policy friends_can_read + + allow select + + using ((global current_user in .author.friends.id) ?? false); + } -.. code-block:: sdl-diff +3. Publicly visible except to those blocked by the author: - type User { - required email: str { constraint exclusive; } - + multi blocked: User; - } + .. code-block:: sdl-diff - type BlogPost { - required title: str; - required author: User; + type User { + required email: str { constraint exclusive; } + + multi blocked: User; + } - access policy author_has_full_access - allow all - using (global current_user ?= .author.id); - + access policy anyone_can_read - + allow select; - + access policy exclude_blocked - + deny select - + using ((global current_user in .author.blocked.id) ?? false); - } + type BlogPost { + required title: str; + required author: User; + access policy author_has_full_access + allow all + using (global current_user ?= .author.id); + + access policy anyone_can_read + + allow select; + + access policy exclude_blocked + + deny select + + using ((global current_user in .author.blocked.id) ?? false); + } -"Disappearing" posts that become invisible after 24 hours. +4. "Disappearing" posts that become invisible after 24 hours: -.. code-block:: sdl-diff + .. code-block:: sdl-diff - type User { - required email: str { constraint exclusive; } - } + type User { + required email: str { constraint exclusive; } + } - type BlogPost { - required title: str; - required author: User; - + required created_at: datetime { - + default := datetime_of_statement() # non-volatile - + } + type BlogPost { + required title: str; + required author: User; + + required created_at: datetime { + + default := datetime_of_statement() # non-volatile + + } - access policy author_has_full_access - allow all - using (global current_user ?= .author.id); - + access policy hide_after_24hrs - + allow select - + using (datetime_of_statement() - .created_at < '24 hours'); - } + access policy author_has_full_access + allow all + using (global current_user ?= .author.id); + + access policy hide_after_24hrs + + allow select + + using ( + + datetime_of_statement() - .created_at < '24 hours' + + ); + } Super constraints -***************** - -Access policies support arbitrary EdgeQL and can be used to define "super -constraints". Policies on ``insert`` and ``update write`` can -be thought of as post-write "validity checks"; if the check fails, the write -will be rolled back. - -.. note:: +================= - Due to an underlying Postgres limitation, :ref:`constraints on object types - ` can only reference properties, not - links. +Access policies can act like "super constraints." For instance, a policy on +``insert`` or ``update write`` can do a post-write validity check, rejecting +the operation if a certain condition is not met. -Here's a policy that limits the number of blog posts a ``User`` can post. +E.g. here's a policy that limits the number of blog posts a +``User`` can post: .. code-block:: sdl-diff @@ -647,9 +568,236 @@ Here's a policy that limits the number of blog posts a ``User`` can post. + using (count(.author.posts) > 500); } -.. list-table:: - :class: seealso +.. _ref_eql_sdl_access_policies: +.. _ref_eql_sdl_access_policies_syntax: + +Declaring access policies +========================= + +This section describes the syntax to declare access policies in your schema. + +Syntax +------ + +.. sdl:synopsis:: + + access policy + [ when () ] + { allow | deny } [, ... ] + [ using () ] + [ "{" + [ errmessage := value ; ] + [ ] + "}" ] ; + + # where is one of + all + select + insert + delete + update [{ read | write }] + +Where: + +:eql:synopsis:`` + The name of the access policy. + +:eql:synopsis:`when ()` + Specifies which objects this policy applies to. The + :eql:synopsis:`` has to be a :eql:type:`bool` expression. + + When omitted, it is assumed that this policy applies to all objects of a + given type. + +:eql:synopsis:`allow` + Indicates that qualifying objects should allow access under this policy. + +:eql:synopsis:`deny` + Indicates that qualifying objects should *not* allow access under this + policy. This flavor supersedes any :eql:synopsis:`allow` policy and can + be used to selectively deny access to a subset of objects that otherwise + explicitly allows accessing them. + +:eql:synopsis:`all` + Apply the policy to all actions. It is exactly equivalent to listing + :eql:synopsis:`select`, :eql:synopsis:`insert`, :eql:synopsis:`delete`, + :eql:synopsis:`update` actions explicitly. + +:eql:synopsis:`select` + Apply the policy to all selection queries. Note that any object that + cannot be selected, cannot be modified either. This makes + :eql:synopsis:`select` the most basic "visibility" policy. + +:eql:synopsis:`insert` + Apply the policy to all inserted objects. If a newly inserted object would + violate this policy, an error is produced instead. + +:eql:synopsis:`delete` + Apply the policy to all objects about to be deleted. If an object does not + allow access under this kind of policy, it is not going to be considered + by any :eql:stmt:`delete` command. + + Note that any object that cannot be selected, cannot be modified either. + +:eql:synopsis:`update read` + Apply the policy to all objects selected for an update. If an object does + not allow access under this kind of policy, it is not visible cannot be + updated. + + Note that any object that cannot be selected, cannot be modified either. + +:eql:synopsis:`update write` + Apply the policy to all objects at the end of an update. If an updated + object violates this policy, an error is produced instead. + + Note that any object that cannot be selected, cannot be modified either. + +:eql:synopsis:`update` + This is just a shorthand for :eql:synopsis:`update read` and + :eql:synopsis:`update write`. + + Note that any object that cannot be selected, cannot be modified either. + +:eql:synopsis:`using ` + Specifies what the policy is with respect to a given eligible (based on + :eql:synopsis:`when` clause) object. The :eql:synopsis:`` has to be + a :eql:type:`bool` expression. The specific meaning of this value also + depends on whether this policy flavor is :eql:synopsis:`allow` or + :eql:synopsis:`deny`. + + The expression must be :ref:`Stable `. + + When omitted, it is assumed that this policy applies to all eligible + objects of a given type. + +:eql:synopsis:`set errmessage := ` + Set a custom error message of :eql:synopsis:`` that is displayed + when this access policy prevents a write action. + +:sdl:synopsis:`` + Set access policy :ref:`annotation ` + to a given *value*. + +Any sub-type extending a type inherits all of its access policies. +You can define additional access policies on sub-types. + + +.. _ref_eql_ddl_access_policies: + +DDL commands +============ + +This section describes the low-level DDL commands for creating, altering, and +dropping access policies. You typically don't need to use these commands +directly, but knowing about them is useful for reviewing migrations. + +Create access policy +-------------------- + +:eql-statement: + +Define a new object access policy on a type: + +.. eql:synopsis:: + + [ with [, ...] ] + { create | alter } type "{" + [ ... ] + create access policy + [ when () ; ] + { allow | deny } action [, action ... ; ] + [ using () ; ] + [ "{" + [ set errmessage := value ; ] + [ create annotation := value ; ] + "}" ] + "}" + + # where is one of + all + select + insert + delete + update [{ read | write }] + +See the meaning of each parameter in the `Declaring access policies`_ section. + +The following subcommands are allowed in the ``create access policy`` block: + +:eql:synopsis:`set errmessage := ` + Set a custom error message of :eql:synopsis:`` that is displayed + when this access policy prevents a write action. + +:eql:synopsis:`create annotation := ` + Set access policy annotation :eql:synopsis:`` to + :eql:synopsis:``. + + See :eql:stmt:`create annotation` for details. + + +Alter access policy +------------------- + +:eql-statement: + +Modify an existing access policy: + +.. eql:synopsis:: + + [ with [, ...] ] + alter type "{" + [ ... ] + alter access policy "{" + [ when () ; ] + [ reset when ; ] + { allow | deny } [, ... ; ] + [ using () ; ] + [ set errmessage := value ; ] + [ reset expression ; ] + [ create annotation := ; ] + [ alter annotation := ; ] + [ drop annotation ; ] + "}" + "}" + +You can change the policy's condition, actions, or error message, or add/drop +annotations. + +The parameters describing the action policy are identical to the parameters +used by ``create action policy``. There are a handful of additional +subcommands that are allowed in the ``alter access policy`` block: + +:eql:synopsis:`reset when` + Clear the :eql:synopsis:`when ()` so that the policy applies to + all objects of a given type. This is equivalent to ``when (true)``. + +:eql:synopsis:`reset expression` + Clear the :eql:synopsis:`using ()` so that the policy always + passes. This is equivalent to ``using (true)``. + +:eql:synopsis:`alter annotation ;` + Alter access policy annotation :eql:synopsis:``. + See :eql:stmt:`alter annotation` for details. + +:eql:synopsis:`drop annotation ;` + Remove access policy annotation :eql:synopsis:``. + See :eql:stmt:`drop annotation` for details. + + +All the subcommands allowed in the ``create access policy`` block are also +valid subcommands for ``alter access policy`` block. + +Drop access policy +------------------ + +:eql-statement: + +Remove an existing policy: + +.. eql:synopsis:: - * - **See also** - * - :ref:`SDL > Access policies ` - * - :ref:`DDL > Access policies ` + [ with [, ...] ] + alter type "{" + [ ... ] + drop access policy ; + "}" diff --git a/docs/datamodel/functions.rst b/docs/datamodel/functions.rst index 58c6fbf6fda..7b9dcd4ec56 100644 --- a/docs/datamodel/functions.rst +++ b/docs/datamodel/functions.rst @@ -317,8 +317,6 @@ This section describes the low-level DDL commands for creating, altering, and dropping functions. You typically don't need to use these commands directly, but knowing about them is useful for reviewing migrations. - - Create function --------------- diff --git a/docs/datamodel/future.rst b/docs/datamodel/future.rst index 4128715577c..5ac676eb2b7 100644 --- a/docs/datamodel/future.rst +++ b/docs/datamodel/future.rst @@ -1,7 +1,7 @@ .. _ref_datamodel_future: =============== -Future Behavior +Future behavior =============== .. index:: future, nonrecursive_access_policies @@ -37,10 +37,22 @@ added to the schema by the developer in order to gain early access to it. At the moment there is only one ``future`` available: -- ``nonrecursive_access_policies``: makes access policies :ref:`non-recursive - ` and simplifies policy - interactions. +.. _ref_datamodel_access_policies_nonrecursive: +.. _nonrecursive: +- ``nonrecursive_access_policies``: makes access policies non-recursove: + + Starting with |EdgeDB| 3.0, access policy restrictions do **not** apply + to any access policy expression. This means that when reasoning about access + policies it is no longer necessary to take other policies into account. + Instead, all data is visible for the purpose of *defining* an access + policy. + + This change is being made to simplify reasoning about access policies and + to allow certain patterns to be express efficiently. Since those who have + access to modifying the schema can remove unwanted access policies, no + additional security is provided by applying access policies to each + other's expressions. .. list-table:: :class: seealso diff --git a/docs/datamodel/indexes.rst b/docs/datamodel/indexes.rst index b4ffe37e92d..18329cf5845 100644 --- a/docs/datamodel/indexes.rst +++ b/docs/datamodel/indexes.rst @@ -251,7 +251,7 @@ Create index Creates a new index for a given object type or link using *index-expr*. - Most parameters/options match those in - :ref:`SDL > Indexes `. + :ref:`Declaring indexes `. - Allowed subcommand: diff --git a/docs/reference/ddl/access_policies.rst b/docs/reference/ddl/access_policies.rst deleted file mode 100644 index 5f4f7aab3c7..00000000000 --- a/docs/reference/ddl/access_policies.rst +++ /dev/null @@ -1,225 +0,0 @@ -.. _ref_eql_ddl_access_policies: - -=============== -Access Policies -=============== - -This section describes the DDL commands pertaining to access policies. - -Create access policy -==================== - -:eql-statement: - -:ref:`Declare ` a new object access policy. - -.. eql:synopsis:: - - [ with [, ...] ] - { create | alter } type "{" - [ ... ] - create access policy - [ when () ; ] - { allow | deny } action [, action ... ; ] - [ using () ; ] - [ "{" - [ set errmessage := value ; ] - [ create annotation annotation-name := value ; ] - "}" ] - "}" - - # where is one of - all - select - insert - delete - update [{ read | write }] - - -Description ------------ - -The combination :eql:synopsis:`{create | alter} type ... create access policy` -defines a new access policy for a given object type. - -Parameters ----------- - -Most sub-commands and options of this command are identical to the -:ref:`SDL access policy declaration `. - -:eql:synopsis:`` - The name of the access policy. - -:eql:synopsis:`when ()` - Specifies which objects this policy applies to. The - :eql:synopsis:`` has to be a :eql:type:`bool` expression. - - When omitted, it is assumed that this policy applies to all objects of a - given type. - -:eql:synopsis:`allow` - Indicates that qualifying objects should allow access under this policy. - -:eql:synopsis:`deny` - Indicates that qualifying objects should *not* allow access under this - policy. This flavor supersedes any :eql:synopsis:`allow` policy and can - be used to selectively deny access to a subset of objects that otherwise - explicitly allows accessing them. - -:eql:synopsis:`all` - Apply the policy to all actions. It is exactly equivalent to listing - :eql:synopsis:`select`, :eql:synopsis:`insert`, :eql:synopsis:`delete`, - :eql:synopsis:`update` actions explicitly. - -:eql:synopsis:`select` - Apply the policy to all selection queries. Note that any object that - cannot be selected, cannot be modified either. This makes - :eql:synopsis:`select` the most basic "visibility" policy. - -:eql:synopsis:`insert` - Apply the policy to all inserted objects. If a newly inserted object would - violate this policy, an error is produced instead. - -:eql:synopsis:`delete` - Apply the policy to all objects about to be deleted. If an object does not - allow access under this kind of policy, it is not going to be considered - by any :eql:stmt:`delete` command. - - Note that any object that cannot be selected, cannot be modified either. - -:eql:synopsis:`update read` - Apply the policy to all objects selected for an update. If an object does - not allow access under this kind of policy, it is not visible cannot be - updated. - - Note that any object that cannot be selected, cannot be modified either. - -:eql:synopsis:`update write` - Apply the policy to all objects at the end of an update. If an updated - object violates this policy, an error is produced instead. - - Note that any object that cannot be selected, cannot be modified either. - -:eql:synopsis:`update` - This is just a shorthand for :eql:synopsis:`update read` and - :eql:synopsis:`update write`. - - Note that any object that cannot be selected, cannot be modified either. - -:eql:synopsis:`using ` - Specifies what the policy is with respect to a given eligible (based on - :eql:synopsis:`when` clause) object. The :eql:synopsis:`` has to be - a :eql:type:`bool` expression. The specific meaning of this value also - depends on whether this policy flavor is :eql:synopsis:`allow` or - :eql:synopsis:`deny`. - - When omitted, it is assumed that this policy applies to all eligible - objects of a given type. - -The following subcommands are allowed in the ``create access policy`` block: - -:eql:synopsis:`set errmessage := ` - Set a custom error message of :eql:synopsis:`` that is displayed - when this access policy prevents a write action. - -:eql:synopsis:`create annotation := ` - Set access policy annotation :eql:synopsis:`` to - :eql:synopsis:``. - - See :eql:stmt:`create annotation` for details. - -Alter access policy -==================== - -:eql-statement: - -:ref:`Declare ` a new object access policy. - -.. eql:synopsis:: - - [ with [, ...] ] - alter type "{" - [ ... ] - alter access policy "{" - [ when () ; ] - [ reset when ; ] - { allow | deny } [, ... ; ] - [ using () ; ] - [ set errmessage := value ; ] - [ reset expression ; ] - [ create annotation := ; ] - [ alter annotation := ; ] - [ drop annotation ; ] - "}" - "}" - - # where is one of - all - select - insert - delete - update [{ read | write }] - -Description ------------ - -The combination :eql:synopsis:`{create | alter} type ... create access policy` -defines a new access policy for a given object type. - -Parameters ----------- - -The parameters describing the action policy are identical to the parameters -used by ``create action policy``. There are a handful of additional -subcommands that are allowed in the ``create access policy`` block: - -:eql:synopsis:`reset when` - Clear the :eql:synopsis:`when ()` so that the policy applies to - all objects of a given type. This is equivalent to ``when (true)``. - -:eql:synopsis:`reset expression` - Clear the :eql:synopsis:`using ()` so that the policy always - passes. This is equivalent to ``using (true)``. - -:eql:synopsis:`alter annotation ;` - Alter access policy annotation :eql:synopsis:``. - See :eql:stmt:`alter annotation` for details. - -:eql:synopsis:`drop annotation ;` - Remove access policy annotation :eql:synopsis:``. - See :eql:stmt:`drop annotation` for details. - - -All the subcommands allowed in the ``create access policy`` block are also -valid subcommands for ``alter access policy`` block. - - -Drop access policy -================== - -:eql-statement: - -Remove an access policy from an object type. - -.. eql:synopsis:: - - [ with [, ...] ] - alter type "{" - [ ... ] - drop access policy ; - "}" - -Description ------------ - -The combination :eql:synopsis:`alter type ... drop access policy` -removes the specified access policy from a given object type. - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Access policies ` - * - :ref:`SDL > Access policies ` diff --git a/docs/reference/ddl/index.rst b/docs/reference/ddl/index.rst index f522805c315..2b85df2f61c 100644 --- a/docs/reference/ddl/index.rst +++ b/docs/reference/ddl/index.rst @@ -12,7 +12,6 @@ DDL properties aliases globals - access_policies mutation_rewrites future migrations diff --git a/docs/reference/sdl/access_policies.rst b/docs/reference/sdl/access_policies.rst deleted file mode 100644 index d99038d6777..00000000000 --- a/docs/reference/sdl/access_policies.rst +++ /dev/null @@ -1,165 +0,0 @@ -.. _ref_eql_sdl_access_policies: - -=============== -Access Policies -=============== - -This section describes the SDL declarations pertaining to access policies. - -Examples --------- - -Declare a schema where users can only see their own profiles: - -.. code-block:: sdl - - # Declare some global variables to store "current user" - # information. - global current_user_id: uuid; - global current_user := ( - select User filter .id = global current_user_id - ); - - type User { - required name: str; - } - - type Profile { - owner: User; - - # Only allow reading to the owner, but also - # ensure that a user cannot set the "owner" link - # to anything but themselves. - access policy owner_only - allow all using (.owner = global current_user); - } - -.. _ref_eql_sdl_access_policies_syntax: - -Syntax ------- - -Define a new access policy corresponding to the :ref:`more explicit DDL -commands `. - -.. sdl:synopsis:: - - # Access policy used inside a type declaration: - access policy - [ when () ] - { allow | deny } [, ... ] - [ using () ] - [ "{" - [ errmessage := value ; ] - [ ] - "}" ] ; - - # where is one of - all - select - insert - delete - update [{ read | write }] - -Description ------------ - -Access policies are used to implement object-level security and as such they -are defined on object types. In practice the access policies often work -together with :ref:`global variables `. - -Access policies are an opt-in feature, so once at least one access policy is -defined for a given type, all access not explicitly allowed by that policy -becomes forbidden. - -Any sub-type :ref:`extending ` a base type also -inherits all the access policies of the base type. - -The access policy declaration options are as follows: - -:eql:synopsis:`` - The name of the access policy. - -:eql:synopsis:`when ()` - Specifies which objects this policy applies to. The - :eql:synopsis:`` has to be a :eql:type:`bool` expression. - - When omitted, it is assumed that this policy applies to all objects of a - given type. - -:eql:synopsis:`allow` - Indicates that qualifying objects should allow access under this policy. - -:eql:synopsis:`deny` - Indicates that qualifying objects should *not* allow access under this - policy. This flavor supersedes any :eql:synopsis:`allow` policy and can - be used to selectively deny access to a subset of objects that otherwise - explicitly allows accessing them. - -:eql:synopsis:`all` - Apply the policy to all actions. It is exactly equivalent to listing - :eql:synopsis:`select`, :eql:synopsis:`insert`, :eql:synopsis:`delete`, - :eql:synopsis:`update` actions explicitly. - -:eql:synopsis:`select` - Apply the policy to all selection queries. Note that any object that - cannot be selected, cannot be modified either. This makes - :eql:synopsis:`select` the most basic "visibility" policy. - -:eql:synopsis:`insert` - Apply the policy to all inserted objects. If a newly inserted object would - violate this policy, an error is produced instead. - -:eql:synopsis:`delete` - Apply the policy to all objects about to be deleted. If an object does not - allow access under this kind of policy, it is not going to be considered - by any :eql:stmt:`delete` command. - - Note that any object that cannot be selected, cannot be modified either. - -:eql:synopsis:`update read` - Apply the policy to all objects selected for an update. If an object does - not allow access under this kind of policy, it is not visible cannot be - updated. - - Note that any object that cannot be selected, cannot be modified either. - -:eql:synopsis:`update write` - Apply the policy to all objects at the end of an update. If an updated - object violates this policy, an error is produced instead. - - Note that any object that cannot be selected, cannot be modified either. - -:eql:synopsis:`update` - This is just a shorthand for :eql:synopsis:`update read` and - :eql:synopsis:`update write`. - - Note that any object that cannot be selected, cannot be modified either. - -:eql:synopsis:`using ` - Specifies what the policy is with respect to a given eligible (based on - :eql:synopsis:`when` clause) object. The :eql:synopsis:`` has to be - a :eql:type:`bool` expression. The specific meaning of this value also - depends on whether this policy flavor is :eql:synopsis:`allow` or - :eql:synopsis:`deny`. - - The expression must be :ref:`Stable `. - - When omitted, it is assumed that this policy applies to all eligible - objects of a given type. - -:eql:synopsis:`set errmessage := ` - Set a custom error message of :eql:synopsis:`` that is displayed - when this access policy prevents a write action. - -:sdl:synopsis:`` - Set access policy :ref:`annotation ` - to a given *value*. - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Access policies ` - * - :ref:`DDL > Access policies ` diff --git a/docs/reference/sdl/index.rst b/docs/reference/sdl/index.rst index fdede59ee09..63062cf36ef 100644 --- a/docs/reference/sdl/index.rst +++ b/docs/reference/sdl/index.rst @@ -107,6 +107,5 @@ to the previous migration: properties aliases globals - access_policies mutation_rewrites future From 3597114b124b7c97fe71215e312612310436340d Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Sun, 16 Feb 2025 16:45:30 -0800 Subject: [PATCH 12/23] Fix up links. OK, I'm not trusting LLMs anymore. --- docs/datamodel/links.rst | 101 ++++++++++++++++++++++++++++++----- docs/datamodel/modules.rst | 18 ++----- docs/reference/sdl/index.rst | 2 + 3 files changed, 96 insertions(+), 25 deletions(-) diff --git a/docs/datamodel/links.rst b/docs/datamodel/links.rst index d620935914a..253bb454b6d 100644 --- a/docs/datamodel/links.rst +++ b/docs/datamodel/links.rst @@ -4,17 +4,18 @@ Links ===== -Links define a relationship between two :ref:`object types ` in Gel. +Links define a relationship between two +:ref:`object types ` in Gel. Links in |Gel| are incredibly powerful and flexible. They can be used to model relationships of any cardinality, can be traversed in both directions, -can be polymorphic, and can have constraints, and many other things. +can be polymorphic, can have constraints, and many other things. -Defining links -============== +Links are directional +===================== -Links are *directional*; they have a **source** (the type on which they are +Links are *directional*: they have a **source** (the type on which they are declared) and a **target** (the type they point to). E.g. the following schema defines a link from ``Person`` to ``Person`` and @@ -786,13 +787,89 @@ Syntax ... "}" ] -There are several forms of link declaration: - -- The *concrete link form* (inside a type) that points to an object type. -- The *computed link form* (inside a type) that provides a link via an - EdgeQL expression. -- The *abstract link form*, which can be declared at the module level - and extended in other types. +There are several forms of link declaration, as shown in the syntax synopsis +above: + +- the first form is the canonical definition form; +- the second form is used for defining a + :ref:`computed link `; +- and the last form is used to define an abstract link. + +The following options are available: + +:eql:synopsis:`overloaded` + If specified, indicates that the link is inherited and that some + feature of it may be altered in the current object type. It is an + error to declare a link as *overloaded* if it is not inherited. + +:eql:synopsis:`required` + If specified, the link is considered *required* for the parent + object type. It is an error for an object to have a required + link resolve to an empty value. Child links **always** inherit + the *required* attribute, i.e it is not possible to make a + required link non-required by extending it. + +:eql:synopsis:`optional` + This is the default qualifier assumed when no qualifier is + specified, but it can also be specified explicitly. The link is + considered *optional* for the parent object type, i.e. it is + possible for the link to resolve to an empty value. + +:eql:synopsis:`multi` + Specifies that there may be more than one instance of this link + in an object, in other words, ``Object.link`` may resolve to a set + of a size greater than one. + +:eql:synopsis:`single` + Specifies that there may be at most *one* instance of this link + in an object, in other words, ``Object.link`` may resolve to a set + of a size not greater than one. ``single`` is assumed if nether + ``multi`` nor ``single`` qualifier is specified. + +:eql:synopsis:`extending [, ...]` + Optional clause specifying the *parents* of the new link item. + + Use of ``extending`` creates a persistent schema relationship + between the new link and its parents. Schema modifications + to the parent(s) propagate to the child. + + If the same *property* name exists in more than one parent, or + is explicitly defined in the new link and at least one parent, + then the data types of the property targets must be *compatible*. + If there is no conflict, the link properties are merged to form a + single property in the new link item. + +:eql:synopsis:`` + The type must be a valid :ref:`type expression ` + denoting an object type. + +The valid SDL sub-declarations are listed below: + +:eql:synopsis:`default := ` + Specifies the default value for the link as an EdgeQL expression. + The default value is used in an ``insert`` statement if an explicit + value for this link is not specified. + + The expression must be :ref:`Stable `. + +:eql:synopsis:`readonly := {true | false}` + If ``true``, the link is considered *read-only*. Modifications + of this link are prohibited once an object is created. All of the + derived links **must** preserve the original *read-only* value. + +:sdl:synopsis:`` + Set link :ref:`annotation ` + to a given *value*. + +:sdl:synopsis:`` + Define a concrete :ref:`property ` on the link. + +:sdl:synopsis:`` + Define a concrete :ref:`constraint ` on the link. + +:sdl:synopsis:`` + Define an :ref:`index ` for this abstract + link. Note that this index can only refer to link properties. .. _ref_eql_ddl_links: diff --git a/docs/datamodel/modules.rst b/docs/datamodel/modules.rst index 051b359cb6d..d47151019c2 100644 --- a/docs/datamodel/modules.rst +++ b/docs/datamodel/modules.rst @@ -218,19 +218,13 @@ Create a new module. .. eql:synopsis:: - create module [ if not exists ]; + create module [ :: ] + [ if not exists ]; There's a :ref:`corresponding SDL declaration ` for a module, although in SDL a module declaration is likely to also include that module's content. -.. versionadded:: 3.0 - - You may also create a nested module. - - .. eql:synopsis:: - - create module :: [ if not exists ]; Description ^^^^^^^^^^^ @@ -260,13 +254,11 @@ Create a new module: create module payments; -.. versionadded:: 3.0 +Create a new nested module: - Create a new nested module: - - .. code-block:: edgeql +.. code-block:: edgeql - create module payments::currencies; + create module payments::currencies; Drop module diff --git a/docs/reference/sdl/index.rst b/docs/reference/sdl/index.rst index 63062cf36ef..e5aad8a7555 100644 --- a/docs/reference/sdl/index.rst +++ b/docs/reference/sdl/index.rst @@ -22,6 +22,8 @@ keywords omitted. The typical SDL structure is to use :ref:`module blocks ` with the rest of the declarations being nested in their respective modules. +.. XXX: Move this to some other file. + .. versionadded:: 3.0 |EdgeDB| 3.0 introduces a new SDL syntax which diverges slightly from DDL. From 5653abc3cec36d079503cb696aab66e18524f1e2 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Sun, 16 Feb 2025 17:00:40 -0800 Subject: [PATCH 13/23] Fix up constraints --- docs/datamodel/constraints.rst | 69 +++++++++++++++++----------------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/docs/datamodel/constraints.rst b/docs/datamodel/constraints.rst index cea5b67b9dd..1677b27998f 100644 --- a/docs/datamodel/constraints.rst +++ b/docs/datamodel/constraints.rst @@ -29,6 +29,9 @@ Standard constraints Constraints on properties ========================= +Example: enforce all ``User`` objects to have a unique ``username`` +no longer than 25 characters: + .. code-block:: sdl type User { @@ -41,37 +44,18 @@ Constraints on properties }; } - -Custom constraints -================== - -The ``expression`` constraint is used to define custom constraint logic. Inside -custom constraints, the keyword ``__subject__`` can be used to reference the -*value* being constrained. - -.. code-block:: sdl - - type User { - required username: str { - # max length (as custom constraint) - constraint expression on (len(__subject__) <= 25); - }; - } - - .. _ref_datamodel_constraints_objects: Constraints on object types =========================== +.. index:: __subject__ + Constraints can be defined on object types. This is useful when the constraint logic must reference multiple links or properties. -.. important:: - - Inside an object type declaration, you can omit ``__subject__`` and simply - refer to properties with the :ref:`leading dot notation ` - (e.g. ``.``). +Example: enforce that the magnitude of ``ConstrainedVector`` objects +is no more than 5 .. code-block:: sdl @@ -80,28 +64,43 @@ constraint logic must reference multiple links or properties. required y: float64; constraint expression on ( - .x ^ 2 + .y ^ 2 <= 25 + (.x ^ 2 + .y ^ 2) ^ 0.5 <= 5 + # or, long form: `(__subject__.x + __subject__.y) ^ 0.5 <= 5` ); } -Note that the constraint expression are fairly restricted. Due -to how constraints are implemented, you can only reference ``single`` -(non-multi) properties and links defined on the object type: +The ``expression`` constraint is used here to define custom constraint logic. +Inside constraints, the keyword ``__subject__`` can be used to reference the +*value* being constrained. -.. code-block:: sdl +.. note:: + Note that inside an object type declaration, you can omit ``__subject__`` + and simply refer to properties with the + :ref:`leading dot notation ` (e.g. ``.property``). - # Not valid! - type User { - required username: str; - multi friends: User; +.. note:: - # ❌ constraints cannot contain paths with more than one hop - constraint expression on ('bob' in .friends.username); - } + Also note that the constraint expression are fairly restricted. Due + to how constraints are implemented, you can only reference ``single`` + (non-multi) properties and links defined on the object type: + + .. code-block:: sdl + + # Not valid! + type User { + required username: str; + multi friends: User; + + # ❌ constraints cannot contain paths with more than one hop + constraint expression on ('bob' in .friends.username); + } Abstract constraints ==================== +You can re-use constraints across multiple object types by declaring them as +abstract constraints. Example: + .. code-block:: sdl abstract constraint min_value(min: anytype) { From 967fa4d54e54f278532adca50bf729872bbb0f79 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Mon, 17 Feb 2025 11:28:43 -0800 Subject: [PATCH 14/23] Refactor aliases --- docs/datamodel/aliases.rst | 240 +++++++++++++++++++++++++-------- docs/datamodel/extensions.rst | 10 +- docs/reference/ddl/aliases.rst | 123 ----------------- docs/reference/ddl/index.rst | 1 - docs/reference/sdl/aliases.rst | 66 --------- docs/reference/sdl/index.rst | 1 - 6 files changed, 190 insertions(+), 251 deletions(-) delete mode 100644 docs/reference/ddl/aliases.rst delete mode 100644 docs/reference/sdl/aliases.rst diff --git a/docs/datamodel/aliases.rst b/docs/datamodel/aliases.rst index fc56a1dd911..587c9eb4c3f 100644 --- a/docs/datamodel/aliases.rst +++ b/docs/datamodel/aliases.rst @@ -6,85 +6,99 @@ Aliases .. index:: alias, virtual type -.. important:: +You can think of *aliases* as a way to give schema names to arbitrary EdgeQL +expressions. You can later refer to aliases in queries and in other aliases. - This section assumes a basic understanding of EdgeQL. If you aren't familiar - with it, feel free to skip this page for now. +Aliases are functionally equivalent to expression aliases defined in EdgeQL +statements in :ref:`with block `, but are available +to all queries using the schema and can be introspected. +Like computed properties, the aliased expression is evaluated on the fly +whenever the alias is referenced. -An **alias** is a *pointer* to a set of values. This set is defined with an -arbitrary EdgeQL expression. -Like computed properties, this expression is evaluated on the fly whenever the -alias is referenced in a query. Unlike computed properties, aliases are -defined independent of an object type; they are standalone expressions. -As such, aliases are fairly open ended. Some examples are: - -**Scalar alias** +Scalar alias +============ .. code-block:: sdl + # in your schema: alias digits := {0,1,2,3,4,5,6,7,8,9}; -**Object type alias** +Later, in some query: + +.. code-block:: edgeql + + select count(digits); + + +Object type alias +================= The name of a given object type (e.g. ``User``) is itself a pointer to the *set of all User objects*. After declaring the alias below, you can use ``User`` and -``UserAlias`` interchangably. +``UserAlias`` interchangeably: .. code-block:: sdl alias UserAlias := User; -**Object type alias with computeds** +Object type alias with computeds +================================ -Object type aliases can include a *shape* that declare additional computed -properties or links. +Object type aliases can include a *shape* that declares additional computed +properties or links: .. code-block:: sdl - type Post { - required title: str; - } + type Post { + required title: str; + } + + alias PostWithTrimmedTitle := Post { + trimmed_title := str_trim(.title) + } - alias PostAlias := Post { - trimmed_title := str_trim(.title) - } +Later, in some query: -In effect, this creates a *virtual subtype* of the base type, which can be -referenced in queries just like any other type. +.. code-block:: edgeql -**Other arbitrary expressions** + select PostWithTrimmedTitle { + trimmed_title + }; + +Arbitrary expressions +===================== Aliases can correspond to any arbitrary EdgeQL expression, including entire queries. .. code-block:: sdl - # Tuple alias - alias Color := ("Purple", 128, 0, 128); - - # Named tuple alias - alias GameInfo := ( - name := "Li Europan Lingues", - country := "Iceland", - date_published := 2023, - creators := ( - (name := "Bob Bobson", age := 20), - (name := "Trina Trinadóttir", age := 25), - ), - ); - - type BlogPost { - required title: str; - required is_published: bool; - } - - # Query alias - alias PublishedPosts := ( - select BlogPost - filter .is_published = true - ); + # Tuple alias + alias Color := ("Purple", 128, 0, 128); + + # Named tuple alias + alias GameInfo := ( + name := "Li Europan Lingues", + country := "Iceland", + date_published := 2023, + creators := ( + (name := "Bob Bobson", age := 20), + (name := "Trina Trinadóttir", age := 25), + ), + ); + + type BlogPost { + required title: str; + required is_published: bool; + } + + # Query alias + alias PublishedPosts := ( + select BlogPost + filter .is_published = true + ); .. note:: @@ -92,11 +106,127 @@ queries. `. +.. _ref_eql_sdl_aliases: +.. _ref_eql_sdl_aliases_syntax: + +Defining aliases +================ + +Syntax +------ + +Define a new alias corresponding to the :ref:`more explicit DDL +commands `. + +.. sdl:synopsis:: + + alias := ; + + alias "{" + using ; + [ ] + "}" ; + +Where: + +:eql:synopsis:`` + The name (optionally module-qualified) of an alias to be created. + +:eql:synopsis:`` + The aliased expression. Must be a :ref:`Stable ` + EdgeQL expression. + +The valid SDL sub-declarations are listed below: + +:sdl:synopsis:`` + Set alias :ref:`annotation ` + to a given *value*. + + +.. _ref_eql_ddl_aliases: + +DDL commands +============ + +This section describes the low-level DDL commands for creating and +dropping aliases. You typically don't need to use these commands +directly, but knowing about them is useful for reviewing migrations. + +Create alias +------------ + +:eql-statement: +:eql-haswith: + +Define a new alias in the schema. + +.. eql:synopsis:: + + [ with [, ...] ] + create alias := ; + + [ with [, ...] ] + create alias "{" + using ; + [ create annotation := ; ... ] + "}" ; + + # where is: + + [ := ] module + +Parameters +^^^^^^^^^^ + +Most sub-commands and options of this command are identical to the +:ref:`SDL alias declaration `, with some +additional features listed below: + +:eql:synopsis:`[ := ] module ` + An optional list of module alias declarations to be used in the + alias definition. + +:eql:synopsis:`create annotation := ;` + An optional list of annotation values for the alias. + See :eql:stmt:`create annotation` for details. + +Example +^^^^^^^ + +Create a new alias: + +.. code-block:: edgeql + + create alias Superusers := ( + select User filter User.groups.name = 'Superusers' + ); + + +Drop alias +---------- + +:eql-statement: +:eql-haswith: + +Remove an alias from the schema. + +.. eql:synopsis:: + + [ with [, ...] ] + drop alias ; + +Parameters +^^^^^^^^^^ + +*alias-name* + The name (optionally qualified with a module name) of an existing + expression alias. + +Example +^^^^^^^ + +Remove an alias: -.. list-table:: - :class: seealso +.. code-block:: edgeql - * - **See also** - * - :ref:`SDL > Aliases ` - * - :ref:`DDL > Aliases ` - * - :ref:`Cheatsheets > Aliases ` + drop alias SuperUsers; diff --git a/docs/datamodel/extensions.rst b/docs/datamodel/extensions.rst index d5585b6a0c6..1d6a1f5b308 100644 --- a/docs/datamodel/extensions.rst +++ b/docs/datamodel/extensions.rst @@ -60,7 +60,7 @@ List installed extensions: .. code-block:: bash - $ gel extension list -I my_instance + $ gel extension list ┌─────────┬─────────┐ │ Name │ Version │ └─────────┴─────────┘ @@ -69,7 +69,7 @@ List available extensions: .. code-block:: bash - $ gel extension list-available -I my_instance + $ gel extension list-available ┌─────────┬───────────────┐ │ Name │ Version │ │ postgis │ 3.4.3+6b82d77 │ @@ -79,7 +79,7 @@ Install the ``postgis`` extension: .. code-block:: bash - $ gel extension install -I my_instance -E postgis + $ gel extension install -E postgis Found extension package: postgis version 3.4.3+6b82d77 00:00:03 [====================] 22.49 MiB/22.49 MiB Extension 'postgis' installed successfully. @@ -88,7 +88,7 @@ Check that extension is installed: .. code-block:: bash - $ gel extension list -I my_instance + $ gel extension list ┌─────────┬───────────────┐ │ Name │ Version │ │ postgis │ 3.4.3+6b82d77 │ @@ -98,7 +98,7 @@ After installing extensions, make sure to restart your instance: .. code-block:: bash - $ gel instance restart -I my_instance + $ gel instance restart Standalone extensions can now be declared in the schema, same as built-in extensions: diff --git a/docs/reference/ddl/aliases.rst b/docs/reference/ddl/aliases.rst deleted file mode 100644 index 60404397836..00000000000 --- a/docs/reference/ddl/aliases.rst +++ /dev/null @@ -1,123 +0,0 @@ -.. _ref_eql_ddl_aliases: - -======= -Aliases -======= - -This section describes the DDL commands pertaining to -:ref:`expression aliases `. - - -Create alias -============ - -:eql-statement: -:eql-haswith: - -:ref:`Define ` a new expression alias in the schema. - -.. eql:synopsis:: - - [ with [, ...] ] - create alias := ; - - [ with [, ...] ] - create alias "{" - using ; - [ create annotation := ; ... ] - "}" ; - - # where is: - - [ := ] module - - -Description ------------ - -The command ``create alias`` defines a new expression alias in the schema. -The schema-level expression aliases are functionally equivalent -to expression aliases defined in a statement :ref:`with block -`, but are available to all queries using the schema -and can be introspected. - -If *name* is qualified with a module name, then the alias is created -in that module, otherwise it is created in the current module. -The alias name must be distinct from that of any existing schema item -in the module. - - -Parameters ----------- - -Most sub-commands and options of this command are identical to the -:ref:`SDL alias declaration `, with some -additional features listed below: - -:eql:synopsis:`[ := ] module ` - An optional list of module alias declarations to be used in the - alias definition. - -:eql:synopsis:`create annotation := ;` - An optional list of annotation values for the alias. - See :eql:stmt:`create annotation` for details. - - -Example -------- - -Create a new alias: - -.. code-block:: edgeql - - create alias Superusers := ( - select User filter User.groups.name = 'Superusers' - ); - - -Drop alias -========== - -:eql-statement: -:eql-haswith: - - -Remove an expression alias from the schema. - -.. eql:synopsis:: - - [ with [, ...] ] - drop alias ; - - -Description ------------ - -The command ``drop alias`` removes an expression alias from the schema. - - -Parameters ----------- - -*alias-name* - The name (optionally qualified with a module name) of an existing - expression alias. - - -Example -------- - -Remove an alias: - -.. code-block:: edgeql - - drop alias SuperUsers; - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Aliases ` - * - :ref:`SDL > Aliases ` - * - :ref:`Cheatsheets > Aliases ` diff --git a/docs/reference/ddl/index.rst b/docs/reference/ddl/index.rst index 2b85df2f61c..c7b742c1393 100644 --- a/docs/reference/ddl/index.rst +++ b/docs/reference/ddl/index.rst @@ -10,7 +10,6 @@ DDL objects scalars properties - aliases globals mutation_rewrites future diff --git a/docs/reference/sdl/aliases.rst b/docs/reference/sdl/aliases.rst deleted file mode 100644 index e0520f98d9c..00000000000 --- a/docs/reference/sdl/aliases.rst +++ /dev/null @@ -1,66 +0,0 @@ -.. _ref_eql_sdl_aliases: - -================== -Expression Aliases -================== - -This section describes the SDL declarations pertaining to -:ref:`expression aliases `. - -Example -------- - -Declare a "UserAlias" that provides additional information for a "User" -via a :ref:`computed link ` "friend_of": - -.. code-block:: sdl - - alias UserAlias := User { - # declare a computed link - friend_of := User.`. - -.. sdl:synopsis:: - - alias := ; - - alias "{" - using ; - [ ] - "}" ; - - -Description ------------ - -This declaration defines a new alias with the following options: - -:eql:synopsis:`` - The name (optionally module-qualified) of an alias to be created. - -:eql:synopsis:`` - The aliased expression. Must be a :ref:`Stable ` - EdgeQL expression. - -The valid SDL sub-declarations are listed below: - -:sdl:synopsis:`` - Set alias :ref:`annotation ` - to a given *value*. - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Aliases ` - * - :ref:`DDL > Aliases ` - * - :ref:`Cheatsheets > Aliases ` diff --git a/docs/reference/sdl/index.rst b/docs/reference/sdl/index.rst index e5aad8a7555..d36c7de67ea 100644 --- a/docs/reference/sdl/index.rst +++ b/docs/reference/sdl/index.rst @@ -107,7 +107,6 @@ to the previous migration: objects scalars properties - aliases globals mutation_rewrites future From dc15c45128271fe471440f42e21a82ec7e7d3c56 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Tue, 18 Feb 2025 17:28:20 -0800 Subject: [PATCH 15/23] Merge mutation rewrites --- docs/datamodel/mutation_rewrites.rst | 524 +++++++++++++++-------- docs/reference/ddl/index.rst | 1 - docs/reference/ddl/mutation_rewrites.rst | 145 ------- docs/reference/sdl/index.rst | 1 - docs/reference/sdl/mutation_rewrites.rst | 64 --- 5 files changed, 346 insertions(+), 389 deletions(-) delete mode 100644 docs/reference/ddl/mutation_rewrites.rst delete mode 100644 docs/reference/sdl/mutation_rewrites.rst diff --git a/docs/datamodel/mutation_rewrites.rst b/docs/datamodel/mutation_rewrites.rst index b0acd581262..b014fd956fa 100644 --- a/docs/datamodel/mutation_rewrites.rst +++ b/docs/datamodel/mutation_rewrites.rst @@ -7,8 +7,6 @@ Mutation rewrites .. index:: rewrite, insert, update, using, __subject__, __specified__, __old__, modify, modification -.. edb:youtube-embed:: ImgMfb_jCJQ?end=41 - Mutation rewrites allow you to intercept database mutations (i.e., :ref:`inserts ` and/or :ref:`updates `) and set the value of a property or link to the result of an expression you define. They @@ -18,113 +16,116 @@ Mutation rewrites are complementary to :ref:`triggers `. While triggers are unable to modify the triggering object, mutation rewrites are built for that purpose. +Example: last modified +====================== + Here's an example of a mutation rewrite that updates a property of a ``Post`` type to reflect the time of the most recent modification: .. code-block:: sdl - type Post { - required title: str; - required body: str; - modified: datetime { - rewrite insert, update using (datetime_of_statement()) - } - } - + type Post { + required title: str; + required body: str; + modified: datetime { + rewrite insert, update using (datetime_of_statement()) + } + } Every time a ``Post`` is updated, the mutation rewrite will be triggered, updating the ``modified`` property: .. code-block:: edgeql-repl - db> insert Post { - ... title := 'One wierd trick to fix all your spelling errors' - ... }; - {default::Post {id: 19e024dc-d3b5-11ed-968c-37f5d0159e5f}} - db> select Post {title, modified}; - { - default::Post { - title: 'One wierd trick to fix all your spelling errors', - modified: '2023-04-05T13:23:49.488335Z', - }, - } - db> update Post - ... filter .id = '19e024dc-d3b5-11ed-968c-37f5d0159e5f' - ... set {title := 'One weird trick to fix all your spelling errors'}; - {default::Post {id: 19e024dc-d3b5-11ed-968c-37f5d0159e5f}} - db> select Post {title, modified}; - { - default::Post { - title: 'One weird trick to fix all your spelling errors', - modified: '2023-04-05T13:25:04.119641Z', - }, - } + db> insert Post { + ... title := 'One wierd trick to fix all your spelling errors' + ... }; + {default::Post {id: 19e024dc-d3b5-11ed-968c-37f5d0159e5f}} + db> select Post {title, modified}; + { + default::Post { + title: 'One wierd trick to fix all your spelling errors', + modified: '2023-04-05T13:23:49.488335Z', + }, + } + db> update Post + ... filter .id = '19e024dc-d3b5-11ed-968c-37f5d0159e5f' + ... set {title := 'One weird trick to fix all your spelling errors'}; + {default::Post {id: 19e024dc-d3b5-11ed-968c-37f5d0159e5f}} + db> select Post {title, modified}; + { + default::Post { + title: 'One weird trick to fix all your spelling errors', + modified: '2023-04-05T13:25:04.119641Z', + }, + } In some cases, you will want different rewrites depending on the type of query. Here, we will add an ``insert`` rewrite and an ``update`` rewrite: .. code-block:: sdl - type Post { - required title: str; - required body: str; - created: datetime { - rewrite insert using (datetime_of_statement()) - } - modified: datetime { - rewrite update using (datetime_of_statement()) - } - } + type Post { + required title: str; + required body: str; + created: datetime { + rewrite insert using (datetime_of_statement()) + } + modified: datetime { + rewrite update using (datetime_of_statement()) + } + } With this schema, inserts will set the ``Post`` object's ``created`` property while updates will set the ``modified`` property: .. code-block:: edgeql-repl - db> insert Post { - ... title := 'One wierd trick to fix all your spelling errors' - ... }; - {default::Post {id: 19e024dc-d3b5-11ed-968c-37f5d0159e5f}} - db> select Post {title, created, modified}; - { - default::Post { - title: 'One wierd trick to fix all your spelling errors', - created: '2023-04-05T13:23:49.488335Z', - modified: {}, - }, - } - db> update Post - ... filter .id = '19e024dc-d3b5-11ed-968c-37f5d0159e5f' - ... set {title := 'One weird trick to fix all your spelling errors'}; - {default::Post {id: 19e024dc-d3b5-11ed-968c-37f5d0159e5f}} - db> select Post {title, created, modified}; - { - default::Post { - title: 'One weird trick to fix all your spelling errors', - created: '2023-04-05T13:23:49.488335Z', - modified: '2023-04-05T13:25:04.119641Z', - }, - } + db> insert Post { + ... title := 'One wierd trick to fix all your spelling errors' + ... }; + {default::Post {id: 19e024dc-d3b5-11ed-968c-37f5d0159e5f}} + db> select Post {title, created, modified}; + { + default::Post { + title: 'One wierd trick to fix all your spelling errors', + created: '2023-04-05T13:23:49.488335Z', + modified: {}, + }, + } + db> update Post + ... filter .id = '19e024dc-d3b5-11ed-968c-37f5d0159e5f' + ... set {title := 'One weird trick to fix all your spelling errors'}; + {default::Post {id: 19e024dc-d3b5-11ed-968c-37f5d0159e5f}} + db> select Post {title, created, modified}; + { + default::Post { + title: 'One weird trick to fix all your spelling errors', + created: '2023-04-05T13:23:49.488335Z', + modified: '2023-04-05T13:25:04.119641Z', + }, + } .. note:: - Each property may have a single ``insert`` and a single ``update`` mutation - rewrite rule, or they may have a single rule that covers both. + Each property may have a single ``insert`` and a single ``update`` mutation + rewrite rule, or they may have a single rule that covers both. + -Available variables -=================== +Mutation context +================ .. index:: rewrite, __subject__, __specified__, __old__ Inside the rewrite rule's expression, you have access to a few special values: * ``__subject__`` refers to the object type with the new property and link - values + values. * ``__specified__`` is a named tuple with a key for each property or link in the type and a boolean value indicating whether this value was explicitly set - in the mutation + in the mutation. * ``__old__`` refers to the object type with the previous property and link - values (available for update-only mutation rewrites) + values (available for update-only mutation rewrites). Here are some examples of the special values in use. Maybe your blog hosts articles about particularly controversial topics. You could use ``__subject__`` @@ -132,16 +133,16 @@ to enforce a "cooling off" period before publishing a blog post: .. code-block:: sdl - type Post { - required title: str; - required body: str; - publish_time: datetime { - rewrite insert, update using ( - __subject__.publish_time ?? datetime_of_statement() + - cal::to_relative_duration(days := 10) - ) - } - } + type Post { + required title: str; + required body: str; + publish_time: datetime { + rewrite insert, update using ( + __subject__.publish_time ?? datetime_of_statement() + + cal::to_relative_duration(days := 10) + ) + } + } Here we take the post's ``publish_time`` if set or the time the statement is executed and add 10 days to it. That should give our authors time to consider @@ -151,17 +152,17 @@ You can omit ``__subject__`` in many cases and achieve the same thing: .. code-block:: sdl-diff - type Post { - required title: str; - required body: str; - publish_time: datetime { - rewrite insert, update using ( - - __subject__.publish_time ?? datetime_of_statement() + - + .publish_time ?? datetime_of_statement() + - cal::to_relative_duration(days := 10) - ) - } - } + type Post { + required title: str; + required body: str; + publish_time: datetime { + rewrite insert, update using ( + - __subject__.publish_time ?? datetime_of_statement() + + + .publish_time ?? datetime_of_statement() + + cal::to_relative_duration(days := 10) + ) + } + } but only if the path prefix has not changed. In the following schema, for example, the ``__subject__`` in the rewrite rule is required, because in the @@ -170,25 +171,25 @@ context of the nested ``select`` query, the leading dot resolves from the .. code-block:: sdl - type Post { - required title: str; - required body: str; - author_email: str; - author_name: str { - rewrite insert, update using ( - (select User {name} filter .email = __subject__.author_email).name - ) - } - } - type User { - name: str; - email: str; - } + type Post { + required title: str; + required body: str; + author_email: str; + author_name: str { + rewrite insert, update using ( + (select User {name} filter .email = __subject__.author_email).name + ) + } + } + type User { + name: str; + email: str; + } .. note:: - Learn more about how this works in our documentation on :ref:`path - resolution `. + Learn more about how this works in our documentation on :ref:`path + resolution `. Using ``__specified__``, we can determine which fields were specified in the mutation. This would allow us to track when a single property was last modified @@ -196,17 +197,17 @@ as in the ``title_modified`` property in this schema: .. code-block:: sdl - type Post { - required title: str; - required body: str; - title_modified: datetime { - rewrite update using ( - datetime_of_statement() - if __specified__.title - else __old__.title_modified - ) - } - } + type Post { + required title: str; + required body: str; + title_modified: datetime { + rewrite update using ( + datetime_of_statement() + if __specified__.title + else __old__.title_modified + ) + } + } ``__specified__.title`` will be ``true`` if that value was set as part of the update, and this rewrite mutation rule will update ``title_modified`` to @@ -216,19 +217,19 @@ Another way you might use this is to set a default value but allow overriding: .. code-block:: sdl - type Post { - required title: str; - required body: str; - modified: datetime { - rewrite update using ( - datetime_of_statement() - if not __specified__.modified - else .modified - ) - } - } - -Here, we rewrite ``modified`` on updates to ``datetime_of_statment()`` unless + type Post { + required title: str; + required body: str; + modified: datetime { + rewrite update using ( + datetime_of_statement() + if not __specified__.modified + else .modified + ) + } + } + +Here, we rewrite ``modified`` on updates to ``datetime_of_statement()`` unless ``modified`` was set in the update. In that case, we allow the specified value to be set. This is different from a :ref:`default ` value because the rewrite happens on each @@ -250,17 +251,17 @@ comparing them: .. code-block:: sdl - type Post { - required title: str; - required body: str; - modified: datetime { - rewrite update using ( - datetime_of_statement() - if __subject__ {**} != __old__ {**} - else __old__.modified - ) - } - } + type Post { + required title: str; + required body: str; + modified: datetime { + rewrite update using ( + datetime_of_statement() + if __subject__ {**} != __old__ {**} + else __old__.modified + ) + } + } Lastly, if we want to add an ``author`` property that can be set for each write and keep a history of all the authors, we can do this with the help of @@ -268,61 +269,228 @@ and keep a history of all the authors, we can do this with the help of .. code-block:: sdl - type Post { - required title: str; - required body: str; - author: str; - all_authors: array { - default := >[]; - rewrite update using ( - __old__.all_authors - ++ [__subject__.author] - ); - } - } + type Post { + required title: str; + required body: str; + author: str; + all_authors: array { + default := >[]; + rewrite update using ( + __old__.all_authors + ++ [__subject__.author] + ); + } + } On insert, our ``all_authors`` property will get initialized to an empty array of strings. We will rewrite updates to concatenate that array with an array containing the new author value. -Mutation rewrite as cached computed -=================================== +Cached computed +=============== -..index:: cached computeds, caching computeds +.. index:: cached computeds, caching computeds Mutation rewrites can be used to effectively create a cached computed value as demonstrated with the ``byline`` property in this schema: .. code-block:: sdl - type Post { - required title: str; - required body: str; - author: str; - created: datetime { - rewrite insert using (datetime_of_statement()) - } - byline: str { - rewrite insert, update using ( - 'by ' ++ - __subject__.author ++ - ' on ' ++ - to_str(__subject__.created, 'Mon DD, YYYY') - ) - } - } + type Post { + required title: str; + required body: str; + author: str; + created: datetime { + rewrite insert using (datetime_of_statement()) + } + byline: str { + rewrite insert, update using ( + 'by ' ++ + __subject__.author ++ + ' on ' ++ + to_str(__subject__.created, 'Mon DD, YYYY') + ) + } + } The ``byline`` property will be updated on each insert or update, but the value will not need to be calculated at read time like a proper :ref:`computed property `. +.. _ref_eql_sdl_mutation_rewrites: +.. _ref_eql_sdl_mutation_rewrites_syntax: + +Declaring mutation rewrites +=========================== + +This section describes the syntax to declare mutation rewrites in your schema. + +Syntax +------ + +Define a new mutation rewrite corresponding to the :ref:`more explicit DDL +commands `. + +.. sdl:synopsis:: + + rewrite {insert | update} [, ...] + using + +Mutation rewrites must be defined inside a property or link block. + +Description +^^^^^^^^^^^ + +This declaration defines a new trigger with the following options: + +:eql:synopsis:`insert | update [, ...]` + The query type (or types) the rewrite runs on. Separate multiple values + with commas to invoke the same rewrite for multiple types of queries. + +:eql:synopsis:`` + The expression to be evaluated to produce the new value of the property. + + +.. _ref_eql_ddl_mutation_rewrites: + +DDL commands +============ + +This section describes the low-level DDL commands for creatin and +dropping mutation rewrites. You typically don't need to use these commands +directly, but knowing about them is useful for reviewing migrations. + + +Create rewrite +-------------- + +:eql-statement: + +Define a new mutation rewrite. + +When creating a new property or link: + +.. eql:synopsis:: + + {create | alter} type "{" + create { property | link } -> "{" + create rewrite {insert | update} [, ...] + using + "}" ; + "}" ; + +When altering an existing property or link: + +.. eql:synopsis:: + + {create | alter} type "{" + alter { property | link } "{" + create rewrite {insert | update} [, ...] + using + "}" ; + "}" ; + + +Description +^^^^^^^^^^^ + +The command ``create rewrite`` nested under ``create type`` or ``alter type`` +and then under ``create property/link`` or ``alter property/link`` defines a +new mutation rewrite for the given property or link on the given object. + + +Parameters +^^^^^^^^^^ + +:eql:synopsis:`` + The name (optionally module-qualified) of the type containing the rewrite. + +:eql:synopsis:`` + The name (optionally module-qualified) of the property or link being + rewritten. + +:eql:synopsis:`insert | update [, ...]` + The query type (or types) that are rewritten. Separate multiple values with + commas to invoke the same rewrite for multiple types of queries. + + +Examples +^^^^^^^^ + +Declare two mutation rewrites on new properties: one that sets a ``created`` +property when a new object is inserted and one that sets a ``modified`` +property on each update: + +.. code-block:: edgeql + + alter type User { + create property created -> datetime { + create rewrite insert using (datetime_of_statement()); + }; + create property modified -> datetime { + create rewrite update using (datetime_of_statement()); + }; + }; + + +Drop rewrite +------------ + +:eql-statement: + +Drop a mutation rewrite. + +.. eql:synopsis:: + + alter type "{" + alter property "{" + drop rewrite {insert | update} ; + "}" ; + "}" ; + + +Description +^^^^^^^^^^^ + +The command ``drop rewrite`` inside an ``alter type`` block and further inside +an ``alter property`` block removes the definition of an existing mutation +rewrite on the specified property or link of the specified type. + + +Parameters +^^^^^^^^^^ + +:eql:synopsis:`` + The name (optionally module-qualified) of the type containing the rewrite. + +:eql:synopsis:`` + The name (optionally module-qualified) of the property or link being + rewritten. + +:eql:synopsis:`insert | update [, ...]` + The query type (or types) that are rewritten. Separate multiple values with + commas to invoke the same rewrite for multiple types of queries. + + +Example +^^^^^^^ + +Remove the ``insert`` rewrite of the ``created`` property on the ``User`` type: + +.. code-block:: edgeql + + alter type User { + alter property created { + drop rewrite insert; + }; + }; + + .. list-table:: :class: seealso * - **See also** - * - :ref:`SDL > Mutation rewrites ` - * - :ref:`DDL > Mutation rewrites ` * - :ref:`Introspection > Mutation rewrites ` diff --git a/docs/reference/ddl/index.rst b/docs/reference/ddl/index.rst index c7b742c1393..48897c530a3 100644 --- a/docs/reference/ddl/index.rst +++ b/docs/reference/ddl/index.rst @@ -11,7 +11,6 @@ DDL scalars properties globals - mutation_rewrites future migrations diff --git a/docs/reference/ddl/mutation_rewrites.rst b/docs/reference/ddl/mutation_rewrites.rst deleted file mode 100644 index 4fbc0aad396..00000000000 --- a/docs/reference/ddl/mutation_rewrites.rst +++ /dev/null @@ -1,145 +0,0 @@ -.. _ref_eql_ddl_mutation_rewrites: - -================= -Mutation Rewrites -================= - -This section describes the DDL commands pertaining to -:ref:`mutation rewrites `. - - -Create rewrite -============== - -:eql-statement: - - -:ref:`Define ` a new mutation rewrite. - -When creating a new property or link: - -.. eql:synopsis:: - - {create | alter} type "{" - create { property | link } -> "{" - create rewrite {insert | update} [, ...] - using - "}" ; - "}" ; - -When altering an existing property or link: - -.. eql:synopsis:: - - {create | alter} type "{" - alter { property | link } "{" - create rewrite {insert | update} [, ...] - using - "}" ; - "}" ; - - -Description ------------ - -The command ``create rewrite`` nested under ``create type`` or ``alter type`` -and then under ``create property/link`` or ``alter property/link`` defines a -new mutation rewrite for the given property or link on the given object. - - -Parameters ----------- - -:eql:synopsis:`` - The name (optionally module-qualified) of the type containing the rewrite. - -:eql:synopsis:`` - The name (optionally module-qualified) of the property or link being - rewritten. - -:eql:synopsis:`insert | update [, ...]` - The query type (or types) that are rewritten. Separate multiple values with - commas to invoke the same rewrite for multiple types of queries. - - -Examples --------- - -Declare two mutation rewrites on new properties: one that sets a ``created`` -property when a new object is inserted and one that sets a ``modified`` -property on each update: - -.. code-block:: edgeql - - alter type User { - create property created -> datetime { - create rewrite insert using (datetime_of_statement()); - }; - create property modified -> datetime { - create rewrite update using (datetime_of_statement()); - }; - }; - - -Drop rewrite -============ - -:eql-statement: - - -Remove a mutation rewrite. - -.. eql:synopsis:: - - alter type "{" - alter property "{" - drop rewrite {insert | update} ; - "}" ; - "}" ; - - -Description ------------ - -The command ``drop rewrite`` inside an ``alter type`` block and further inside -an ``alter property`` block removes the definition of an existing mutation -rewrite on the specified property or link of the specified type. - - -Parameters ----------- - -:eql:synopsis:`` - The name (optionally module-qualified) of the type containing the rewrite. - -:eql:synopsis:`` - The name (optionally module-qualified) of the property or link being - rewritten. - -:eql:synopsis:`insert | update [, ...]` - The query type (or types) that are rewritten. Separate multiple values with - commas to invoke the same rewrite for multiple types of queries. - - -Example -------- - -Remove the ``insert`` rewrite of the ``created`` property on the ``User`` type: - -.. code-block:: edgeql - - alter type User { - alter property created { - drop rewrite insert; - }; - }; - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Mutation rewrites ` - * - :ref:`SDL > Mutation rewrites ` - * - :ref:`Introspection > Mutation rewrites - ` diff --git a/docs/reference/sdl/index.rst b/docs/reference/sdl/index.rst index d36c7de67ea..f7ac5d287a8 100644 --- a/docs/reference/sdl/index.rst +++ b/docs/reference/sdl/index.rst @@ -108,5 +108,4 @@ to the previous migration: scalars properties globals - mutation_rewrites future diff --git a/docs/reference/sdl/mutation_rewrites.rst b/docs/reference/sdl/mutation_rewrites.rst deleted file mode 100644 index 2a791130d77..00000000000 --- a/docs/reference/sdl/mutation_rewrites.rst +++ /dev/null @@ -1,64 +0,0 @@ -.. _ref_eql_sdl_mutation_rewrites: - -================= -Mutation rewrites -================= - -This section describes the SDL declarations pertaining to -:ref:`mutation rewrites `. - - -Example -------- - -Declare two mutation rewrites: one that sets a ``created`` property when a new -object is inserted and one that sets a ``modified`` property on each update: - -.. code-block:: sdl - - type User { - created: datetime { - rewrite insert using (datetime_of_statement()); - } - modified: datetime { - rewrite update using (datetime_of_statement()); - } - }; - -.. _ref_eql_sdl_mutation_rewrites_syntax: - -Syntax ------- - -Define a new mutation rewrite corresponding to the :ref:`more explicit DDL -commands `. - -.. sdl:synopsis:: - - rewrite {insert | update} [, ...] - using - -Mutation rewrites must be defined inside a property or link block. - - -Description ------------ - -This declaration defines a new trigger with the following options: - -:eql:synopsis:`insert | update [, ...]` - The query type (or types) the rewrite runs on. Separate multiple values - with commas to invoke the same rewrite for multiple types of queries. - -:eql:synopsis:`` - The expression to be evaluated to produce the new value of the property. - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Mutation rewrites ` - * - :ref:`DDL > Mutation rewrites ` - * - :ref:`Introspection > Mutation rewrites - ` From d3800a37255dfd3a52657df06e94828964329993 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Tue, 18 Feb 2025 21:02:23 -0800 Subject: [PATCH 16/23] Upgrade and merge the "Future behavior" section --- docs/datamodel/future.rst | 171 ++++++++++++++++++++++++-------- docs/edgeql/path_resolution.rst | 2 + docs/reference/ddl/future.rst | 81 --------------- docs/reference/ddl/index.rst | 1 - docs/reference/sdl/future.rst | 37 ------- docs/reference/sdl/index.rst | 1 - 6 files changed, 133 insertions(+), 160 deletions(-) delete mode 100644 docs/reference/ddl/future.rst delete mode 100644 docs/reference/sdl/future.rst diff --git a/docs/datamodel/future.rst b/docs/datamodel/future.rst index 5ac676eb2b7..344f4c35ed9 100644 --- a/docs/datamodel/future.rst +++ b/docs/datamodel/future.rst @@ -6,58 +6,149 @@ Future behavior .. index:: future, nonrecursive_access_policies -Any time that we add new functionality to |Gel| we strive to do it in the -least disruptive way possible. Deprecation warnings, documentation and guides -can help make these transitions smoother, but sometimes the changes are just -too big, especially if they affect already existing functionality. It is often -inconvenient dealing with these changes at the same time as upgrading to a new -major version of Gel. To help with this transition we introduce -:ref:`future ` specification. - -The purpose of this specification is to provide a way to try out and ease into -an upcoming feature before a major release. Sometimes enabling future behavior -is necessary to fix some current issues. Other times enabling future behavior -can simply provide a way to test out the feature before it gets released, to -make sure that the current project codebase is compatible and well-behaved. It -provides a longer timeframe for adopting a new feature and for catching bugs -that arise from the change in behavior. - -The ``future`` specification is intended to help with transitions between -major releases. Once a feature is released this specification is no longer -necessary to enable that feature and it will be removed from the schema during -the upgrade process. - -Once some behavior is available as a ``future`` all new :ref:`projects -` enable this behavior by default when initializing an -empty database. It is possible to explicitly disable the ``future`` feature by -removing it from the schema, but it is not recommended unless the feature is -causing some issues which cannot be fixed otherwise. Existing projects don't -change their behavior by default, the ``future`` specification needs to be -added to the schema by the developer in order to gain early access to it. - -At the moment there is only one ``future`` available: +This article explains what the ``using future ...;`` statement means in your +schema. + +Our goal is to make |Gel| the best database system in the world, which requires +us to keep evolving. Usually, we can add new functionality while preserving +backward compatibility, but on rare occasions we must implement changes that +require elaborate transitions. + +To handle these cases, we introduce *future* behavior, which lets you try out +upcoming features before a major release. Sometimes enabling a future is +necessary to fix current issues; other times it offers a safe and easy way to +ensure your codebase remains compatible. This approach provides more time to +adopt a new feature and identify any resulting bugs. + +Any time a behavior is available as a ``future,`` all new :ref:`projects +` enable it by default for empty databases. You can remove +a ``future`` from your schema if absolutely necessary, but doing so is +discouraged. Existing projects are unaffected by default, so you must manually +add the ``future`` specification to gain early access. + +At the moment there are three ``future`` flags available: + + +- ``simple_scoping`` + + Introduced in |Gel| 6.0, this flag simplifies the scoping rules for + path expressions. Read more about it and in great detail in + :ref:`ref_eql_path_resolution`. + +- ``warn_old_scoping`` + + Introduced in |Gel| 6.0, this flag will emit a warning when a query + is detected to depend on the old scoping rules. This is an intermediate + step towards enabling the ``simple_scoping`` flag in existing large + codebases. + + Read more about this flag in :ref:`ref_warn_old_scoping`. .. _ref_datamodel_access_policies_nonrecursive: .. _nonrecursive: -- ``nonrecursive_access_policies``: makes access policies non-recursove: +- ``nonrecursive_access_policies``: makes access policies non-recursive. + + This flag is no longer used becauae the behavior is enabled + by default since |EdgeDB| 4. The flag was helpful to ease transition + from EdgeDB 3.x to 4.x. - Starting with |EdgeDB| 3.0, access policy restrictions do **not** apply + Since |EdgeDB| 3.0, access policy restrictions do **not** apply to any access policy expression. This means that when reasoning about access policies it is no longer necessary to take other policies into account. Instead, all data is visible for the purpose of *defining* an access policy. - This change is being made to simplify reasoning about access policies and - to allow certain patterns to be express efficiently. Since those who have + This change was made to simplify reasoning about access policies and + to allow certain patterns to be expressed efficiently. Since those who have access to modifying the schema can remove unwanted access policies, no additional security is provided by applying access policies to each other's expressions. -.. list-table:: - :class: seealso - * - **See also** - * - :ref:`SDL > Future Behavior ` - * - :eql:stmt:`DDL > CREATE FUTURE ` - * - :eql:stmt:`DDL > DROP FUTURE ` +.. _ref_eql_sdl_future: + +Declaring future flags +====================== + +Syntax +------ + +Declare that the current schema enables a particular future behavior. + +.. sdl:synopsis:: + + using future ";" + +Description +^^^^^^^^^^^ + +Future behavior declaration must be outside any :ref:`module block +` since this behavior affects the entire database and not +a specific module. + +Example +^^^^^^^ + +.. code-block:: sdl-invalid + + using future simple_scoping; + + +.. _ref_eql_ddl_future: + +DDL commands +============ + +This section describes the low-level DDL commands for creating and +dropping future flags. You typically don't need to use these commands directly, +but knowing about them is useful for reviewing migrations. + +Create future +------------- + +:eql-statement: + +Enable a particular future behavior for the current schema. + +.. eql:synopsis:: + + create future ";" + + +The command ``create future`` enables the specified future behavior for +the current branch. + +Example +^^^^^^^ + +.. code-block:: edgeql + + create future simple_scoping; + + +Drop future +----------- + +:eql-statement: + +Disable a particular future behavior for the current schema. + +.. eql:synopsis:: + + drop future ";" + +Description +^^^^^^^^^^^ + +The command ``drop future`` disables a currently active future behavior for the +current branch. However, this is only possible for versions of |Gel| when the +behavior in question is not officially introduced. Once a particular behavior is +introduced as the standard behavior in a |Gel| release, it cannot be disabled. + +Example +^^^^^^^ + +.. code-block:: edgeql + + drop future warn_old_scoping; diff --git a/docs/edgeql/path_resolution.rst b/docs/edgeql/path_resolution.rst index 3ed1eefe99d..324cafbd097 100644 --- a/docs/edgeql/path_resolution.rst +++ b/docs/edgeql/path_resolution.rst @@ -132,6 +132,8 @@ configuration value ``simple_scoping``: - No - Yes +.. _ref_warn_old_scoping: + Warning on old scoping ---------------------- diff --git a/docs/reference/ddl/future.rst b/docs/reference/ddl/future.rst deleted file mode 100644 index 0e6cf34e1e1..00000000000 --- a/docs/reference/ddl/future.rst +++ /dev/null @@ -1,81 +0,0 @@ -.. _ref_eql_ddl_future: - -=============== -Future Behavior -=============== - -This section describes the DDL commands pertaining to -:ref:`future `. - - -Create future -============= - -:eql-statement: - -Enable a particular future behavior for the current schema. - -.. eql:synopsis:: - - create future ";" - -There's a :ref:`corresponding SDL declaration ` -for enabling a future behavior, which is the recommended way of doing this. - -Description ------------ - -The command ``create future`` enables the specified future behavior for -the current |branch|. - -Examples --------- - -Enable simpler non-recursive access policy behavior :ref:`non-recursive access -policy ` for the current schema: - -.. code-block:: edgeql - - create future nonrecursive_access_policies; - - -drop future -=========== - -:eql-statement: - - -Stop importing future behavior prior to the Gel version in which it appears. - -.. eql:synopsis:: - - drop future ";" - - -Description ------------ - -The command ``drop future`` disables a currently active future behavior for the -current |branch|. However, this is only possible -for versions of Gel when the behavior in question is not officially -introduced. Once a particular behavior is introduced as the standard behavior -in an Gel release, it cannot be disabled. Running this command will simply -denote that no special action is needed to enable it in this case. - - -Examples --------- - -Disable simpler non-recursive access policy behavior :ref:`non-recursive -access policy ` for the current -schema. This will make access policy restrictions apply to the expressions -defining other access policies: - -.. code-block:: edgeql - - drop future nonrecursive_access_policies; - - -Since |EdgeDB| 3.0 was released there is no more need for enabling non-recursive -access policy behavior anymore. So the above command will simply indicate that -the database no longer does anything non-standard. diff --git a/docs/reference/ddl/index.rst b/docs/reference/ddl/index.rst index 48897c530a3..bc8eb5af0f4 100644 --- a/docs/reference/ddl/index.rst +++ b/docs/reference/ddl/index.rst @@ -11,7 +11,6 @@ DDL scalars properties globals - future migrations :edb-alt-title: Data Definition Language diff --git a/docs/reference/sdl/future.rst b/docs/reference/sdl/future.rst deleted file mode 100644 index ad0673d2fbf..00000000000 --- a/docs/reference/sdl/future.rst +++ /dev/null @@ -1,37 +0,0 @@ -.. _ref_eql_sdl_future: - -=============== -Future Behavior -=============== - -This section describes the SDL commands pertaining to -:ref:`future `. - - -Syntax ------- - -Declare that the current schema enables a particular future behavior. - -.. sdl:synopsis:: - - using future ";" - - -Description ------------ - -Future behavior declaration must be outside any :ref:`module block -` since this behavior affects the entire database and not -a specific module. - - -Examples --------- - -Enable simpler non-recursive access policy behavior :ref:`non-recursive access -policy ` for the current schema: - -.. code-block:: sdl - - using extension nonrecursive_access_policies; diff --git a/docs/reference/sdl/index.rst b/docs/reference/sdl/index.rst index f7ac5d287a8..5badd62fb45 100644 --- a/docs/reference/sdl/index.rst +++ b/docs/reference/sdl/index.rst @@ -108,4 +108,3 @@ to the previous migration: scalars properties globals - future From 2fec4b416fb425e68402a9d7ef837ea767c453c7 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Tue, 18 Feb 2025 21:10:26 -0800 Subject: [PATCH 17/23] Kill 3.0 syntax from SDL/index (it's covered in what's new) --- docs/reference/sdl/index.rst | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/docs/reference/sdl/index.rst b/docs/reference/sdl/index.rst index 5badd62fb45..e9187b14b00 100644 --- a/docs/reference/sdl/index.rst +++ b/docs/reference/sdl/index.rst @@ -22,40 +22,6 @@ keywords omitted. The typical SDL structure is to use :ref:`module blocks ` with the rest of the declarations being nested in their respective modules. -.. XXX: Move this to some other file. - -.. versionadded:: 3.0 - - |EdgeDB| 3.0 introduces a new SDL syntax which diverges slightly from DDL. - The old SDL syntax is still fully supported, but the new syntax allows for - cleaner and less verbose expression of your schemas. - - * Pointers no longer require an arrow (``->``). You may instead use a colon - after the name of the link or property. - * The ``link`` and ``property`` keywords are now optional for non-computed - pointers when the target type is explicitly specified. - - That means that this type definition: - - .. code-block:: sdl - - type User { - required property email -> str; - } - - could be replaced with this equivalent one in |EdgeDB| 3+ / Gel: - - .. code-block:: sdl - - type User { - required email: str; - } - - When reading our documentation, the version selection dropdown will update - the syntax of most SDL examples to the preferred syntax for the version - selected. This is only true for versioned sections of the documentation. - - Since SDL is declarative in nature, the specific order of declarations of module blocks or individual items does not matter. From af6f9d8e75deb991f1e4647036ab5ef198976bb6 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Tue, 18 Feb 2025 21:39:15 -0800 Subject: [PATCH 18/23] Merge globals --- docs/datamodel/globals.rst | 458 +++++++++++++++++++++++++++------ docs/reference/ddl/globals.rst | 234 ----------------- docs/reference/ddl/index.rst | 1 - docs/reference/sdl/globals.rst | 149 ----------- docs/reference/sdl/index.rst | 1 - 5 files changed, 377 insertions(+), 466 deletions(-) delete mode 100644 docs/reference/ddl/globals.rst delete mode 100644 docs/reference/sdl/globals.rst diff --git a/docs/datamodel/globals.rst b/docs/datamodel/globals.rst index 60d9fd5af2a..c94fbed6233 100644 --- a/docs/datamodel/globals.rst +++ b/docs/datamodel/globals.rst @@ -6,32 +6,58 @@ Globals .. index:: global, required global -Schemas can contain scalar-typed *global variables*. +Schemas in Gel can contain typed *global variables*. These create a mechanism +for specifying session-level context that can be referenced in queries, +access policies, triggers, and elsewhere with the ``global`` keyword. + +Here's a very common example of a global variable representing the current +user ID: .. code-block:: sdl - global current_user_id: uuid; + global current_user_id: uuid; -These provide a useful mechanism for specifying session-level data that can be -referenced in queries with the ``global`` keyword. +.. tabs:: -.. code-block:: edgeql + .. code-tab:: edgeql - select User { - id, - posts: { title, content } - } - filter .id = global current_user_id; + select User { + id, + posts: { title, content } + } + filter .id = global current_user_id; + .. code-tab:: python + + # In a non-trivial example, `global current_user_id` would + # be used indirectly in an access policy or some other context. + await client.with_globals({'user_id': user_id}).qeury(''' + select User { + id, + posts: { title, content } + } + filter .id = global current_user_id; + ''') + + .. code-tab:: typescript + + // In a non-trivial example, `global current_user_id` would + // be used indirectly in an access policy or some other context. + await client.withGlobals({user_id}).qeury(''' + select User { + id, + posts: { title, content } + } + filter .id = global current_user_id; + ''') -As in the example above, this is particularly useful for representing the -notion of a session or "current user". Setting global variables -^^^^^^^^^^^^^^^^^^^^^^^^ +======================== -Global variables are set when initializing a client. The exact API depends on -which client library you're using. +Global variables are set at session level or when initializing a client. +The exact API depends on which client library you're using, but the general +behavior and principles are the same across all libraries. .. tabs:: @@ -40,26 +66,34 @@ which client library you're using. import createClient from 'gel'; const baseClient = createClient(); - // returns a new Client instance that stores the provided - // globals and sends them along with all future queries: + + // returns a new Client instance, that shares the underlying + // network connection with `baseClient` , but sends the configured + // globals along with all queries run through it: const clientWithGlobals = baseClient.withGlobals({ current_user_id: '2141a5b4-5634-4ccc-b835-437863534c51', }); - await clientWithGlobals.query(`select global current_user_id;`); + const result = await clientWithGlobals.query( + `select global current_user_id;` + ); .. code-tab:: python from gel import create_client - client = create_client().with_globals({ + base_client = create_client() + + # returns a new Client instance, that shares the underlying + # network connection with `base_client` , but sends the configured + # globals along with all queries run through it: + client = base_client.with_globals({ 'current_user_id': '580cc652-8ab8-4a20-8db9-4c79a4b1fd81' }) result = client.query(""" select global current_user_id; """) - print(result) .. code-tab:: go @@ -125,101 +159,363 @@ which client library you're using. Cardinality ------------ +=========== -Global variables can be marked ``required``; in this case, you must specify a -default value. +A global variable can be declared with one of two cardinalities: -.. code-block:: sdl +- ``single`` (the default): At most one value. +- ``multi``: A set of values. Only valid for computed global variables. + +In addition, a global can be marked ``required`` or ``optional`` (the default). +If marked ``required``, a default value must be provided. - required global one_string: str { - default := "Hi Mom!" - }; Computed globals ----------------- +================ .. index:: global, := -Global variables can also be computed. The value of computed globals are +Global variables can also be computed. The value of computed globals is dynamically computed when they are referenced in queries. .. code-block:: sdl - required global random_global := datetime_of_transaction(); + required global now := datetime_of_transaction(); The provided expression will be computed at the start of each query in which -the global is referenced. There's no need to provide an explicit type; the -type is inferred from the computed expression. +the global is referenced. There's no need to provide an explicit type; the type +is inferred from the computed expression. -Computed globals are not subject to the same constraints as non-computed ones; -specifically, they can be object-typed and have a ``multi`` cardinality. +Computed globals can also be object-typed and have ``multi`` cardinality. +For example: .. code-block:: sdl - global current_user_id: uuid; + global current_user_id: uuid; - # object-typed global - global current_user := ( - select User filter .id = global current_user_id - ); + # object-typed global + global current_user := ( + select User filter .id = global current_user_id + ); - # multi global - global current_user_friends := (global current_user).friends; + # multi global + global current_user_friends := (global current_user).friends; -Usage in schema ---------------- +Referencing globals +=================== -.. You may be wondering what purpose globals serve that can't. -.. For instance, the simple ``current_user_id`` example above could easily -.. be rewritten like so: +Unlike query parameters, globals can be referenced *inside your schema +declarations*: -.. .. code-block:: edgeql-diff +.. code-block:: sdl -.. select User { -.. id, -.. posts: { title, content } -.. } -.. - filter .id = global current_user_id -.. + filter .id = $current_user_id + type User { + name: str; + is_self := (.id = global current_user_id) + }; -.. There is a subtle difference between these two in terms of -.. developer experience. When using parameters, you must provide a -.. value for ``$current_user_id`` on each *query execution*. By constrast, -.. the value of ``global current_user_id`` is defined when you initialize -.. the client; you can use this "sessionified" client to execute -.. user-specific queries without needing to keep pass around the -.. value of the user's UUID. +This is particularly useful when declaring :ref:`access policies +`: -.. But that's a comparatively marginal difference. +.. code-block:: sdl -Unlike query parameters, globals can be referenced -*inside your schema declarations*. + type Person { + required name: str; -.. code-block:: sdl + access policy my_policy allow all + using (.id = global current_user_id); + } - type User { - name: str; - is_self := (.id = global current_user_id) - }; +Refer to :ref:`Access Policies ` for complete +documentation. -This is particularly useful when declaring :ref:`access policies -`. +.. _ref_eql_sdl_globals: +.. _ref_eql_sdl_globals_syntax: + +Declaring globals +================= + +This section describes the syntax to declare a global variable in your schema. + +Syntax +------ + +Define a new global variable in SDL, corresponding to the more explicit DDL +commands described later: + +.. sdl:synopsis:: + + # Global variable declaration: + [{required | optional}] [single] + global -> + [ "{" + [ default := ; ] + [ ] + ... + "}" ] + + # Computed global variable declaration: + [{required | optional}] [{single | multi}] + global := ; + + +Description +^^^^^^^^^^^ + +There are two different forms of ``global`` declarations, as shown in the +syntax synopsis above: + +1. A *settable* global (defined with ``-> ``) which can be changed using + a session-level :ref:`set ` command. + +2. A *computed* global (defined with ``:= ``), which cannot be + directly set but instead derives its value from the provided expression. + +The following options are available: + +:eql:synopsis:`required` + If specified, the global variable is considered *required*. It is an + error for this variable to have an empty value. If a global variable is + declared *required*, it must also declare a *default* value. + +:eql:synopsis:`optional` + The global variable is considered *optional*, i.e. it is possible for the + variable to have an empty value. (This is the default.) + +:eql:synopsis:`multi` + Specifies that the global variable may have a set of values. Only + *computed* global variables can have this qualifier. + +:eql:synopsis:`single` + Specifies that the global variable must have at most a *single* value. It + is assumed that a global variable is ``single`` if neither ``multi`` nor + ``single`` is specified. All non-computed global variables must be *single*. + +:eql:synopsis:`` + The name of the global variable. It can be fully-qualified with the module + name, or it is assumed to belong to the module in which it appears. + +:eql:synopsis:`` + The type must be a valid :ref:`type expression ` denoting a + non-abstract scalar or a container type. + +:eql:synopsis:` := ` + Defines a *computed* global variable. The provided expression must be a + :ref:`Stable ` EdgeQL expression. It can refer + to other global variables. The type of a *computed* global variable is + not limited to scalar and container types; it can also be an object type. + +The valid SDL sub-declarations are: + +:eql:synopsis:`default := ` + Specifies the default value for the global variable as an EdgeQL + expression. The default value is used in a session if the value was not + explicitly specified by the client, or was reset with the :ref:`reset + ` command. + +:sdl:synopsis:`` + Set global variable :ref:`annotation ` + to a given *value*. + + +Examples +-------- + +Declare a new global variable: .. code-block:: sdl - type Person { - required name: str; - access policy my_policy allow all using (.id = global current_user_id); - } + global current_user_id -> uuid; + global current_user := ( + select User filter .id = global current_user_id + ); -Refer to :ref:`Access Policies ` for complete -documentation. +Set the global variable to a specific value using :ref:`session-level commands +`: + +.. code-block:: edgeql + + set global current_user_id := + '00ea8eaa-02f9-11ed-a676-6bd11cc6c557'; + +Use the computed global variable that is based on the value that was just set: + +.. code-block:: edgeql + + select global current_user { name }; + +:ref:`Reset ` the global variable to +its default value: -.. list-table:: - :class: seealso +.. code-block:: edgeql + + reset global user_id; + + +.. _ref_eql_ddl_globals: + + +DDL commands +============ + +This section describes the low-level DDL commands for creating, altering, and +dropping globals. You typically don't need to use these commands directly, but +knowing about them is useful for reviewing migrations. + + +Create global +------------- + +:eql-statement: +:eql-haswith: + +Declare a new global variable using DDL. + +.. eql:synopsis:: + + [ with [, ...] ] + create [{required | optional}] [single] + global -> + [ "{" ; [...] "}" ] ; + + # Computed global variable form: + + [ with [, ...] ] + create [{required | optional}] [{single | multi}] + global := ; + + # where is one of + + set default := + create annotation := + +Description +^^^^^^^^^^^ + +As with SDL, there are two different forms of ``global`` declaration: + +- A global variable that can be :ref:`set ` + in a session. +- A *computed* global that is derived from an expression (and so cannot be + directly set in a session). + +The subcommands mirror those in SDL: + +:eql:synopsis:`set default := ` + Specifies the default value for the global variable as an EdgeQL + expression. The default value is used by the session if the value was not + explicitly specified or was reset with the :ref:`reset + ` command. + +:eql:synopsis:`create annotation := ` + Assign an annotation to the global variable. See :eql:stmt:`create annotation` + for details. + + +Examples +^^^^^^^^ + +Define a new global property ``current_user_id``: + +.. code-block:: edgeql + + create global current_user_id -> uuid; + +Define a new *computed* global property ``current_user`` based on the +previously defined ``current_user_id``: + +.. code-block:: edgeql + + create global current_user := ( + select User filter .id = global current_user_id + ); + + +Alter global +------------ + +:eql-statement: +:eql-haswith: + +Change the definition of a global variable. + +.. eql:synopsis:: + + [ with [, ...] ] + alter global + [ "{" ; [...] "}" ] ; + + # where is one of + + set default := + reset default + rename to + set required + set optional + reset optionalily + set single + set multi + reset cardinality + set type reset to default + using () + create annotation := + alter annotation := + drop annotation + +Description +^^^^^^^^^^^ + +The command :eql:synopsis:`alter global` changes the definition of a global +variable. It can modify default values, rename the global, or change other +attributes like optionality, cardinality, computed expressions, etc. + +Examples +^^^^^^^^ + +Set the ``description`` annotation of global variable ``current_user``: + +.. code-block:: edgeql + + alter global current_user + create annotation description := + 'Current User as specified by the global ID'; + +Make the ``current_user_id`` global variable ``required``: + +.. code-block:: edgeql + + alter global current_user_id { + set required; + # A required global variable MUST have a default value. + set default := '00ea8eaa-02f9-11ed-a676-6bd11cc6c557'; + } + + +Drop global +----------- + +:eql-statement: +:eql-haswith: + +Remove a global variable from the schema. + +.. eql:synopsis:: + + [ with [, ...] ] + drop global ; + +Description +^^^^^^^^^^^ + +The command :eql:synopsis:`drop global` removes the specified global variable +from the schema. + +Example +^^^^^^^ + +Remove the ``current_user`` global variable: + +.. code-block:: edgeql - * - **See also** - * - :ref:`SDL > Globals ` - * - :ref:`DDL > Globals ` + drop global current_user; diff --git a/docs/reference/ddl/globals.rst b/docs/reference/ddl/globals.rst deleted file mode 100644 index 1a3d1bff4a4..00000000000 --- a/docs/reference/ddl/globals.rst +++ /dev/null @@ -1,234 +0,0 @@ -.. _ref_eql_ddl_globals: - -======= -Globals -======= - -This section describes the DDL commands pertaining to global variables. - - -Create global -============= - -:eql-statement: -:eql-haswith: - -:ref:`Declare ` a new global variable. - -.. eql:synopsis:: - - [ with [, ...] ] - create [{required | optional}] [single] - global -> - [ "{" ; [...] "}" ] ; - - # Computed global variable form: - - [ with [, ...] ] - create [{required | optional}] [{single | multi}] - global := ; - - # where is one of - - set default := - create annotation := - -Description ------------ - -There two different forms of ``global`` declaration, as shown in the syntax -synopsis above. The first form is for defining a ``global`` variable that can -be :ref:`set ` in a session. The second -form is not directly set, but instead it is *computed* based on an expression, -potentially deriving its value from other global variables. - -Parameters ----------- - -Most sub-commands and options of this command are identical to the -:ref:`SDL global variable declaration `. The -following subcommands are allowed in the ``create global`` block: - -:eql:synopsis:`set default := ` - Specifies the default value for the global variable as an EdgeQL - expression. The default value is used by the session if the value was not - explicitly specified or by the :ref:`reset - ` command. - -:eql:synopsis:`create annotation := ` - Set global variable :eql:synopsis:`` to - :eql:synopsis:``. - - See :eql:stmt:`create annotation` for details. - -Examples --------- - -Define a new global property ``current_user_id``: - -.. code-block:: edgeql - - create global current_user_id -> uuid; - -Define a new *computed* global property ``current_user`` based on the -previously defined ``current_user_id``: - -.. code-block:: edgeql - - create global current_user := ( - select User filter .id = global current_user_id - ); - - -Alter global -============ - -:eql-statement: -:eql-haswith: - -Change the definition of a global variable. - -.. eql:synopsis:: - - [ with [, ...] ] - alter global - [ "{" ; [...] "}" ] ; - - # where is one of - - set default := - reset default - rename to - set required - set optional - reset optionalily - set single - set multi - reset cardinality - set type reset to default - using () - create annotation := - alter annotation := - drop annotation - -Description ------------ - -The command :eql:synopsis:`alter global` changes the definition of a global -variable. - -Parameters ----------- - -:eql:synopsis:`` - The name of the global variable to modify. - -The following subcommands are allowed in the ``alter global`` block: - -:eql:synopsis:`reset default` - Remove the default value from this global variable. - -:eql:synopsis:`rename to ` - Change the name of the global variable to :eql:synopsis:``. - -:eql:synopsis:`set required` - Make the global variable *required*. - -:eql:synopsis:`set optional` - Make the global variable no longer *required* (i.e. make it *optional*). - -:eql:synopsis:`reset optionalily` - Reset the optionality of the global variable to the default value - (``optional``). - -:eql:synopsis:`set single` - Change the maximum cardinality of the global variable to *one*. - -:eql:synopsis:`set multi` - Change the maximum cardinality of the global variable set to - *greater than one*. Only valid for computed global variables. - -:eql:synopsis:`reset cardinality` - Reset the maximum cardinality of the global variable to the default value - (``single``), or, if the property is computed, to the value inferred - from its expression. - -:eql:synopsis:`set type reset to default` - Change the type of the global variable to the specified - :eql:synopsis:``. The ``reset to default`` clause is mandatory - and it specifies that the variable will be reset to its default value - after this command. - -:eql:synopsis:`using ()` - Change the expression of a computed global variable. Only valid for - computed variables. - -:eql:synopsis:`alter annotation ;` - Alter global variable annotation :eql:synopsis:``. - See :eql:stmt:`alter annotation` for details. - -:eql:synopsis:`drop annotation ;` - Remove global variable :eql:synopsis:``. - See :eql:stmt:`drop annotation` for details. - -All the subcommands allowed in the ``create global`` block are also -valid subcommands for ``alter global`` block. - -Examples --------- - -Set the ``description`` annotation of global variable ``current_user``: - -.. code-block:: edgeql - - alter global current_user - create annotation description := - 'Current User as specified by the global ID'; - -Make the ``current_user_id`` global variable ``required``: - -.. code-block:: edgeql - - alter global current_user_id { - set required; - # A required global variable MUST have a default value. - set default := '00ea8eaa-02f9-11ed-a676-6bd11cc6c557'; - } - - -Drop global -=========== - -:eql-statement: -:eql-haswith: - -Remove a global variable from the schema. - -.. eql:synopsis:: - - [ with [, ...] ] - drop global ; - -Description ------------ - -The command :eql:synopsis:`drop global` removes the specified global variable -from the schema. - -Example -------- - -Remove the ``current_user`` global variable: - -.. code-block:: edgeql - - drop global current_user; - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Globals ` - * - :ref:`SDL > Globals ` - diff --git a/docs/reference/ddl/index.rst b/docs/reference/ddl/index.rst index bc8eb5af0f4..35110ffdff3 100644 --- a/docs/reference/ddl/index.rst +++ b/docs/reference/ddl/index.rst @@ -10,7 +10,6 @@ DDL objects scalars properties - globals migrations :edb-alt-title: Data Definition Language diff --git a/docs/reference/sdl/globals.rst b/docs/reference/sdl/globals.rst deleted file mode 100644 index ac246826a39..00000000000 --- a/docs/reference/sdl/globals.rst +++ /dev/null @@ -1,149 +0,0 @@ -.. _ref_eql_sdl_globals: - -======= -Globals -======= - -This section describes the SDL commands pertaining to global variables. - -Examples --------- - -Declare a new global variable: - -.. code-block:: sdl - - global current_user_id -> uuid; - global current_user := ( - select User filter .id = global current_user_id - ); - -Set the global variable to a specific value using :ref:`session-level commands -`: - -.. code-block:: edgeql - - set global current_user_id := - '00ea8eaa-02f9-11ed-a676-6bd11cc6c557'; - -Use the computed global variable that is based on the value that was just set: - -.. code-block:: edgeql - - select global current_user { name }; - -:ref:`Reset ` the global variable to -its default value: - -.. code-block:: edgeql - - reset global user_id; - - -.. _ref_eql_sdl_globals_syntax: - -Syntax ------- - -Define a new global variable corresponding to the :ref:`more explicit DDL -commands `. - -.. sdl:synopsis:: - - - # Global variable declaration: - [{required | optional}] [single] - global -> - [ "{" - [ default := ; ] - [ ] - ... - "}" ] - - # Computed global variable declaration: - [{required | optional}] [{single | multi}] - global := ; - - -Description ------------ - -There two different forms of ``global`` declaration, as shown in the syntax -synopsis above. The first form is for defining a ``global`` variable that can -be :ref:`set ` in a session. The second -form is not directly set, but instead it is *computed* based on an expression, -potentially deriving its value from other global variables. - -The following options are available: - -:eql:synopsis:`required` - If specified, the global variable is considered *required*. It is an - error for this variable to have an empty value. If a global variable is - declared *required*, it must also declare a *default* value. - -:eql:synopsis:`optional` - This is the default qualifier assumed when no qualifier is specified, but - it can also be specified explicitly. The global variable is considered - *optional*, i.e. it is possible for the variable to have an empty value. - -:eql:synopsis:`multi` - Specifies that the global variable may have a set of values. Only - *computed* global variables can have this qualifier. - -:eql:synopsis:`single` - Specifies that the global variable must have at most a *single* value. It - is assumed that a global variable is ``single`` if nether ``multi`` nor - ``single`` qualifier is specified. All non-computed global variables must - be *single*. - -:eql:synopsis:`` - Specifies the name of the global variable. The name has to be either - fully-qualified with the module name it belongs to or it will be assumed - to belong to the module in which it appears. - -:eql:synopsis:`` - The type must be a valid :ref:`type expression ` - denoting a non-abstract scalar or a container type. - -:eql:synopsis:` := ` - Defines a *computed* global variable. - - The provided expression must be a :ref:`Stable ` - EdgeQL expression. It can refer to other global variables. - - The type of a *computed* global variable is not limited to - scalar and container types, but also includes object types. So it is - possible to use that to define a global object variable based on an - another global scalar variable. - - For example: - - .. code-block:: sdl - - # Global scalar variable that can be set in a session: - global current_user_id -> uuid; - # Global computed object based on that: - global current_user := ( - select User filter .id = global current_user_id - ); - - -The valid SDL sub-declarations are listed below: - -:eql:synopsis:`default := ` - Specifies the default value for the global variable as an EdgeQL - expression. The default value is used by the session if the value was not - explicitly specified or by the client or was reset with the :ref:`reset - ` command. - -:sdl:synopsis:`` - Set global variable :ref:`annotation ` - to a given *value*. - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Globals ` - * - :ref:`DDL > Globals ` diff --git a/docs/reference/sdl/index.rst b/docs/reference/sdl/index.rst index e9187b14b00..d2467901eaa 100644 --- a/docs/reference/sdl/index.rst +++ b/docs/reference/sdl/index.rst @@ -73,4 +73,3 @@ to the previous migration: objects scalars properties - globals From f23a9d639ca13d2c05bb2a104f9b07ad2267e900 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Tue, 18 Feb 2025 22:48:50 -0800 Subject: [PATCH 19/23] Merge primitives/scalars --- docs/datamodel/constraints.rst | 4 +- docs/datamodel/future.rst | 4 +- docs/datamodel/primitives.rst | 416 +++++++++++++++++++++++++++------ docs/reference/ddl/index.rst | 1 - docs/reference/ddl/scalars.rst | 208 ----------------- docs/reference/sdl/index.rst | 1 - docs/reference/sdl/scalars.rst | 70 ------ docs/stdlib/scalar_table.rst | 63 ----- 8 files changed, 353 insertions(+), 414 deletions(-) delete mode 100644 docs/reference/ddl/scalars.rst delete mode 100644 docs/reference/sdl/scalars.rst delete mode 100644 docs/stdlib/scalar_table.rst diff --git a/docs/datamodel/constraints.rst b/docs/datamodel/constraints.rst index 1677b27998f..859d4349063 100644 --- a/docs/datamodel/constraints.rst +++ b/docs/datamodel/constraints.rst @@ -739,8 +739,8 @@ Description ^^^^^^^^^^^ The command ``create constraint`` defines a new concrete constraint. It can -only be used in the context of :eql:stmt:`create scalar type`, -:eql:stmt:`alter scalar type`, :eql:stmt:`create property`, +only be used in the context of :eql:stmt:`create scalar`, +:eql:stmt:`alter scalar`, :eql:stmt:`create property`, :eql:stmt:`alter property`, :eql:stmt:`create link`, or :eql:stmt:`alter link`. *name* must be a name (optionally module-qualified) of a previously defined diff --git a/docs/datamodel/future.rst b/docs/datamodel/future.rst index 344f4c35ed9..b48bf5c12a5 100644 --- a/docs/datamodel/future.rst +++ b/docs/datamodel/future.rst @@ -26,8 +26,10 @@ a ``future`` from your schema if absolutely necessary, but doing so is discouraged. Existing projects are unaffected by default, so you must manually add the ``future`` specification to gain early access. -At the moment there are three ``future`` flags available: +Flags +===== +At the moment there are three ``future`` flags available: - ``simple_scoping`` diff --git a/docs/datamodel/primitives.rst b/docs/datamodel/primitives.rst index 24b402c3adc..508325382e9 100644 --- a/docs/datamodel/primitives.rst +++ b/docs/datamodel/primitives.rst @@ -5,72 +5,102 @@ Primitives ========== |Gel| has a robust type system consisting of primitive and object types. -Below is a review of Gel's primitive types; later, these will be used to -declare *properties* on object types. - +types. Primitive types are used to declare *properties* on object types, +as query and function arguments, as as well as in other contexts. .. _ref_datamodel_scalars: -Scalar types -^^^^^^^^^^^^ +Built-in scalar types +===================== + +Gel comes with a range of built-in scalar types, such as: + +* String: :eql:type:`str` +* Boolean: :eql:type:`bool` +* Various numeric types: :eql:type:`int16`, :eql:type:`int32`, + :eql:type:`int64`, :eql:type:`float32`, :eql:type:`float64`, :eql:type:`bigint`, :eql:type:`decimal` +* JSON: :eql:type:`json`, +* UUID: :eql:type:`uuid`, +* Date/time: :eql:type:`datetime`, :eql:type:`duration` + :eql:type:`cal::local_datetime`, :eql:type:`cal::local_date`, + :eql:type:`cal::local_time`, :eql:type:`cal::relative_duration`, + :eql:type:`cal::date_duration` +* Miscellaneous: :eql:type:`sequence`, :eql:type:`bytes`, etc. + +Custom scalars +============== -.. include:: ../stdlib/scalar_table.rst +You can extend built-in scalars with additional constraints or annotations. +Here's an example of a non-negative custom ``int64`` variant: -Custom scalar types can also be declared. For full documentation, see :ref:`SDL -> Scalar types `. +.. code-block:: sdl + + scalar type posint64 extending int64 { + constraint min_value(0); + } .. _ref_datamodel_enums: Enums -^^^^^ +===== -To represent an enum, declare a custom scalar that extends the abstract -:ref:`enum ` type. +Enum types are created by extending the abstract :eql:type:`enum` type, e.g.: .. code-block:: sdl - scalar type Color extending enum; + scalar type Color extending enum; - type Shirt { - color: Color; - } + type Shirt { + color: Color; + } -.. important:: +which can be queries with: - To reference enum values inside EdgeQL queries, use dot notation, e.g. - ``Color.Green``. +.. code-block:: edgeql -For a full reference on enum types, see the :ref:`Enum docs `. + select Shirt filter .color = Color.Red; +For a full reference on enum types, see the :ref:`Enum docs `. .. _ref_datamodel_arrays: Arrays -^^^^^^ +====== Arrays store zero or more primitive values of the same type in an ordered list. -Arrays cannot contain object types or other arrays. +Arrays cannot contain object types or other arrays, but can contain virtually +any other type. .. code-block:: sdl - type Person { - str_array: array; - json_array: array; + type Person { + str_array: array; + json_array: array; + tuple_array: array>; - # INVALID: arrays of object types not allowed - # friends: array + # INVALID: arrays of object types not allowed: + # friends: array - # INVALID: arrays cannot be nested - # nested_array: array> - } + # INVALID: arrays cannot be nested: + # nested_array: array> -For a full reference on array types, see the :ref:`Array docs `. + # VALID: arrays can contain tuples with arrays in them + nested_array_via_tuple: array>> + } + +Array syntax in EdgeQL is very intuitive (indexing starts at ``0``): + +.. code-block:: edgeql + select [1, 2, 3]; + select [1, 2, 3][1] = 2; # true + +For a full reference on array types, see the :ref:`Array docs `. .. _ref_datamodel_tuples: Tuples -^^^^^^ +====== Like arrays, tuples are ordered sequences of primitive data. Unlike arrays, each element of a tuple can have a distinct type. Tuple elements can be *any @@ -78,13 +108,11 @@ type*, including primitives, objects, arrays, and other tuples. .. code-block:: sdl - type Person { - - unnamed_tuple: tuple; - nested_tuple: tuple>>; - tuple_of_arrays: tuple, array>; - - } + type Person { + unnamed_tuple: tuple; + nested_tuple: tuple>>; + tuple_of_arrays: tuple, array>; + } Optionally, you can assign a *key* to each element of the tuple. Tuples containing explicit keys are known as *named tuples*. You must assign keys to @@ -92,50 +120,48 @@ all elements (or none of them). .. code-block:: sdl - type BlogPost { - metadata: tuple; - } + type BlogPost { + metadata: tuple; + } Named and unnamed tuples are the same data structure under the hood. You can add, remove, and change keys in a tuple type after it's been declared. For -details, see :ref:`EdgeQL > Literals > Tuples `. +details, see :ref:`Tuples `. -.. important:: +.. note:: - When you query an *unnamed* tuple using one of EdgeQL's :ref:`client - libraries `, its value is converted to a list/array. When - you fetch a named tuple, it is converted into an object/dictionary/hashmap - depending on the language. + When you query an *unnamed* tuple using one of EdgeQL's + :ref:`client libraries `, its value is converted to a + list/array. When you fetch a named tuple, it is converted into an + object/dictionary/hashmap depending on the language. .. _ref_datamodel_ranges: Ranges -^^^^^^ +====== Ranges represent some interval of values. The intervals can be bound or unbound on either end. They can also be empty, containing no values. Only some scalar types have corresponding range types: -- ``range`` -- ``range`` -- ``range`` -- ``range`` -- ``range`` -- ``range`` -- ``range`` -- ``range`` +- Numeric ranges: ``range``, ``range``, ``range``, + ``range``, ``range`` +- Date/time ranges: ``range``, ``range``, + ``range`` + +Example: .. code-block:: sdl - type DieRoll { - values: range; - } + type DieRoll { + values: range; + } -For a full reference on ranges, functions and operators see the :ref:`Range -docs `. +For a full reference on ranges, functions and operators see the +:ref:`Range docs `. Sequences -^^^^^^^^^ +========= To represent an auto-incrementing integer property, declare a custom scalar that extends the abstract ``sequence`` type. Creating a sequence type @@ -145,10 +171,264 @@ share the counter. .. code-block:: sdl - scalar type ticket_number extending sequence; - type Ticket { - number: ticket_number; - } + scalar type ticket_number extending sequence; + type Ticket { + number: ticket_number; + rendered_number := 'TICKET-\(.number)'; + } + +For a full reference on sequences, see the :ref:`Sequence docs `. + +.. _ref_eql_sdl_scalars: +.. _ref_eql_sdl_scalars_syntax: + +Declaring scalars +================= + +This section describes the syntax to declare a custom scalar type in your +schema. + + +Syntax +------ + +.. sdl:synopsis:: + + [abstract] scalar type [extending [, ...] ] + [ "{" + [ ] + [ ] + ... + "}" ] + +Description +^^^^^^^^^^^ + +This declaration defines a new object type with the following options: + +:eql:synopsis:`abstract` + If specified, the created scalar type will be *abstract*. + +:eql:synopsis:`` + The name (optionally module-qualified) of the new scalar type. + +:eql:synopsis:`extending ` + Optional clause specifying the *supertype* of the new type. + + If :eql:synopsis:`` is an + :eql:type:`enumerated type ` declaration then + an enumerated scalar type is defined. + + Use of ``extending`` creates a persistent type relationship + between the new subtype and its supertype(s). Schema modifications + to the supertype(s) propagate to the subtype. + +The valid SDL sub-declarations are listed below: + +:sdl:synopsis:`` + Set scalar type :ref:`annotation ` + to a given *value*. + +:sdl:synopsis:`` + Define a concrete :ref:`constraint ` for + this scalar type. + + +.. _ref_eql_ddl_scalars: + +DDL commands +============ + +This section describes the low-level DDL commands for creating, altering, and +dropping scalar types. You typically don't need to use these commands directly, +but knowing about them is useful for reviewing migrations. + +Create scalar +------------- + +:eql-statement: +:eql-haswith: + +Define a new scalar type. + +.. eql:synopsis:: + + [ with [, ...] ] + create [abstract] scalar type [ extending ] + [ "{" ; [...] "}" ] ; + + # where is one of + + create annotation := + create constraint ... + +Description +^^^^^^^^^^^ + +The command ``create scalar type`` defines a new scalar type for use in the +current |branch|. + +If *name* is qualified with a module name, then the type is created +in that module, otherwise it is created in the current module. +The type name must be distinct from that of any existing schema item +in the module. + +If the ``abstract`` keyword is specified, the created type will be +*abstract*. + +All non-abstract scalar types must have an underlying core +implementation. For user-defined scalar types this means that +``create scalar type`` must have another non-abstract scalar type +as its *supertype*. + +The most common use of ``create scalar type`` is to define a scalar +subtype with constraints. + +Most sub-commands and options of this command are identical to the +:ref:`SDL scalar type declaration `. The +following subcommands are allowed in the ``create scalar type`` block: + +:eql:synopsis:`create annotation := ;` + Set scalar type's :eql:synopsis:`` to + :eql:synopsis:``. + + See :eql:stmt:`create annotation` for details. + +:eql:synopsis:`create constraint ...` + Define a new constraint for this scalar type. See + :eql:stmt:`create constraint` for details. + + +Examples +^^^^^^^^ + +Create a new non-negative integer type: + +.. code-block:: edgeql + + create scalar type posint64 extending int64 { + create constraint min_value(0); + }; + +Create a new enumerated type: + +.. code-block:: edgeql + + create scalar type Color + extending enum; + + +Alter scalar +------------ + +:eql-statement: +:eql-haswith: + +Alter the definition of a scalar type. + +.. eql:synopsis:: + + [ with [, ...] ] + alter scalar type + "{" ; [...] "}" ; + + # where is one of + + rename to + extending ... + create annotation := + alter annotation := + drop annotation + create constraint ... + alter constraint ... + drop constraint ... + +Description +^^^^^^^^^^^ + +The command ``alter scalar type`` changes the definition of a scalar type. +*name* must be a name of an existing scalar type, optionally qualified +with a module name. + +The following subcommands are allowed in the ``alter scalar type`` block: + +:eql:synopsis:`rename to ;` + Change the name of the scalar type to *newname*. + +:eql:synopsis:`extending ...` + Alter the supertype list. It works the same way as in + :eql:stmt:`alter type`. + +:eql:synopsis:`alter annotation ;` + Alter scalar type :eql:synopsis:``. + See :eql:stmt:`alter annotation` for details. + +:eql:synopsis:`drop annotation ` + Remove scalar type's :eql:synopsis:`` from + :eql:synopsis:``. + See :eql:stmt:`drop annotation` for details. + +:eql:synopsis:`alter constraint ...` + Alter the definition of a constraint for this scalar type. See + :eql:stmt:`alter constraint` for details. + +:eql:synopsis:`drop constraint ` + Remove a constraint from this scalar type. See + :eql:stmt:`drop constraint` for details. + +All the subcommands allowed in the ``create scalar type`` block are also +valid subcommands for ``alter scalar type`` block. + + +Examples +^^^^^^^^ + +Define a new constraint on a scalar type: + +.. code-block:: edgeql + + alter scalar type posint64 { + create constraint max_value(100); + }; + +Add one more label to an enumerated type: + +.. code-block:: edgeql + + alter scalar type Color + extending enum; + + +Drop scalar +----------- + +:eql-statement: +:eql-haswith: + +Remove a scalar type. + +.. eql:synopsis:: + + [ with [, ...] ] + drop scalar type ; + +Description +^^^^^^^^^^^ + +The command ``drop scalar type`` removes a scalar type. + +Parameters +^^^^^^^^^^ + +*name* + The name (optionally qualified with a module name) of an existing + scalar type. + +Example +^^^^^^^ + +Remove a scalar type: + +.. code-block:: edgeql -For a full reference on sequences, see the :ref:`Sequence docs -`. + drop scalar type posint64; diff --git a/docs/reference/ddl/index.rst b/docs/reference/ddl/index.rst index 35110ffdff3..e744ac436d8 100644 --- a/docs/reference/ddl/index.rst +++ b/docs/reference/ddl/index.rst @@ -8,7 +8,6 @@ DDL :hidden: objects - scalars properties migrations diff --git a/docs/reference/ddl/scalars.rst b/docs/reference/ddl/scalars.rst deleted file mode 100644 index c539094ff33..00000000000 --- a/docs/reference/ddl/scalars.rst +++ /dev/null @@ -1,208 +0,0 @@ -.. _ref_eql_ddl_scalars: - -============ -Scalar Types -============ - -This section describes the DDL commands pertaining to -:ref:`scalar types `. - - -Create scalar type -================== - -:eql-statement: -:eql-haswith: - -:ref:`Define ` a new scalar type. - -.. eql:synopsis:: - - [ with [, ...] ] - create [abstract] scalar type [ extending ] - [ "{" ; [...] "}" ] ; - - # where is one of - - create annotation := - create constraint ... - - -Description ------------ - -The command ``create scalar type`` defines a new scalar type for use in the -current |branch|. - -If *name* is qualified with a module name, then the type is created -in that module, otherwise it is created in the current module. -The type name must be distinct from that of any existing schema item -in the module. - -If the ``abstract`` keyword is specified, the created type will be -*abstract*. - -All non-abstract scalar types must have an underlying core -implementation. For user-defined scalar types this means that -``create scalar type`` must have another non-abstract scalar type -as its *supertype*. - -The most common use of ``create scalar type`` is to define a scalar -subtype with constraints. - -Most sub-commands and options of this command are identical to the -:ref:`SDL scalar type declaration `. The -following subcommands are allowed in the ``create scalar type`` -block: - -:eql:synopsis:`create annotation := ;` - Set scalar type's :eql:synopsis:`` to - :eql:synopsis:``. - - See :eql:stmt:`create annotation` for details. - -:eql:synopsis:`create constraint ...` - Define a new constraint for this scalar type. See - :eql:stmt:`create constraint` for details. - - -Examples --------- - -Create a new non-negative integer type: - -.. code-block:: edgeql - - create scalar type posint64 extending int64 { - create constraint min_value(0); - }; - - -Create a new enumerated type: - -.. code-block:: edgeql - - create scalar type Color - extending enum; - - -Alter scalar type -================= - -:eql-statement: -:eql-haswith: - - -Alter the definition of a :ref:`scalar type `. - -.. eql:synopsis:: - - [ with [, ...] ] - alter scalar type - "{" ; [...] "}" ; - - # where is one of - - rename to - extending ... - create annotation := - alter annotation := - drop annotation - create constraint ... - alter constraint ... - drop constraint ... - - -Description ------------ - -The command ``alter scalar type`` changes the definition of a scalar type. -*name* must be a name of an existing scalar type, optionally qualified -with a module name. - -The following subcommands are allowed in the ``alter scalar type`` block: - -:eql:synopsis:`rename to ;` - Change the name of the scalar type to *newname*. - -:eql:synopsis:`extending ...` - Alter the supertype list. It works the same way as in - :eql:stmt:`alter type`. - -:eql:synopsis:`alter annotation ;` - Alter scalar type :eql:synopsis:``. - See :eql:stmt:`alter annotation` for details. - -:eql:synopsis:`drop annotation ` - Remove scalar type's :eql:synopsis:`` from - :eql:synopsis:``. - See :eql:stmt:`drop annotation` for details. - -:eql:synopsis:`alter constraint ...` - Alter the definition of a constraint for this scalar type. See - :eql:stmt:`alter constraint` for details. - -:eql:synopsis:`drop constraint ` - Remove a constraint from this scalar type. See - :eql:stmt:`drop constraint` for details. - -All the subcommands allowed in the ``create scalar type`` block are also -valid subcommands for ``alter scalar type`` block. - - -Examples --------- - -Define a new constraint on a scalar type: - -.. code-block:: edgeql - - alter scalar type posint64 { - create constraint max_value(100); - }; - -Add one more label to an enumerated type: - -.. code-block:: edgeql - - alter scalar type Color - extending enum; - - -Drop scalar type -================ - -:eql-statement: -:eql-haswith: - - -Remove a scalar type. - -.. eql:synopsis:: - - [ with [, ...] ] - drop scalar type ; - - -Description ------------ - -The command ``drop scalar type`` removes a scalar type. - - -Parameters ----------- - -*name* - The name (optionally qualified with a module name) of an existing - scalar type. - - -Example -------- - -Remove a scalar type: - -.. code-block:: edgeql - - drop scalar type posint64; diff --git a/docs/reference/sdl/index.rst b/docs/reference/sdl/index.rst index d2467901eaa..ff7db0197a8 100644 --- a/docs/reference/sdl/index.rst +++ b/docs/reference/sdl/index.rst @@ -71,5 +71,4 @@ to the previous migration: :hidden: objects - scalars properties diff --git a/docs/reference/sdl/scalars.rst b/docs/reference/sdl/scalars.rst deleted file mode 100644 index de31b6f1187..00000000000 --- a/docs/reference/sdl/scalars.rst +++ /dev/null @@ -1,70 +0,0 @@ -.. _ref_eql_sdl_scalars: - -============ -Scalar Types -============ - -This section describes the SDL declarations pertaining to -:ref:`scalar types `. - - -Example -------- - -Declare a new non-negative integer type: - -.. code-block:: sdl - - scalar type posint64 extending int64 { - constraint min_value(0); - } - -.. _ref_eql_sdl_scalars_syntax: - -Syntax ------- - -Define a new scalar type corresponding to the :ref:`more explicit DDL -commands `. - -.. sdl:synopsis:: - - [abstract] scalar type [extending [, ...] ] - [ "{" - [ ] - [ ] - ... - "}" ] - - -Description ------------ - -This declaration defines a new object type with the following options: - -:eql:synopsis:`abstract` - If specified, the created scalar type will be *abstract*. - -:eql:synopsis:`` - The name (optionally module-qualified) of the new scalar type. - -:eql:synopsis:`extending ` - Optional clause specifying the *supertype* of the new type. - - If :eql:synopsis:`` is an - :eql:type:`enumerated type ` declaration then - an enumerated scalar type is defined. - - Use of ``extending`` creates a persistent type relationship - between the new subtype and its supertype(s). Schema modifications - to the supertype(s) propagate to the subtype. - -The valid SDL sub-declarations are listed below: - -:sdl:synopsis:`` - Set scalar type :ref:`annotation ` - to a given *value*. - -:sdl:synopsis:`` - Define a concrete :ref:`constraint ` for - this scalar type. diff --git a/docs/stdlib/scalar_table.rst b/docs/stdlib/scalar_table.rst deleted file mode 100644 index 31dc6f6b7a4..00000000000 --- a/docs/stdlib/scalar_table.rst +++ /dev/null @@ -1,63 +0,0 @@ -.. list-table:: - - * - :eql:type:`str` - - A variable-length string - - * - :eql:type:`bool` - - Logical boolean (true/false) - - * - :eql:type:`int16` - - 16-bit integer - - * - :eql:type:`int32` - - 32-bit integer - - * - :eql:type:`int64` - - 64-bit integer - - * - :eql:type:`float32` - - 32-bit floating point number - - * - :eql:type:`float64` - - 64-bit floating point number - - * - :eql:type:`bigint` - - Arbitrary precision integer - - * - :eql:type:`decimal` - - Arbitrary precision number - - * - :eql:type:`json` - - Arbitrary JSON data - - * - :eql:type:`uuid` - - UUID type - - * - :eql:type:`bytes` - - Raw binary data - - * - :eql:type:`datetime` - - Timezone-aware point in time - - * - :eql:type:`duration` - - Absolute time span - - * - :eql:type:`cal::local_datetime` - - Date and time without timezone - - * - :eql:type:`cal::local_date` - - Date type - - * - :eql:type:`cal::local_time` - - Time type - - * - :eql:type:`cal::relative_duration` - - Relative time span (in months, days, and seconds) - - * - :eql:type:`cal::date_duration` - - Relative time span (in months and days only) - - * - :eql:type:`sequence` - - Auto-incrementing sequence of ``int64`` - - From 121ebf621468906667160f19913a44ec1a02ea88 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Tue, 18 Feb 2025 23:09:59 -0800 Subject: [PATCH 20/23] Merge objects --- docs/datamodel/objects.rst | 477 +++++++++++++++++++++++++++++---- docs/reference/ddl/index.rst | 1 - docs/reference/ddl/objects.rst | 272 ------------------- docs/reference/sdl/index.rst | 1 - docs/reference/sdl/objects.rst | 132 --------- 5 files changed, 424 insertions(+), 459 deletions(-) delete mode 100644 docs/reference/ddl/objects.rst delete mode 100644 docs/reference/sdl/objects.rst diff --git a/docs/datamodel/objects.rst b/docs/datamodel/objects.rst index c641e2eba83..d803dd5424a 100644 --- a/docs/datamodel/objects.rst +++ b/docs/datamodel/objects.rst @@ -6,63 +6,95 @@ Object Types .. index:: type, tables, models -*Object types* are the primary components of an Gel schema. They are +*Object types* are the primary components of a Gel schema. They are analogous to SQL *tables* or ORM *models*, and consist of :ref:`properties ` and :ref:`links `. -Properties are used to attach primitive data to an object type. -For the full documentation on properties, -see :ref:`Properties `. +Properties +========== + +Properties are used to attach primitive/scalar data to an object type. +For the full documentation on properties, see :ref:`ref_datamodel_props`. .. code-block:: sdl - type Person { - email: str; - } + type Person { + email: str; + } + +Using in a query: + +.. code-block:: edgeql + + select Person { + email + }; + + +Links +===== Links are used to define relationships between object types. For the full -documentation on links, see :ref:`Links `. +documentation on links, see :ref:`ref_datamodel_links`. .. code-block:: sdl - type Person { - best_friend: Person; - } + type Person { + email: str; + best_friend: Person; + } + +Using in a query: + +.. code-block:: edgeql + select Person { + email, + best_friend: { + email + } + }; -IDs ---- +ID +== .. index:: uuid, primary key There's no need to manually declare a primary key on your object types. All object types automatically contain a property ``id`` of type ``UUID`` that's -*required*, *globally unique*, and *readonly*. This ``id`` is assigned upon -creation and never changes. +*required*, *globally unique*, *readonly*, and has an index on it. +The ``id`` is assigned upon creation and cannot be changed. + +Using in a query: + +.. code-block:: edgeql + + select Person { id }; + select Person { email } filter .id = '123e4567-e89b-...'; + Abstract types --------------- +============== .. index:: abstract, inheritance Object types can either be *abstract* or *non-abstract*. By default all object -types are non-abstract. You can't create or store instances of abstract types, -but they're a useful way to share functionality and structure among -other object types. +types are non-abstract. You can't create or store instances of abstract types +(a.k.a. mixins), but they're a useful way to share functionality and +structure among other object types. .. code-block:: sdl - abstract type HasName { - first_name: str; - last_name: str; - } - -Abstract types are commonly used in tandem with inheritance. + abstract type HasName { + first_name: str; + last_name: str; + } .. _ref_datamodel_objects_inheritance: +.. _ref_eql_sdl_object_types_inheritance: Inheritance ------------ +=========== .. index:: extending, extends, subtypes, supertypes @@ -72,55 +104,394 @@ Object types can *extend* other object types. The extending type (AKA the .. code-block:: sdl - abstract type Animal { - species: str; - } + abstract type HasName { + first_name: str; + last_name: str; + } + + type Person extending HasName { + email: str; + best_friend: Person; + } + +Using in a query: + +.. code-block:: edgeql + + select Person { + first_name, + email, + best_friend: { + last_name + } + }; - type Dog extending Animal { - breed: str; - } .. _ref_datamodel_objects_multiple_inheritance: Multiple Inheritance -^^^^^^^^^^^^^^^^^^^^ +==================== -Object types can :ref:`extend more -than one type ` — that's called +Object types can extend more than one type — that's called *multiple inheritance*. This mechanism allows building complex object types out of combinations of more basic types. -.. code-block:: sdl +.. note:: - abstract type HasName { - first_name: str; - last_name: str; - } + Gel's multiple inheritance should not be confused with the multiple + inheritance of C++ or Python, where the complexity usually arises + from fine-grained mixing of logic. Gel's multiple inheritance is + structural and allows for natural composition. - abstract type HasEmail { - email: str; - } +.. code-block:: sdl-diff - type Person extending HasName, HasEmail { - profession: str; - } + abstract type HasName { + first_name: str; + last_name: str; + } + + + abstract type HasEmail { + + email: str; + + } + + - type Person extending HasName { + + type Person extending HasName, HasEmail { + - email: str; + best_friend: Person; + } If multiple supertypes share links or properties, those properties must be of the same type and cardinality. -.. note:: - Refer to the dedicated pages on :ref:`Indexes `, - :ref:`Constraints `, :ref:`Access Policies - `, and :ref:`Annotations - ` for documentation on these concepts. +.. _ref_eql_sdl_object_types: +.. _ref_eql_sdl_object_types_syntax: + + +Defining object types +===================== + +This section describes the syntax to declare object types in your schema. + +Syntax +------ + +.. sdl:synopsis:: + + [abstract] type [extending [, ...] ] + [ "{" + [ ] + [ ] + [ ] + [ ] + [ ] + ... + "}" ] + +Description +^^^^^^^^^^^ + +This declaration defines a new object type with the following options: + +:eql:synopsis:`abstract` + If specified, the created type will be *abstract*. + +:eql:synopsis:`` + The name (optionally module-qualified) of the new type. + +:eql:synopsis:`extending [, ...]` + Optional clause specifying the *supertypes* of the new type. + + Use of ``extending`` creates a persistent type relationship + between the new subtype and its supertype(s). Schema modifications + to the supertype(s) propagate to the subtype. + + References to supertypes in queries will also include objects of + the subtype. + + If the same *link* name exists in more than one supertype, or + is explicitly defined in the subtype and at least one supertype, + then the data types of the link targets must be *compatible*. + If there is no conflict, the links are merged to form a single + link in the new type. + +These sub-declarations are allowed in the ``Type`` block: + +:sdl:synopsis:`` + Set object type :ref:`annotation ` + to a given *value*. + +:sdl:synopsis:`` + Define a concrete :ref:`property ` for this object type. + +:sdl:synopsis:`` + Define a concrete :ref:`link ` for this object type. + +:sdl:synopsis:`` + Define a concrete :ref:`constraint ` for this + object type. + +:sdl:synopsis:`` + Define an :ref:`index ` for this object type. + + +.. _ref_eql_ddl_object_types: + +DDL commands +============ + +This section describes the low-level DDL commands for creating, altering, and +dropping object types. You typically don't need to use these commands directly, +but knowing about them is useful for reviewing migrations. + +Create type +----------- + +:eql-statement: +:eql-haswith: + +Define a new object type. + +.. eql:synopsis:: + + [ with [, ...] ] + create [abstract] type [ extending [, ...] ] + [ "{" ; [...] "}" ] ; + + # where is one of + + create annotation := + create link ... + create property ... + create constraint ... + create index on + +Description +^^^^^^^^^^^ + +The command ``create type`` defines a new object type for use in the +current |branch|. + +If *name* is qualified with a module name, then the type is created +in that module, otherwise it is created in the current module. +The type name must be distinct from that of any existing schema item +in the module. + +Parameters +^^^^^^^^^^ + +Most sub-commands and options of this command are identical to the +:ref:`SDL object type declaration `, +with some additional features listed below: + +:eql:synopsis:`with [, ...]` + Alias declarations. + + The ``with`` clause allows specifying module aliases + that can be referenced by the command. See :ref:`ref_eql_statements_with` + for more information. + +The following subcommands are allowed in the ``create type`` block: + +:eql:synopsis:`create annotation := ` + Set object type :eql:synopsis:`` to + :eql:synopsis:``. + + See :eql:stmt:`create annotation` for details. + +:eql:synopsis:`create link ...` + Define a new link for this object type. See + :eql:stmt:`create link` for details. + +:eql:synopsis:`create property ...` + Define a new property for this object type. See + :eql:stmt:`create property` for details. + +:eql:synopsis:`create constraint ...` + Define a concrete constraint for this object type. See + :eql:stmt:`create constraint` for details. + +:eql:synopsis:`create index on ` + Define a new :ref:`index ` + using *index-expr* for this object type. See + :eql:stmt:`create index` for details. + +Example +^^^^^^^ + +Create an object type ``User``: + +.. code-block:: edgeql + + create type User { + create property name -> str; + }; + + +Alter type +---------- + +:eql-statement: +:eql-haswith: + +Change the definition of an object type. + +.. eql:synopsis:: + + [ with [, ...] ] + alter type + [ "{" ; [...] "}" ] ; + + [ with [, ...] ] + alter type ; + + # where is one of + + rename to + extending [, ...] + create annotation := + alter annotation := + drop annotation + create link ... + alter link ... + drop link ... + create property ... + alter property ... + drop property ... + create constraint ... + alter constraint ... + drop constraint ... + create index on + drop index on + +Description +^^^^^^^^^^^ + +The command ``alter type`` changes the definition of an object type. +*name* must be a name of an existing object type, optionally qualified +with a module name. + +Parameters +^^^^^^^^^^ + +:eql:synopsis:`with [, ...]` + Alias declarations. + + The ``with`` clause allows specifying module aliases + that can be referenced by the command. See :ref:`ref_eql_statements_with` + for more information. + +:eql:synopsis:`` + The name (optionally module-qualified) of the type being altered. + +:eql:synopsis:`extending [, ...]` + Alter the supertype list. The full syntax of this subcommand is: + + .. eql:synopsis:: + + extending [, ...] + [ first | last | before | after ] + + This subcommand makes the type a subtype of the specified list + of supertypes. The requirements for the parent-child relationship + are the same as when creating an object type. + + It is possible to specify the position in the parent list + using the following optional keywords: + + * ``first`` -- insert parent(s) at the beginning of the + parent list, + * ``last`` -- insert parent(s) at the end of the parent list, + * ``before `` -- insert parent(s) before an + existing *parent*, + * ``after `` -- insert parent(s) after an existing + *parent*. + +:eql:synopsis:`alter annotation ;` + Alter object type annotation :eql:synopsis:``. + See :eql:stmt:`alter annotation` for details. + +:eql:synopsis:`drop annotation ` + Remove object type :eql:synopsis:``. + See :eql:stmt:`drop annotation` for details. + +:eql:synopsis:`alter link ...` + Alter the definition of a link for this object type. See + :eql:stmt:`alter link` for details. + +:eql:synopsis:`drop link ` + Remove a link item from this object type. See + :eql:stmt:`drop link` for details. + +:eql:synopsis:`alter property ...` + Alter the definition of a property item for this object type. + See :eql:stmt:`alter property` for details. + +:eql:synopsis:`drop property ` + Remove a property item from this object type. See + :eql:stmt:`drop property` for details. + +:eql:synopsis:`alter constraint ...` + Alter the definition of a constraint for this object type. See + :eql:stmt:`alter constraint` for details. + +:eql:synopsis:`drop constraint ;` + Remove a constraint from this object type. See + :eql:stmt:`drop constraint` for details. + +:eql:synopsis:`drop index on ` + Remove an :ref:`index ` defined as *index-expr* + from this object type. See :eql:stmt:`drop index` for details. + +All the subcommands allowed in the ``create type`` block are also +valid subcommands for the ``alter type`` block. + +Example +^^^^^^^ + +Alter the ``User`` object type to make ``name`` required: + +.. code-block:: edgeql + + alter type User { + alter property name { + set required; + } + }; + + +Drop type +--------- + +:eql-statement: +:eql-haswith: + +Remove the specified object type from the schema. + +.. eql:synopsis:: + + drop type ; + +Description +^^^^^^^^^^^ + +The command ``drop type`` removes the specified object type from the +schema. All subordinate schema items defined on this type, +such as links and indexes, are removed as well. + +Example +^^^^^^^ + +Remove the ``User`` object type: + +.. code-block:: edgeql + + drop type User; .. list-table:: :class: seealso * - **See also** - * - :ref:`SDL > Object types ` - * - :ref:`DDL > Object types ` * - :ref:`Introspection > Object types ` * - :ref:`Cheatsheets > Object types ` diff --git a/docs/reference/ddl/index.rst b/docs/reference/ddl/index.rst index e744ac436d8..b16578327c6 100644 --- a/docs/reference/ddl/index.rst +++ b/docs/reference/ddl/index.rst @@ -7,7 +7,6 @@ DDL :maxdepth: 3 :hidden: - objects properties migrations diff --git a/docs/reference/ddl/objects.rst b/docs/reference/ddl/objects.rst deleted file mode 100644 index 4d51e61a517..00000000000 --- a/docs/reference/ddl/objects.rst +++ /dev/null @@ -1,272 +0,0 @@ -.. _ref_eql_ddl_object_types: - -============ -Object Types -============ - -This section describes the DDL commands pertaining to -:ref:`object types `. - - -Create type -=========== - -:eql-statement: -:eql-haswith: - - -:ref:`Define ` a new object type. - -.. eql:synopsis:: - - [ with [, ...] ] - create [abstract] type [ extending [, ...] ] - [ "{" ; [...] "}" ] ; - - # where is one of - - create annotation := - create link ... - create property ... - create constraint ... - create index on - -Description ------------ - -The command ``create type`` defines a new object type for use in the -current |branch|. - -If *name* is qualified with a module name, then the type is created -in that module, otherwise it is created in the current module. -The type name must be distinct from that of any existing schema item -in the module. - -Parameters ----------- - -Most sub-commands and options of this command are identical to the -:ref:`SDL object type declaration `, -with some additional features listed below: - -:eql:synopsis:`with [, ...]` - Alias declarations. - - The ``with`` clause allows specifying module aliases - that can be referenced by the command. See :ref:`ref_eql_statements_with` - for more information. - -The following subcommands are allowed in the ``create type`` block: - -:eql:synopsis:`create annotation := ` - Set object type :eql:synopsis:`` to - :eql:synopsis:``. - - See :eql:stmt:`create annotation` for details. - -:eql:synopsis:`create link ...` - Define a new link for this object type. See - :eql:stmt:`create link` for details. - -:eql:synopsis:`create property ...` - Define a new property for this object type. See - :eql:stmt:`create property` for details. - -:eql:synopsis:`create constraint ...` - Define a concrete constraint for this object type. See - :eql:stmt:`create constraint` for details. - -:eql:synopsis:`create index on ` - Define a new :ref:`index ` - using *index-expr* for this object type. See - :eql:stmt:`create index` for details. - -Examples --------- - -Create an object type ``User``: - -.. code-block:: edgeql - - create type User { - create property name -> str; - }; - - -.. _ref_eql_ddl_object_types_alter: - -Alter type -========== - -:eql-statement: -:eql-haswith: - - -Change the definition of an -:ref:`object type `. - -.. eql:synopsis:: - - [ with [, ...] ] - alter type - [ "{" ; [...] "}" ] ; - - [ with [, ...] ] - alter type ; - - # where is one of - - rename to - extending [, ...] - create annotation := - alter annotation := - drop annotation - create link ... - alter link ... - drop link ... - create property ... - alter property ... - drop property ... - create constraint ... - alter constraint ... - drop constraint ... - create index on - drop index on - - -Description ------------ - -The command ``alter type`` changes the definition of an object type. -*name* must be a name of an existing object type, optionally qualified -with a module name. - -Parameters ----------- - -The following subcommands are allowed in the ``alter type`` block: - -:eql:synopsis:`with [, ...]` - Alias declarations. - - The ``with`` clause allows specifying module aliases - that can be referenced by the command. See :ref:`ref_eql_statements_with` - for more information. - -:eql:synopsis:`` - The name (optionally module-qualified) of the type being altered. - -:eql:synopsis:`extending [, ...]` - Alter the supertype list. The full syntax of this subcommand is: - - .. eql:synopsis:: - - extending [, ...] - [ first | last | before | after ] - - This subcommand makes the type a subtype of the specified list - of supertypes. The requirements for the parent-child relationship - are the same as when creating an object type. - - It is possible to specify the position in the parent list - using the following optional keywords: - - * ``first`` -- insert parent(s) at the beginning of the - parent list, - * ``last`` -- insert parent(s) at the end of the parent list, - * ``before `` -- insert parent(s) before an - existing *parent*, - * ``after `` -- insert parent(s) after an existing - *parent*. - -:eql:synopsis:`alter annotation ;` - Alter object type annotation :eql:synopsis:``. - See :eql:stmt:`alter annotation` for details. - -:eql:synopsis:`drop annotation ` - Remove object type :eql:synopsis:``. - See :eql:stmt:`drop annotation` for details. - -:eql:synopsis:`alter link ...` - Alter the definition of a link for this object type. See - :eql:stmt:`alter link` for details. - -:eql:synopsis:`drop link ` - Remove a link item from this object type. See - :eql:stmt:`drop link` for details. - -:eql:synopsis:`alter property ...` - Alter the definition of a property item for this object type. - See :eql:stmt:`alter property` for details. - -:eql:synopsis:`drop property ` - Remove a property item from this object type. See - :eql:stmt:`drop property` for details. - -:eql:synopsis:`alter constraint ...` - Alter the definition of a constraint for this object type. See - :eql:stmt:`alter constraint` for details. - -:eql:synopsis:`drop constraint ;` - Remove a constraint from this object type. See - :eql:stmt:`drop constraint` for details. - -:eql:synopsis:`drop index on ` - Remove an :ref:`index ` defined as *index-expr* - from this object type. See :eql:stmt:`drop index` for details. - -All the subcommands allowed in the ``create type`` block are also -valid subcommands for ``alter type`` block. - -Examples --------- - -Alter the ``User`` object type to make ``name`` required: - -.. code-block:: edgeql - - alter type User { - alter property name { - set required; - } - }; - - -Drop type -========= - -:eql-statement: -:eql-haswith: - - -Remove the specified object type from the schema. - -.. eql:synopsis:: - - drop type ; - -Description ------------ - -The command ``drop type`` removes the specified object type from the -schema. schema. All subordinate schema items defined on this type, -such as links and indexes, are removed as well. - -Examples --------- - -Remove the ``User`` object type: - -.. code-block:: edgeql - - drop type User; - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Object types ` - * - :ref:`SDL > Object types ` - * - :ref:`Introspection > Object types - ` - * - :ref:`Cheatsheets > Object types ` diff --git a/docs/reference/sdl/index.rst b/docs/reference/sdl/index.rst index ff7db0197a8..266329183d2 100644 --- a/docs/reference/sdl/index.rst +++ b/docs/reference/sdl/index.rst @@ -70,5 +70,4 @@ to the previous migration: :maxdepth: 3 :hidden: - objects properties diff --git a/docs/reference/sdl/objects.rst b/docs/reference/sdl/objects.rst deleted file mode 100644 index 97f362876a1..00000000000 --- a/docs/reference/sdl/objects.rst +++ /dev/null @@ -1,132 +0,0 @@ -.. _ref_eql_sdl_object_types: - -============ -Object Types -============ - -This section describes the SDL declarations pertaining to -:ref:`object types `. - - -Example -------- - -Consider a ``User`` type with a few properties: - -.. code-block:: sdl - - type User { - # define some properties and a link - required name: str; - address: str; - - multi friends: User; - - # define an index for User based on name - index on (__subject__.name); - } - -.. _ref_eql_sdl_object_types_inheritance: - -An alternative way to define the same ``User`` type could be by using -abstract types. These abstract types can then be re-used in other type -definitions as well: - -.. code-block:: sdl - - abstract type Named { - required name: str; - } - - abstract type HasAddress { - address: str; - } - - type User extending Named, HasAddress { - # define some user-specific properties and a link - multi friends: User; - - # define an index for User based on name - index on (__subject__.name); - } - -Introducing abstract types opens up the possibility of -:ref:`polymorphic queries `. - - -.. _ref_eql_sdl_object_types_syntax: - -Syntax ------- - -Define a new object type corresponding to the :ref:`more explicit DDL -commands `. - -.. sdl:synopsis:: - - [abstract] type [extending [, ...] ] - [ "{" - [ ] - [ ] - [ ] - [ ] - [ ] - ... - "}" ] - -Description ------------ - -This declaration defines a new object type with the following options: - -:eql:synopsis:`abstract` - If specified, the created type will be *abstract*. - -:eql:synopsis:`` - The name (optionally module-qualified) of the new type. - -:eql:synopsis:`extending [, ...]` - Optional clause specifying the *supertypes* of the new type. - - Use of ``extending`` creates a persistent type relationship - between the new subtype and its supertype(s). Schema modifications - to the supertype(s) propagate to the subtype. - - References to supertypes in queries will also include objects of - the subtype. - - If the same *link* name exists in more than one supertype, or - is explicitly defined in the subtype and at least one supertype, - then the data types of the link targets must be *compatible*. - If there is no conflict, the links are merged to form a single - link in the new type. - -These sub-declarations are allowed in the ``Type`` block: - -:sdl:synopsis:`` - Set object type :ref:`annotation ` - to a given *value*. - -:sdl:synopsis:`` - Define a concrete :ref:`property ` for this object type. - -:sdl:synopsis:`` - Define a concrete :ref:`link ` for this object type. - -:sdl:synopsis:`` - Define a concrete :ref:`constraint ` for this - object type. - -:sdl:synopsis:`` - Define an :ref:`index ` for this object type. - - -.. list-table:: - :class: seealso - - * - **See also** - * - :ref:`Schema > Object types ` - * - :ref:`DDL > Object types ` - * - :ref:`Introspection > Object types - ` - * - :ref:`Cheatsheets > Object types ` From c086931ddf29124ca37ec4523d3bdd4323d22569 Mon Sep 17 00:00:00 2001 From: Scott Trinh Date: Wed, 19 Feb 2025 10:04:57 -0500 Subject: [PATCH 21/23] Quickstart tutorial with Next.js (#8269) --- docs/intro/index.rst | 2 +- docs/intro/quickstart.rst | 536 --------------- docs/intro/quickstart/connecting.rst | 97 +++ .../quickstart/images/flashcards-import.png | Bin 0 -> 15735 bytes docs/intro/quickstart/images/schema-ui.png | Bin 0 -> 62947 bytes docs/intro/quickstart/images/timestamped.png | Bin 0 -> 31014 bytes docs/intro/quickstart/index.rst | 62 ++ docs/intro/quickstart/inheritance.rst | 113 ++++ docs/intro/quickstart/modeling.rst | 108 +++ docs/intro/quickstart/setup.rst | 89 +++ docs/intro/quickstart/working.rst | 635 ++++++++++++++++++ edb/tools/docs/edb.py | 3 +- 12 files changed, 1107 insertions(+), 538 deletions(-) delete mode 100644 docs/intro/quickstart.rst create mode 100644 docs/intro/quickstart/connecting.rst create mode 100644 docs/intro/quickstart/images/flashcards-import.png create mode 100644 docs/intro/quickstart/images/schema-ui.png create mode 100644 docs/intro/quickstart/images/timestamped.png create mode 100644 docs/intro/quickstart/index.rst create mode 100644 docs/intro/quickstart/inheritance.rst create mode 100644 docs/intro/quickstart/modeling.rst create mode 100644 docs/intro/quickstart/setup.rst create mode 100644 docs/intro/quickstart/working.rst diff --git a/docs/intro/index.rst b/docs/intro/index.rst index e02b4939fcd..f07e30fe31c 100644 --- a/docs/intro/index.rst +++ b/docs/intro/index.rst @@ -9,7 +9,7 @@ Get Started :maxdepth: 3 :hidden: - quickstart + quickstart/index cli instances projects diff --git a/docs/intro/quickstart.rst b/docs/intro/quickstart.rst deleted file mode 100644 index 88e700073f3..00000000000 --- a/docs/intro/quickstart.rst +++ /dev/null @@ -1,536 +0,0 @@ -.. _ref_quickstart: - -========== -Quickstart -========== - -Welcome to |Gel|! - -This quickstart will walk you through the entire process of creating a simple -Gel-powered application: installation, defining your schema, adding some -data, and writing your first query. Let's jump in! - -.. _ref_quickstart_install: - -1. Installation -=============== - -First let's install the Gel CLI. Open a terminal and run the appropriate -command below. - -JavaScript and Python users ---------------------------- - -If you use ``npx`` or ``uvx`` you can skip the installation steps below -and use Gel CLI like this: - -.. code-block:: bash - - # JavaScript: - $ npx gel project init - - # Python - $ uvx gel project init - - -Linux ------ - -.. tabs:: - - .. code-tab:: bash - :caption: Script - - $ curl https://geldata.com/sh --proto '=https' -sSf1 | sh - - .. code-tab:: bash - :caption: APT - - $ # Import the Gel packaging key - $ sudo mkdir -p /usr/local/share/keyrings && \ - sudo curl --proto '=https' --tlsv1.2 -sSf \ - -o /usr/local/share/keyrings/gel-keyring.gpg \ - https://packages.geldata.com/keys/gel-keyring.gpg && \ - $ # Add the Gel package repository - $ echo deb [signed-by=/usr/local/share/keyrings/gel-keyring.gpg]\ - https://packages.geldata.com/apt \ - $(grep "VERSION_CODENAME=" /etc/os-release | cut -d= -f2) main \ - | sudo tee /etc/apt/sources.list.d/gel.list - $ # Install the Gel package - $ sudo apt-get update && sudo apt-get install gel-6 - - .. code-tab:: bash - :caption: YUM - - $ # Add the Gel package repository - $ sudo curl --proto '=https' --tlsv1.2 -sSfL \ - https://packages.geldata.com/rpm/gel-rhel.repo \ - > /etc/yum.repos.d/gel.repo - $ # Install the Gel package - $ sudo yum install gel-6 - -macOS ------ - -.. tabs:: - - .. code-tab:: bash - :caption: Script - - $ curl https://geldata.com/sh --proto '=https' -sSf1 | sh - - .. code-tab:: bash - :caption: Homebrew - - $ # Add the Gel tap to your Homebrew - $ brew tap geldata/tap - $ # Install Gel CLI - $ brew install gel-cli - -Windows (Powershell) --------------------- - -.. note:: - - Gel on Windows requires WSL 2 to create local instances because the - Gel server runs on Linux. It is *not* required if you will use the CLI - only to manage Gel Cloud and/or other remote instances. This quickstart - *does* create local instances, so WSL 2 is required to complete the - quickstart. - -.. code-block:: powershell - - PS> iwr https://geldata.com/ps1 -useb | iex - -.. note:: Command prompt installation - - To install Gel in the Windows Command prompt, follow these steps: - - 1. `Download the CLI `__ - - 2. Navigate to the download location in the command prompt - - 3. Run the installation command: - - .. code-block:: - - gel-cli.exe _self_install - -The script installation methods download and execute a bash script that -installs the |gelcmd| CLI on your machine. You may be asked for your -password. Once the installation completes, you may need to **restart your -terminal** before you can use the |gelcmd| command. - -Now let's set up your Gel project. - -.. _ref_quickstart_createdb: - -2. Initialize a project -======================= - -In a terminal, create a new directory and ``cd`` into it. - -.. code-block:: bash - - $ mkdir quickstart - $ cd quickstart - -Then initialize your Gel project: - -.. code-block:: bash - - $ gel project init - -This starts an interactive tool that walks you through the process of setting -up your first Gel instance. You should see something like this: - -.. code-block:: bash - - $ gel project init - No `tel.toml` found in `/path/to/quickstart` or above - Do you want to initialize a new project? [Y/n] - > Y - Specify the name of Gel instance to use with this project - [default: quickstart]: - > quickstart - Checking Gel versions... - Specify the version of Gel to use with this project [default: x.x]: - > x.x - Specify branch name: [default: main]: - > main - ┌─────────────────────┬───────────────────────────────────────────────┐ - │ Project directory │ ~/path/to/quickstart │ - │ Project config │ ~/path/to/quickstart/gel.toml │ - │ Schema dir (empty) │ ~/path/to/quickstart/dbschema │ - │ Installation method │ portable package │ - │ Version │ x.x+cc4f3b5 │ - │ Instance name │ quickstart │ - └─────────────────────┴───────────────────────────────────────────────┘ - Downloading package... - 00:00:01 [====================] 41.40 MiB/41.40 MiB 32.89MiB/s | ETA: 0s - Successfully installed x.x+cc4f3b5 - Initializing Gel instance... - Applying migrations... - Everything is up to date. Revision initial - Project initialized. - To connect to quickstart, run `gel` - - -This did a couple things. - -1. First, it scaffolded your project by creating an - :ref:`ref_reference_gel_toml` config file and a schema file - :dotgel:`dbschema/default`. In the next section, you'll define a schema in - :dotgel:`default`. - -2. Second, it spun up an Gel instance called ``quickstart`` and "linked" it - to the current directory. As long as you're inside the project - directory, all CLI commands will be executed against this - instance. For more details on how Gel projects work, check out the - :ref:`Managing instances ` guide. - -.. note:: - - Quick note! You can have several **instances** of Gel running on your - computer simultaneously. Each instance may be **branched** many times. Each - branch may have an independent schema consisting of a number of **modules** - (though commonly your schema will be entirely defined inside the ``default`` - module). - -Let's connect to our new instance! Run |gelcmd| in your terminal to open an -interactive REPL to your instance. You're now connected to a live Gel -instance running on your computer! Try executing a simple query (``select 1 + 1;``) after the -REPL prompt (``quickstart:main>``): - -.. code-block:: edgeql-repl - - quickstart:main> select 1 + 1; - {2} - -Run ``\q`` to exit the REPL. More interesting queries are coming soon, -promise! But first we need to set up a schema. - -.. _ref_quickstart_createdb_sdl: - -3. Set up your schema -===================== - -Open the ``quickstart`` directory in your IDE or editor of choice. You should -see the following file structure. - -.. code-block:: - - /path/to/quickstart - ├── gel.toml - ├── dbschema - │ ├── default.gel - │ ├── migrations - -|Gel| schemas are defined with a dedicated schema definition language called -(predictably) Gel SDL (or just **SDL** for short). It's an elegant, -declarative way to define your data model. - -SDL lives inside |.gel| files. Commonly, your entire schema will be -declared in a file called :dotgel:`default` but you can split your schema -across several |.gel| files if you prefer. - -.. note:: - - Syntax-highlighter packages/extensions for |.gel| files are available - for - `Visual Studio Code `_, - `Sublime Text `_, - `Atom `_, - and `Vim `_. - -Let's build a simple movie database. We'll need to define two **object types** -(equivalent to a *table* in SQL): Movie and Person. Open -:dotgel:`dbschema/default` in your editor of choice and paste the following: - -.. code-block:: sdl - - module default { - type Person { - required name: str; - } - - type Movie { - title: str; - multi actors: Person; - } - }; - - -A few things to note here. - -- Our types don't contain an ``id`` property; Gel automatically - creates this property and assigns a unique UUID to every object inserted - into the database. -- The ``Movie`` type includes a **link** named ``actors``. In Gel, links are - used to represent relationships between object types. They eliminate the need - for foreign keys; later, you'll see just how easy it is to write "deep" - queries without JOINs. -- The object types are inside a ``module`` called ``default``. You can split - up your schema into logical subunits called modules, though it's common to - define the entire schema in a single module called ``default``. - -Now we're ready to run a migration to apply this schema to the database. - -4. Run a migration -================== - -Generate a migration file with :gelcmd:`migration create`. This command -gathers up our :dotgel:`*` files and sends them to the database. The *database -itself* parses these files, compares them against its current schema, and -generates a migration plan! Then the database sends this plan back to the CLI, -which creates a migration file. - -.. code-block:: bash - - $ gel migration create - Created ./dbschema/migrations/00001.edgeql (id: ) - -.. note:: - - If you're interested, open this migration file to see what's inside! It's - a simple EdgeQL script consisting of :ref:`DDL ` commands like - ``create type``, ``alter type``, and ``create property``. - -The migration file has been *created* but we haven't *applied it* against the -database. Let's do that. - -.. code-block:: bash - - $ gel migrate - Applied m1k54jubcs62wlzfebn3pxwwngajvlbf6c6qfslsuagkylg2fzv2lq (00001.edgeql) - -Looking good! Let's make sure that worked by running :gelcmd:`list types` on -the command line. This will print a table containing all currently-defined -object types. - -.. code-block:: bash - - $ gel list types - ┌─────────────────┬──────────────────────────────┐ - │ Name │ Extending │ - ├─────────────────┼──────────────────────────────┤ - │ default::Movie │ std::BaseObject, std::Object │ - │ default::Person │ std::BaseObject, std::Object │ - └─────────────────┴──────────────────────────────┘ - - -.. _ref_quickstart_migrations: - -.. _Migrate your schema: - -Before we proceed, let's try making a small change to our schema: making the -``title`` property of ``Movie`` required. First, update the schema file: - -.. code-block:: sdl-diff - - type Movie { - - title: str; - + required title: str; - multi actors: Person; - } - -Then create another migration. Because this isn't the initial migration, we -see something a little different than before. - -.. code-block:: bash - - $ gel migration create - did you make property 'title' of object type 'default::Movie' - required? [y,n,l,c,b,s,q,?] - > - -As before, Gel parses the schema files and compared them against its -current internal schema. It correctly detects the change we made, and prompts -us to confirm it. This interactive process lets you sanity check every change -and provide guidance when a migration is ambiguous (e.g. when a property is -renamed). - -Enter ``y`` to confirm the change. - -.. code-block:: bash - - $ gel migration create - did you make property 'title' of object type 'default::Movie' - required? [y,n,l,c,b,s,q,?] - > y - Please specify an expression to populate existing objects in - order to make property 'title' of object type 'default::Movie' required: - fill_expr> {} - -Hm, now we're seeing another prompt. Because ``title`` is changing from -*optional* to *required*, Gel is asking us what to do for all the ``Movie`` -objects that don't currently have a value for ``title`` defined. We'll just -specify a placeholder value of "Untitled". Replace the ``{}`` value -with ``"Untitled"`` and press Enter. - -.. code-block:: - - fill_expr> "Untitled" - Created dbschema/migrations/00002.edgeql (id: ) - - -If we look at the generated migration file, we see it contains the following -lines: - -.. code-block:: edgeql - - ALTER TYPE default::Movie { - ALTER PROPERTY title { - SET REQUIRED USING ('Untitled'); - }; - }; - -Let's wrap up by applying the new migration. - -.. code-block:: bash - - $ gel migrate - Applied m1rd2ikgwdtlj5ws7ll6rwzvyiui2xbrkzig4adsvwy2sje7kxeh3a (00002.edgeql) - -.. _ref_quickstart_insert_data: - -.. _Insert data: - -.. _Run some queries: - -5. Write some queries -===================== - -Let's write some simple queries via *Gel UI*, the admin dashboard baked -into every Gel instance. To open the dashboard: - -.. code-block:: bash - - $ gel ui - Opening URL in browser: - http://localhost:107xx/ui?authToken= - -You should see a simple landing page, as below. You'll see a card for each -branch of your instance. Remember: each instance can be branched multiple -times! - -.. image:: images/ui_landing.jpg - :width: 100% - -Currently, there's only one branch, which is simply called |main| by -default. Click the |main| card. - -.. image:: images/ui_db.jpg - :width: 100% - -Then click ``Open Editor`` so we can start writing some queries. We'll start -simple: ``select "Hello world!";``. Click ``RUN`` to execute the query. - -.. image:: images/ui_hello.jpg - :width: 100% - -The result of the query will appear on the right. - -The query will also be added to your history of previous queries, which can be -accessed via the "HISTORY" tab located on the lower left side of the editor. - -Now let's actually ``insert`` an object into our database. Copy the following -query into the query textarea and hit ``Run``. - -.. code-block:: edgeql - - insert Movie { - title := "Dune" - }; - -Nice! You've officially inserted the first object into your database! Let's -add a couple cast members with an ``update`` query. - -.. code-block:: edgeql - - update Movie - filter .title = "Dune" - set { - actors := { - (insert Person { name := "Timothee Chalamet" }), - (insert Person { name := "Zendaya" }) - } - }; - -Finally, we can run a ``select`` query to fetch all the data we just inserted. - -.. code-block:: edgeql - - select Movie { - title, - actors: { - name - } - }; - -Click the outermost ``COPY`` button in the top right of the query result area -to copy the result of this query to your clipboard as JSON. The copied text -will look something like this: - -.. code-block:: json - - [ - { - "title": "Dune", - "actors": [ - { - "name": "Timothee Chalamet" - }, - { - "name": "Zendaya" - } - ] - } - ] - -|Gel| UI is a useful development tool, but in practice your application will -likely be using one of Gel's *client libraries* to execute queries. Gel -provides official libraries for many langauges: - -- :ref:`JavaScript/TypeScript ` -- :ref:`Go ` -- :ref:`Python ` - -.. XXX: link to third-party doc websites -.. - :ref:`Rust ` -.. - :ref:`C# and F# ` -.. - :ref:`Java ` -.. - :ref:`Dart ` -.. - :ref:`Elixir ` - -Check out the :ref:`Clients ` guide to get -started with the language of your choice. - -.. _ref_quickstart_onwards: - -.. _Computeds: - -Onwards and upwards -=================== - -You now know the basics of Gel! You've installed the CLI and database, set -up a local project, run a couple migrations, inserted and queried some data, -and used a client library. - -- For a more in-depth exploration of each topic covered here, continue reading - the other pages in the Getting Started section, which will cover important - topics like migrations, the schema language, and EdgeQL in greater detail. - -.. XXX: -.. - For guided tours of major concepts, check out the showcase pages for `Data -.. Modeling `_, `EdgeQL -.. `_, and `Migrations -.. `_. - -- To start building an application using the language of your choice, check out - our client libraries: - - - :ref:`JavaScript/TypeScript ` - - :ref:`Go ` - - :ref:`Python ` diff --git a/docs/intro/quickstart/connecting.rst b/docs/intro/quickstart/connecting.rst new file mode 100644 index 00000000000..36838dd4f01 --- /dev/null +++ b/docs/intro/quickstart/connecting.rst @@ -0,0 +1,97 @@ +.. _ref_quickstart_connecting: + +========================== +Connecting to the database +========================== + +.. edb:split-section:: + + Before diving into the application, let's take a quick look at how to connect to the database from your code. We will intialize a client and use it to make a simple, static query to the database, and log the result to the console. + + .. note:: + + Notice that the ``createClient`` function isn't being passed any connection details. With |Gel|, you do not need to come up with your own scheme for how to build the correct database connection credentials and worry about leaking them into your code. You simply use |Gel| "projects" for local development, and set the appropriate environment variables in your deployment environments, and the ``createClient`` function knows what to do! + + .. edb:split-point:: + + .. code-block:: typescript + :caption: ./test.ts + + import { createClient } from "gel"; + + const client = createClient(); + + async function main() { + console.log(await client.query("select 'Hello from Gel!';")); + } + + main().then( + () => process.exit(0), + (err) => { + console.error(err); + process.exit(1); + } + ); + + + .. code-block:: sh + + $ npx tsx test.ts + [ 'Hello from Gel!' ] + +.. edb:split-section:: + + + With TypeScript, there are three ways to run a query: use a string EdgeQL query, use the ``queries`` generator to turn a string of EdgeQL into a TypeScript function, or use the query builder API to build queries dynamically in a type-safe manner. In this tutorial, you will use the TypeScript query builder API. + + This query builder must be regenerated any time the schema changes, so a hook has been added to the ``gel.toml`` file to generate the query builder any time the schema is updated. Moving beyond this simple query, use the query builder API to insert a few ``Deck`` objects into the database, and then select them back. + + .. edb:split-point:: + + .. code-block:: typescript-diff + :caption: ./test.ts + + import { createClient } from "gel"; + + import e from "@/dbschema/edgeql-js"; + + const client = createClient(); + + async function main() { + console.log(await client.query("select 'Hello from Gel!';")); + + + await e.insert(e.Deck, { name: "I am one" }).run(client); + + + + await e.insert(e.Deck, { name: "I am two" }).run(client); + + + + const decks = await e + + .select(e.Deck, () => ({ + + id: true, + + name: true, + + })) + + .run(client); + + + + console.table(decks); + + + + await e.delete(e.Deck).run(client); + } + + main().then( + () => process.exit(0), + (err) => { + console.error(err); + process.exit(1); + } + ); + + .. code-block:: sh + + $ npx tsx test.ts + [ 'Hello from Gel!' ] + ┌─────────┬────────────────────────────────────────┬────────────┐ + │ (index) │ id │ name │ + ├─────────┼────────────────────────────────────────┼────────────┤ + │ 0 │ 'f4cd3e6c-ea75-11ef-83ec-037350ea8a6e' │ 'I am one' │ + │ 1 │ 'f4cf27ae-ea75-11ef-83ec-3f7b2fceab24' │ 'I am two' │ + └─────────┴────────────────────────────────────────┴────────────┘ + +Now that you know how to connect to the database, you will see that we have provided an initialized ``Client`` object in the ``/lib/gel.ts`` module. Throughout the rest of the tutorial, you will import this ``Client`` object and use it to make queries. diff --git a/docs/intro/quickstart/images/flashcards-import.png b/docs/intro/quickstart/images/flashcards-import.png new file mode 100644 index 0000000000000000000000000000000000000000..8b3d66a2f06b3585102bda9bc8b7fe1f3985b739 GIT binary patch literal 15735 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�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 PypYgP(NQjkJ`Vj~lfJn? literal 0 HcmV?d00001 diff --git a/docs/intro/quickstart/images/schema-ui.png b/docs/intro/quickstart/images/schema-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..3f197e8baebc323e000a16a47d5fb40971110103 GIT binary patch literal 62947 zcmcG$byQU0_cuCpDJhMVASEFvDbh%%A~2M+z#Nz%1qnrv?hccX7#e1VR#HL~1i=|V zT7;oH??J!c-+I?w>%Di~wch&=>zwC2&wh42`+Uycdx$nNxObV7jS>QZT-Mf7H-SJX zaS#aU5jhb!@|3#nIs`%hH`2SW!N~y%9WcpZ%Ro?DJv_pYrGH;5D*a&p`)V{ z6BDDMp%D@i;^E=R&dx56+|$?B7tsq{T3TXdW$o_?c29F&n`<# z%f`k=z#?;eeB8pq!l&qDp|ns~)io+A>f^_cVjg*K-n{Yl_HJ!$y_LBjboag(G^zoG zDXD4{lGS2jVzTkiFDNMBkTiXnfvnEn68Ed*6T6-9wni%cyN+u{OY29G`#wHVMK{CR zLJ~`yoSeADG+uvbcpUnci(lL|b#gE}y*n-GV{-fpTFy!cWJgq6UFCkj&($%4%Mi$= zjyFqZ8bkMpgwbS>FmenDgj)?Dfb=FoArQ%VCP>(&|HDIetCNEE zVIpJv_WGGJ*$Hb_{Nv&`RLo+|$y6+hl!52536`Ofn%cw0dI7KV1ya0f0+VTOT$*J9 z{U|~OM+kwuk%$7>gj^woQ$ZkMpQ`3FN)t z+|$C7Gs%m}k~MrpK~vvFD<`9xmbp#^F0pmuSraI3n~euC<{68mb7;@h-=*NpopPPO z%@wY#DDEjenR8?Sf%MioxgR`xn5=h0yK;T`qpTNSA9Z)n4`#o2XzMRa+pT$3!Yvj} zic;x~9A%;|6-@y*`%Bfc4lU0+=3nC8id!p|ZEMi>FK36u_&5J?{f?IF@0gy;uh0gS z7_(Y07q@vL%xa#JaawL{W07zu8t-so4%hM( zrW6arap>)SS05Yhfx%`t%lgMmj{_PJjzi}gg9-^)vKCjND5;y>8IGi)iXBb;ueYR- z%gZErog|R?@KYFiZzXosVsKFFs`g-t58Ji)Z>jku-9pihQP5(%=0pvhda>qSTvNSn z2S_WS^vpvmuKRuI8B=F~WD)P@OWloQM{@XM-+uTjo$#03-{Xxf0Q(92jmjoxEl>$t zL+q_VWm=u{Fh#tMTSmd`3%0U45z6?535(e=e;McP!-2`HUdstSt&?4a>SGr-`Q z5^%57?X`BUZ>qLsuwh$2nZF-fEpF5WdiK&&PoMq?8*F$_<(&>5kITr{TbIjjZC$bT z9qjL+mk&vSesJ?fjql=L5kn68rw;3+6VwQr1AVoGzNpb=?DFe>^y{W9_~myg;%)w} zYX5KtCxU#Hvp?kd>DkNr0<8u&IfuvB)ka3wC8E#O_iB9(9&DdnF?wn(W5p2Ap(nde zkMqjFUct|Eb3b$y*iFWg@zkly{?Q?aDJVjfkF8_ReBNfY1!1~KUpmZrWVd=^kaTd0 zsi^((yMvFe*mlY0LVpHyk}7_0e!b0tV!U#Xa-=QOBHjD#WQrN!YsZ-cGvQs_MRTo) zkPtpo=H|AbK#_bbKHBR)(mlIHmeAX*NG4#l;1{E2^y|(nZSqT;7+Xf*9S_OD!}wx-1TV@6mwdI9mk>9?ABFY=U-v3vl-FFvYJ_EEqcN@(_t!HZ~g7)mwxmQ`ggi%7&$yBM$T|C16n0)cZS<4M%P|UBb-C-rt>F}fQY>WD{rK419_LFQ zOPasm)3&j{marbjIR0=RSFOkOwckN66mey1Hq|8lAPR!>sSw$Cvn%Z6< zN6!<8P&pPn(beiLDOWndQ$;IO~5}YdpC<_-3n-9 zR$aatM@&=9&&`po8h14MXY9$ES>!Tt|G?@`HL9(m@gzx229K!p;DmO0XYwEW<#u{} zQV${1DcHZeA2FcXbWsoL7Bl1wC*}L_RMe@2?c%a}s{$yQNSpx-ajd0+5NGi6Jm|rB z%%8sH;Gsb%V~i<)Y%+cbaLaS2eFLZ{<%u)p{FL?5ij z#`q->V=faDJ_}^-mRUb5;wpBy$HC#1g6-G}I4>l;u6ZE)e89}(R0g@HI)<|drfp4-wBjWADkwm3V`=F)x@F@JPp$^pdr&hN&~nizNA?ZB$NNBP3;;uFAyQ`5>C za~@h=wwgHmrcFU?X{0wV|4R_{BOpwQTXujtBnx-eKg~wOkdHV%p_EGY2@*yqoSEN$ z$E|P!Wt@Dh7m|HS5hQ8+# zE^By`I(!tLugF z$WNR_vYs~JOoB`NtkOUrBA)n9^RKDJteo}{a=ezZ} zOFZQjxtmUjUW`ZE@ICF$FQUJ%*Wo0eObq*G&rlRrk8B73d>gU)SPQt#zcx|IH+qA4 z*u59o$=Nl(*YNesKQ?vl#d7sY1&88QJq&)gkk!S1Kub$#HPxKUksz7H!zo3*oaIX znJK{9es_8A{b$j1db$VFnA?RSvGc1I%}QG7SzY!G_g~%j6}#X2St`Z#`2Jnti0{JB zALw;H7(bh$jFObI7QnhRU;e6JXDj?fMty45b@BD@!LqsS$s0Pi(1BBsOZ~8`smL@@ z`iCY*y=OGx-+kH_&Tec{Tmz%iTK{_AI3D4?qAO(pB_cue<)nNOeXu3BxR(bNMQ!Qq zo?S|oH(d>GQ8L$G`&qD9W#xNemRrq7KUxm%=c&Eib|!mHlz<3|AhYvIU}`lG3-f-8 zu`YS|#c>#aFBK|B^V3UKRE2fU>{Y_$sU?UXuio}69`TGfrzR7sW(#rlDm zI9OMC?^wHHSil33yJ~w!C$~&fBF9@tW^HKSSM7CZ+n0XHwzFVunaZPaJH6ozCyDX9 zBE#p`cyCMU(;&(v{FTgspy0>dkKMx-1O+pRzq6P)vBq>DuxFnmj<49gd*u^a#VK}= z?!p+R3%U-KUpIOzZ@#2{Au#itNJ(;OkG^Pp$(EMG7Vzy8h0r}_s@D)mTc0HzOCDgJVPj8A79 z5DUn-<%O@{m^ZW0hV7G;1+PgDU`Yv|wU=zWJ5(~yn$i(u)whR`fWEpXMV(5}?m0fk zc%?^(M6+n5B<@k8M0V&MjDGiL{4g&HS*Ek~2~DdJ-G*zB2+qG$j-WD*Oo?fCl}@t> zd*+!BWyU;sAPl}r?eCX1I^QE7u?60TBd`(i$xsT$^~-(Rx4@M-;iEcqIBD>ubQf|M za=B)DEQU~CPrXp$f&-41GxkRUd$LOJa5*ArNT%zVT!uifGr$P__4~1w>3tT@r=Q37 z?tKbg8DSoMn^0p$?M}_|hIB!r|zUIZb(`$0j6GOwYzZ z4Vbv?hjtD}K;`FgIhmg+EoOBYHoaHAM7XVypUI)%m0w+Bp689vo2jbreka#Ns4P=* zC@ZWX`XiKldojBu_ZPT|fa2n>Fl3H3H-f(__7-Z%Yvuymmf19%Yo zUws(l4aK))SWWm~UMShSVqkuEo)J|bj$f#qNT;P8Zv-RCI)vgD{C$aD=f)QrV1l2f zMCqW4c~A7x!+S)Y~8iT?@SQMc7vOFUg*LMYzWyLLKj36n+2 z4dn_C*-NBQ6z<#ovRxWe0T!Ip=7G>f7h>j!tB8t3nSnPm z$)VS{1A@)i6dpVPR30`eQeXz}eMVMzQ&pFG_bb&#UCFNhf*jY6KewE2NOjP-2cT{Y z=cG<7NIS%Fq(Ng&q#{4K{fHT-?1)#;|4^%Y#f2{OVKsRnN!Gy+jBf@uPT8ud7ujNx z9-1|kEw)#Jm2`@`K2EzoKlZ!dCNFS+r6%u6Tr^$g`aK^r$Xhux;e|rGO`9TC_7ter zJk4m-SorN;7#QWAdISt3v-qql7~8^ly=^)^S^%s+4;)vWJ~*%$n&?qjW(0=kj!kJ?T10enwJueQu;^VGyrW)2CKdi!o`92-m)F zrxc-?(&SV~*GJ|)Uf++8FpQTU3qO&~Br7vu__K;c%VF#oJ2`adAAx#Jbz^KYLjRwH@)%B|seA zYE(4+Q@p>0;l5z6q*^0)Uph8LCYmg|!t`qf?*bnTiqp}@L^#IbQYaNjXb}^4js0`7 z5dBKKq6r0F!9&7IR!h=cBB-BJI#c#{xKRn|r6(ObwjmGI>RK|c1R~t`oRka{oo{IX z4P@o_v87&-9^q+Z3ua2oRvx+Gx4|$#$dy&5X?M>1$;o#LKW*~+4E`GJn+ZLL3HFmR zva*_iiq+LV{;h&}AV*S}*e#a-ZlkX1eqFHi_g!QB>o&#xmS18hG_ztVv>1YJ(rjB6)t3cBz|GHLdA>(+g@jJBXwB{^DY4BNU|7gHf zIiiQdA+rR}GM1_J5&dkmBgP0Sm!a;viX(`bGais;={Trx4^O;Y5th^a^_n_T| zk#9fk|FKMaYHs|;RkoI%y{`)^kJ812lHTjGDd|(vJ74fOq~+}n1wEShOsU`#K+*i@ zI&N%|<4b!s*{wtQmtynGx6Gf}7lsljf^l2wXYzQE(ZD(rn|vm$U*}Owyxzlr9z^cO zk^~7Ab9(vRM@wl7(!1%{LxI3;N}wDtHX0ec9!T>33k>t@by)d*-vNnxH`;=9lE`JT z8>AN8v~pV1V-3rR)yft()ju6L#+2qW6w+o1b*$&;=pWIUP}m((3OmvdQ81z4Mi) z*stH)+n2Fea#DEQ2c6pWo7&qv1Xy|vq$cEFs3dtTEN5|GQc4d>xB^q8+}Kgb0wqLC z!_4uXTp;@&)=eW}A=@H_$rSk&R}}wjVpa`FnC=|j8OHo-b@1IuC7gRK4t=m@7*rkk z&21`)xAxfSNN1qt{VgIsWf8x)UEvh8;>; zk17GLeP1%8AYM;?&TwZc(m?6!fRTfBPs3GK6*;{E7vDQ_#fxw(GZ}39bre3Fgq_b9$_Q4`2X(@t36;iFzugPZtdED<`qnkmGvhTK zt|!>Ao%;NYzW2Ud%GxkT+{C)csZsY`&fxf~ajp@gj>*fAgSuibFJ6PrXgcU=x*LmV zsN$CE%4YO9) zeI>jMrk@}>`-TaGv47{jrqh+8)&<9uHCU_D|CHRI1+U*c)$|}yy#6;;rL9>W%)XpV zcCoIsJ*q|X1KC{A#f|XCsPH|SV8+WAbUu(?GsxL~P_+3jmmIt`V$=lxhKWB%gAYT; zk>OWfJmZEuPc=@WRXk)pKbLILP;nsqW*u3|yi@)5k~bAZnRO9N5lRk#c`>IfFk#jw z0p`-u9)Tz0RRV~eO2yZYxC98KYGhV(t!si1vJr&gLy(Pu z^xHlU@j_XrvmlUPT}3VN9-ZF_Aypqso8mp}^Q`Bd$`WpP1hRxt=l$-%OV0lQCp@a4 zbfB^WFty%2@&-i4ESl9$%YA%)srR^VynCbkE=vq*YP1D;a{dy+&z;gs~0jBnoFbdi$+Ph>pwU=4i zi4UktZh*`()lf+aACvuQ(8ML&OKl*bMJ3rJnJj0lG^m0D23T;7t8&r^kuOvf=!b-% zBTk-|H*&yN^a#Q0NMeihLDk8-LAaxgOUgJ^-RE_EA#Z`QPFUr|_H{hHW#1FAo7|+3 zPSIODS{{}ku$1to{aL18f6)0wYjLA)!AB2p4MjWYbAETsX&_dtsA`*g{(WxsQ+A9f zq(y-5@oV@>r)c}Oc>?zF>B#r|DoZ5FybI>gC#-^NoMlqRSt19^Rotvc(N}4vs3Ec$ zcJs!mR{?@|(ZN!XU&0cu8cEoqKwP5;0m!eyb6n9M_)4!R zD2pF4CjBS82|>s5pPSLS*}XZxyVWf#$4$qF1E@S$@| z(E)s${&11=PNLsw1bRbg{&!@b(ENQ}A@>!PzD?c)G5dNwOv6UN9J zcs~yM&T6#*&oDWZTco`&`w9p#!mPwP?wQ-t8lrwo)Rb8MRWQb%=nmM~0-{gPJ7VtZVyNuw&qy*b{-sjQ&l$-HB zVO&4iuHR5{>i!0~nzkMG?Iyjx!^?^+r9DqLmM}2;Yo%IGvZ`bqQR&A(yDPl%1l^*> zVk{`kcs$mhzYBRQ%NLep5pO9z@gu4no5}dKXWNqQ8|mE&e@nh{Y#ntKmPT99dBral z>vh_7?DX3SsS|1TJA=3)BFZ2PuA4^H4HGkKWLO732SFkxuK>H+l7iH0B`s! zbpG!#NVqKbY8T#F3F!IsDu%W=>XIde^1*GOvSJ7!6=CJ0q7F`11*dQJ!H=)Xv~pcV zl@PF;H+y3-qXsznH#HhI8Qj<09)HuON6Dxe`k1mpY@&V>v!K*5cDTja^trwFpQyNY z@@JWh#BJ)KYZmM&=-Wm$Kclg1)^C5{bZB<2{^SFWWqm&RDc|(p;^zf*O#tdTU;(W^ zDFnE)w4_f7o;He>5M*}3>Tg@OF{8|uDJC-R5X`t}Hj;OV%!^XGupv`uqOn0PR_`?!!AyVQ>Ke8$hV{&<^JY zi64Lv2}1G>BK)PoUi9hEnEHuU|P{#&hE%`#rZuST;cIt^e(poTm(t*CXhyp zE<=ckF-|?q+j*i@Ka$Bsg8lHo`kkpAj(*`eJU6z(lVtBIg|9kJERnxTMfy=-vA^N! zf?>JnuJ|7385?Sw;|QgOr5MTh&G%nrZ=gqQ;d3j+ZE?^e7q%*T#_bI|UVBhF;(zXv zIXcBp9*0#Url72s0HQhjE8)i{Pmf=fSuOlosgwk~{giP)B`eB*L82N|CE2zv&St8u z?M_SQg9^lM*n@6ZH+3R5w&(JBHav)&?0a~5n%j#gP8BxP(7J$3laAGb@WVuNC*0!7 z2KqFnQ>I&#j&5#`EXcn+SL+h7ootm01rnm4O%^rg_efW+SnJ7;BZ957M1(Q5hB7&K zoyy$idA(_TnXR+`qrUGy)6k={J#&6Rt1@6E>P|*`T1mYSysYbV&QBM7!HTEdbaI2~ z;N0Mu=-}g~ZA~1Q2EI!|%A)>n$YQOT76nnp5i-%CEWxX<60=NSpQA^?H+)zm9V(2e z6UhV?wQj|sN$R+P`h$;c(+d%j5Ls0mp)%+ zi5{bE#OAj5+P811;fma(A3xP!4Ynw^fP^FBJ4L?=K7cnpF?v*sPWXdv`FI(w5UnLR znr*7fw8;?kIx{cRU+#s;jvbGv~g6rn2 zSbMI%clHSmi>)BuOh%Kisp9BSs4hHhLHIqf*tBOYiL%Qx0oIJ&kaOl+2^EV zYb$kF#*dR246*N|H2COI%2H9#*}Wq4Rnlp-dAZGw_Nimu{f6IPmG-{8k%6(q%)R{c zICF5TkX{RJ4b#PI3X>=2m%cEepyp7Xl_2JNKYd>H5+*JATwSQ(*-0o_%F>d0VC%+6 zYO1*q7dHxGMVSQc#U~>~a(SL?Et2|rZbDEb@tr!`5DdvL)i9hYz=KM{hA-@W{$(Ng zRj+*YjtW44zQm0Jmx<2r*xKX{lK?D{c-%JSI!=cwt7#8;08;NLY)SPyf+;TlsAyxt_W1=&ig^M&qt1{4#bO|I93KYT`D6bfn$ThxzSBk{?fH&g%SrC{)~ z@u-pNj*f1V&zLn9|AMvYS?ya(WE|vxFYf7c9HCLr#S*Dr*cFW{ESkouzTI+DllisH ziG4777~B%0FI&;LM&!qDZe}q#eKp63pjQ-4U(VMn3aKYUP+?#VxWJx%NzW$&DcJSm zOla$)%0G=Xj*ky8{z@r~; zUP6uMjr{^L^CLVx5$sI(Lk(IAnvDD7l)^We#ld6c7Ap3_KqJLyci!J$j$~(Y65OZ% z0qnW?4$jgCvuN|@hX(oZq@x_Iy)q|H#`AnX9(9g+Kf$vK^BXVx$Pye{0j+0sKY|y( zCv7j4qtz-u_WwLb(ES@axy=~(5}F;j}hzbpK8a`?wtzNSu1LDYX~D`D+-;X(i_#*6b4 zbVc0liH$Yd4LL^CcUbP?6fD7Y@Z`Xp_`|E#Rj_H}pZfR_{flEvs(g2OKhBukuo$sd zDjuXqy*b*X!&qx37jf_X}YXi$>CaoX@A z%axXGUdp8swMg!v+6uHS;-k_3yb+Vz7fwkHtf2fU~jvfS&CG=fpGcxcFZj7oB-& zifizcOHt-s_FP-hxl-=~5j*!d=mqMj?CV4jGyJ2BmHEwLLRv6-K7aEx=*)53M>iDB z+ElV_o0uHaYaSHBcFC_aZQ}gKxNCi1^w!sE{yD?6KAGAg8(>MS^|FrMHI%jr#&(hH z)eWN1afR2+#m@v2Y@Y^vON#xf+%4oL?eGYyGgrd5eC1~cr`5Rb8)6ryu$cU$rk`dnKJw~a52@3oHj)1UbVwNxD2 zhrgrmF2zTpT|0ln&x0oJb}6&-az#B$-q21mxWWmL4Y;AA&^IVUpxb<N{nW(cjUxOXv{9*v9>H!!4a5ISlulARM58oRD2;gJ9n8M-o`&j)}YGeGTO^ zn}g6DHn*{0>q+&|#?&)XoLqBz`m!kQ=uZS+{(dU-$LtCO(t$qP}e9 z%~@Ll`;XtjDoCh;%Wywy9UVf-UgFkZSc>CuC(**>q}VfK6LMqW8ojpd z@_t~OF}4gN>z{u7#m-%7lI3OnQ;CX|g|SJE26>K-2fBlzG((zcB4H8-+m2u;jJ$Yr zv8w_lQ7JpUV%K7)3L~>c9(v_}d{_1Z$C=Efq|=y(3z7c}ORnmZR{99&4K0{i&eS&? z@nQ-;jc*vN%W+=!q&Y7$fZY)O=uuW9ScbG~&CK@;VqvAO*xRcevGD!FP}Ej7>N=SO z{kc&~L07+qt5`lHSLVL22kuWwbFsfVz?!cymt*ieW7pCqZkokAL)=&5cUy8{aTl%fsq<&O3;=)Clz4+t(LAiHPyn%;; zpa@i$t9dx*i96a1+KN>$fehm-n@PQ25kbsLK1@@9=d2+)T4?Lwj0ADKH`%nVRsE*$%u;ICF9aDMZXpR75= z$-`c+PTq9KDzm)Yw9KHFm=93PFyIM)uW(sjOTDL|PAw9fDyl|!NPKwq^@pG3>{z{u zc~a2&Au{JIhtr_uK_2(;Sf^+b*=z>-Dl4iru6J8LeRAFByC`KH0G(y(C5G$b65_Ce zCDn${4V?Ca;sgFLMX;(j=AcOsD&Y6bwK?fDuP~Y3H>MLUg)^&65fo(&{J=90T9osg zUu&~lQ5?47g)I}wvX5{R>bA)zMMy~OEEZh7rGm?e#};}UT#v)rG#@T)YZv?|Sv}Jg zAi)vaIc)r;5_dsmue-!^q!Zt`m2#@IlbGTo*mVBw-X_P?J8~7io!fA#`4{Nh?5O3j zlBVU^2AOj&`6%1VPW#l_d|Qj615`EzCGMaYlyG-xpbR7>J~Yyabc=szLp%M2vC04O zd#^w$tjWfT!-cSy;O;U&Sy!Q{l2}nRbTn#4U`Hs%XC-@e3Q5IFPb5D5sla!l@9Wsb zu94{59H`Oddeeus6tjM&PmobBKH5zd@bn&?m{cFP9nEWW(MCFM0B?*Qlk>#H=-d7P z)yy?JhQOJ*=oWL{)n`DtJ&@5nT!dX~+FysYOBC zA+uwFIJ41wQ`BVjTti%+gAADO?xljeD*wswN40+C+U)24$1gm{4Sry-eWl8xAW1+&N8QJ*CKBy>IZhzzT* z>AGHJ=g>}8RbQu7S;>8HVnCc4ElBlAwOOwC)b^LiB6a=YTm!zbp~M0?#%cyup2E?v zhnU~Fd;meh04FN8!u%Fv*{FPvFd(uyxA#YyIq?VBBFn*mGIJk)fa{LO?goo-+KgmY z4+WhH0t9z-t1Rb`v(g^8gj_3JK{%`eY))=h$sT3%WJEoh^UIB0x^EE;4I{FBrlNH* zZOz0l+ifms|EL}f76@n)(U;j#nH`Hl!3ZPLjd*lKRVQp5JxPaxDAA*6Gti8vi_E+# z%d8nL1`2^wJ&J)T{->;(rP`w#hmF63Xq z|A(c>|H}A3y!{h4i~tUGKeVs63~d9M2iajGn)91zD6A_tTM2vcS0FDIPL!|0_hGP- zac%6$+}@M*9rNi<{7W>6EI)u88~4pXiyq4}UM#i(?Ie!=N9c}Vt)+w6KTTA&bN}xc z0NK6yUoF{#YX7T|&j0E(isyeLiOuTRvrAwNt(`k`CFrRJU9YG|FA~=$8ixB6iR(k+ z2>(wGbbgtv6Q+!O#L?zI@(#UVqt5bsCj0Tt-)}mz_~7KvjeEl}@;j$(y$1)XvOOQ# zNk6ZkKCGrRoF>zQ(rrl6qN1>Loyg$5JDyG>-uhGfZ4?kqN;s9ol_+Q@{yYJink^4^ z(oQtx^|9tHT%AfB{yqmgc1BM9uhaT_V7&C9f!SNH*ik_%Fja_zSrjzvtul@mAY(vz zBhS(G8YbauOgAV?KI{b%Om2dMSKH%5H7@2}MHQaS?cJcibM~b4 zc%xBijD|35^N1cbT{N=iFJxA3{uxHqIDI*kGf)Z zSw&`<;IU{89HH`Mcr4?JNChYbj0+xgD_F_iWqB>@JyAN&p>uV0@q5Pn)>0>(i@n0^#NquXh%9)5y9_Mk}FUs z>p3gkTUb+ZZCCYyK&OdzykEDNI+Hbg<#Pn+v5=Fumqf;%RbH^H1YhC!-F~#$`IHy@ zP)=AM<|$t>t4v-8f?uvDV6ScWL^gB*CdKJmtkyR3+!}DS$_Keocko zcmTFa>QFdaijMF2I=OQ>Hx4`G;Z1cAk0$x~9IZHx#uuo>H+>12+iOWRilp(ioq^*;&7*iny-Rw{Pk z*v!JKbJE6N8qimBYg+VEu$t>QntVMqX&TK~u7<+?_1WFj^?O(xi-7;RnV^t&_h zA?Aht)^#r3ssyq3J6ezpW-zHu0wSw5egJ>1q1%T6HL(W1W~ZW%9u0ea==yLxh1L9e zsmDa5zwQAa{k6}2muC_}POH3PVe>Yum!o5m}yzbVv!v7ewN8+{~%k-)u4s+Gf zTL^#K^pT?rm~L)4zJsAlH**`U#r`Zs%wfrXJn_Z-%)n2$0R6cw+WI&fPo_zgdhKU!m@f3I5six{q9U<`a${uS)fF&4z@04(>%yl-B$K6L z{-cr>%N^*gFR=B7=6B|BSnG}SM!zAUH2O!`Wji?_cnU+4SSFx%ZvpFb?dVmXeMZzf zrKF!HE#tCsQqygX=ZQ{KC6}EAM&a&x19(r5ZJ@-*yU3}1(cS4JO2Y{kGexuOrD0fk zxGnIhN(>0<^3lf;f@mn?8gLqiP3%x+x4l&bRgEv7etm}xy}s}~`-9B!j}(c4^PCs& zG{rB?i7FX~J`nuV9A`q%ZVM_CtkZzXoVoLLSU>?r5}Dr|&1+*q`XArgl>icLi8VuT z`~dq7Kid`?*?-rBg5i&{Zu`fi7#v%GdVH&q7IFuSkT4ZoATz3RhzREM9bDtLBiBOz zKM$BtJx}bKW!LEc){S1iMDL0KuW{L%hc5vTbb+sQS>;aTLwL|l>5-WpF|a7rDe47Q zKoVygyjfW`gZIytM}okB69xUXL5n);#Mk!5y)!+%N%Nc;1O&9G_8A`FG#ZZj%lmvI4=;rEqk;Ws@}sNnL9=U)D zrej%X(L{%&o*E55oY;0LsJ#QqOGl{;DBnva{iHMS<2#k$YYJ4$#aN-9LsW?eJtxX3 z`{506Y83Rhp$RU-=Y$|9x5_T%ooVL~NC|T`);FmC-5>u)o{* zL$Pf1DDnZ06g<>vz@vrNKsrddunR7_8Obo$D=4&EUCUQSyqn=tnnwi>?b@84ZL> zmfdz@LxxspL=4$@AvT|^m6c0Q z-dB*Z-WC;hg*#rn_Z+n%PeUstXFh3Hr+yNDRF0ArrR_( zB&Q*o5AO~8en-q|>V?D4fyxHt66YBo1U&7^gXAA%!B5NQBvL)wX5ZjJe*%w*!Hy=9 z59|btsM~r7GOAO3jWX%NBBK){Mp-Yy0-k3Q1b#p?Rx zzO;U=;c7~)<6?w{kW2T#HWL`%`r@G@w>aBl7*_x@v?4|U_BB2AB?^(Amc~-Zyz}rLW>y-(3pU;9HCI@O+EXJ=-mWrpf^CJe z8DWg>iVuyY!SA_d1t7IyuyH~IXVNnwkKrVd&d|wpU(8co>=O<0N4>vA8wo$rf6@HH zF7o>eTCMgsK035~W=7=3@4s1p8(h;gY$g;}X$f-q`8d1Fx{)g3@yfQsFNY$)Zo-7^P8XaQu82U0-?3r{1GgEIH>FBEMmeW$yC>KF45bTBanpArKD|QX}#6Tsj zdXS>7sBq|OqlU4jXTkI$jdy{ePIS6uO4k(5PsZQy_*-Jf?AV7E{AKsQ2S||94+-`Z zibP@CLQd99qNvzn*8p5=Y~{+Iy~*OX$qjcF|Fvj;gETr6m}X*a;&0~td!je1+@rAX z)5HMr-UgHzs2$p4u*J}74|y{Smha!f~X-((w@w!2j)PpBQ%nMG<5RltS*fs@f}kw z(f71KML{3J-M>u0=)TQTuwM0M%Z`SAdmt6Nqg>-(8oXP%kX?aWdAeudGubfeFLkya ze9bLqyQdso9~AIa;7@2bh0{fx61?Wu4#SyAo9NCpyv0giBHFchH2A}sJu)yYJ-YEe zSyg2va!ihBcFYOa%Ft&Xm3{jw&wECFUo-orR)vwwmE_I1iqZS=fh8zS+3aGG2D;l* zC@_Eb%IX=2kHGjyQB4HQnYmpD^!p7~z(Yi;y=pf2d`*4mUc7>ik`y;!-7PxUt!mLy z%X#0`0*=N1Iou@SXL3=6iZ7E6jtII89bd_%x#J|k6*wg&0>BJ+uV!`>gS|Ik6ilO4 z_$3c?Xm`Y5m33aHJ9?ztc`gx?38=AxIibuEHWy`FV+_>c(fS`oJdtw`^2kH9_Z^vK z-NUBI>$+`|fXUcZ@4k%>GXEm^W);Zk*pFa0)v;T!BM&5(3_h|x$ZhdYAMArzuSpSF ze_j}XEkei?fNkF2yIxwX5N?2gGU}?=scJSO>iVN=53K8p;Pp9QY*wns3E1Df?x+_zz@(m2G?vS@;vl&LZC&?e=M&6e z&QEexF$C;+27Tc9qkYbT`O6&L$oe4|OT0^M${s066!h$1P6rz@@CZlgr2ixyTH3-H z0-iEZ;~zIvC>c?a;zX?xDV?I5x+bk61-RmqE#T`ht+ziaobrnOiPnjeB0rNhd~4BK@u8+XCd)=bBh z<%k+B4FmSYyeYbM(+uXmvpDQ)+scDz(Cincp_w*Lm}?Mr^7R*~`neZ36_Z23zPj>J zv5y^P>ksM;M8A-Q4*!%6G%V|Nk=sc4=hfBGnWk?t58goqn!#Kr2&OOGQ>-=jqzm@F z&TqlYFJXFgO+#(7x%FuxqDPeV;@=&B^2%*qT@VL?8EbtLUg?kzFpz(nqu71isEH*n z7&^!I;XU`(?CN3Maqp@~AEPz3MB2hVR31hF56nbEo`RBKhQn98VBUFcadXSHfn}2&a1O(Vz76d6v~4$EVT+Y6kh~Qw zO1WZ(B^(|k|4wnmcag@W$I_E+u=N*~J_MB03;dFu*Ga5qLAf<MJYFlw~41T78Fy-GM z;jACU-_M&Qt}aa+DTsHuDLO^%B4)jhNAoVZPP!rOb(MhPz~6y1zu>_#-%X#X)1tx{ zV?2LWN`DUfjFevHoZVApd_?u)w+N#aA)Lybr%MKND*Qzqt7E!i_E=z21J_#CvadGj zwMYE4`}_Cs{nH9%N-*C}`4OEq*RT`v>pKPc+b_qB7Xn@kzL@h{3bufdnvAJEY@$Ao>x@5 ze*BMK7uvV02nXiD5#z)jj=!>Nh%W^A6uO5W?|jA*^X`KtH*vqb2@R?LuRvTV9lOV( zI(5i~eYEkDs7R^sT}`1n*v6jj$-y zQxk@o2_ZC~f|GWq-2;5uN?+cg+QDlY)5Q@Wm4B@O<^PNeVhWF|@d*QkULPa1hy&BX zFH7Pi0M(E+brkS!x9_Zpqd6cOCB6DUXT8^*g~V3?*>hH6`an=2G3e&!ex3-7DwRHR zQ|Y7A~0vq}H-mv@}68ak+16X(BtxMcQ?b{l-sqQ28F=a>y3p zE1yS~L>zBvmduShRGcN2#j_}%a>3~WEC|(8t&$q)5nf-oz2ZT)-(>tAo?nQtTzy9L z>?9De#Ymd&eWSUM$8W_P9u-%rb%Er%9Q7}^zCY)NbCZ@j5-1G5P_;k%OAtO1CK=1x40Z<2iFSz(ySsh9{S18ZzmQCB{>>7>1& z!p?Sn;I{fMOG4DHR)iCWum!v5K;tIG} zgJpkq@#GLx!I$(kQbR(2kf}rmJsH?~fx!tw^kv2OeTxzO~@CkTEx|MaIPbgxP|oHo`_4r(IK1}wFsBvl7QmFO(S zWKZ4wVX~%fa1?c}poY)l2&WUTx#rd4FDH@iB{#TqCEgDX;0mK~{2Iz!2L0VkPWPDA z^0JTSiTP}>|D?9H>m;F(OVkH-*LUM0PdVXKH>*U&;nv#c-&8jocU?y`F2y@6r9ext zC*He5el3-C;b>#WF^3wkL-?_SDn)nul;! zJc2p&AMK@uTx!OlOrJWR;XH&tC19y-VBU&F_3%qb>Vd1L{mSZ$CrO)8dZxGX2b0%A z#Lsr`;eTm8a9iqEjOsAjW}Bi>_Zm<@eN=Hzp#$BqiFW?N7w#2@x}^wyUE}fRh(G%O z()T%=vka=iq>BeP_Wr>gHiw@|3`9|7&+sJo6$>0K=RSjpHYQlhraQ}yEqPgjc=CJ+ zg*v01H;C#!`8=?VG{1q6t{uqj;H+g3a$=_QD*|4hWIfm$pU^}sflEg*-NkU7QH$|5 zCyvIhZm_)%k+B=w>@$e9j#1yEvedf%xnnrHmiH>&{a$Q13N~!jm<%068%>*bgP&O@ zgN$z-#j8M={Fd|ySRTTUV^J+HjWovtxed4)sbW$0eCD9`O78V_%M-a}5W=7V@!*E- zC2`!p*z<+IVtf|2)pfN{hfjJ?5}feiIf>nV1Lw1d|4VnnPisPYzYnz%tOC`|tmOsB zX!N~22t_VD7DU$)f|}lP)zYmHv}rMYYmCi6HPp)W@f}Wbg|q+Vh(q0Gu6^*7pa*+9 z7Ia4Y+UbJd8I|Cpvd*1Eto%#dx$jAYkNl?3(h(^qS4e`xl7{8QGD*wZ@#*5>^d>Fw z%q5gn-)3vks3>U^MNzO&87m$v1dZ#uC48AK}(jh1u_N)>g}So{LH%XD3Mx%T4Lp zC)sL!aNF|5kWQDib?xDe-ut;T?zl76i#6+c zQ*S3jOP~J_*Ph4Vp7(L*D@y4-;>LSSW%v3Q=~sr9(J?e`a~biPHcq>!$uo%5tyK6E zowxhorHSU}wjyd&lLeW_jU}@Zs(WQg!{vLUHA$tu4R?({XQRm#C~?@Q_zkh|`QvGK z2mW^@nc|!q4Qk&EnTuR1NiOoyA4qZU=aeQNrp*=vm&x9Z`fYl=yk)RZzle-Q%j5JE zlP&`Oq|i2I(m?a7dzB!Nff!4R^UbXfT%;*MO5d#ZGweUe^-z&NMvv6_QsSoRuwHpM z_iWCJnVen%8TmL+HG^k=eQw~cCIAr}Qn+jScB{XO>b1X=@x8*G)r6Rzr2jWf_1A67 z65x;c@+)s<`64Bra30QIAofNNB~H;%S)^p{vnKSDQUVeV09Ep32cVl0cVV?O0A#V7 z7B6uDJELfs32Gy^h%=m`1DHG*)K^P`x1xIoN?c}y zzNgoDl_zj@zj%K)*zOf8)0^cYM^7X#V}^#dS9BjjiGQ8UF4z0y(lBmFckF-a{Jio> z|5$hO%Yl77{}D9v`8|#Jl69FVAMEjm6l~z#r|E!(VqR-W9c);R-nw)!-v;_%!otoBUW>73Q+O=?MDx+64Qt!`jkg z6$w5mZPPD1Y1B{7D#oRK=Bv7~>f4NZl-kl9%*L*2rGk;h?Ka;dK+kuIss$SovOb|= z`>CHi8L^r0Ub5-#nd?xAS?aEsXvNW~;WsLtSjEPnx44nkbNBFr3O*;^HpMq(##jj= zg!~gkRnrt)rPBr6=ifkL61C-$P;S=xkoks3rY=d9Y0JFU650^c8qn=w62Xoi=}9)B zEu`5j-AYx|1ov+JJ}MAn=yzg!hEnV}A)VJAbszrqz@<#+)*WBbyZ0?lE!1OATqsUN zEASQlN^1Jw=5F>sfKQg@-q*?x8o>rfRzKUB@wuuLE24(5l zdrBX?sp{j4KHrSC@g4Z7G&wq5RFNF<2;YZbR7UZ=_|s2leCnvQz)kH?!o_Fb-%XBv zjIl|b_s(=WX}1_6&z}v+K7Lm(qP4BVom~6rblQT5C9d@O(_83&$*S2!BVB7QlgMr=g zWgix+*Lp}%>!V(Obab(GR9E@7R!)EY>wO!Z>UpzTWA}_cEHaZ^RfO_trKI|%?N#4+r(d=Wn)gmmLjO|}+OacCni&W$6oEoM$d|_K4SnhuWz7 z+j!8r&%3SkpUq#h(2Uha+fNt|y*71-+hVqbu#fI)QkN2TWlgy#04j18!TL7In{MhcUE(@X$-8={`nacfsPB) z4pMbKGuR;Kb+%udRY&0CKA&NQTSVq+B+ZLtDT-0`@I`S=CJ-+tRrz==JA0wl(0p;I zt+L`VTlmQ7FgA@17dKYc>;?x&}wthb+CBhDGVwaoeSLHnH!CF;Oj^=LjVl6CkM~`O${Je zF#`d(h3hRc{diC)nOLM?fRVHP_AF^#Xo=g(gc3Kw`N}foSLj=D@gGXs7{5t0g#Lf} z`7;~jtk$R9w^kO6p0QgmaF%&mMc_gZ{3{iGWZS57OP{dZ|f& zi+XATokXS7pNzT~ai-%HfDbsb0O`I?EfB&kt(XjLrjtLj10R=@%&AuZ|6HloE68Em zKt=tkvkdDtZx49+v;6oQUO1U5(Le$-lMfGE=BFwHT))M{my=#Ugu9j)*csQQJV;~i6%30JVv-bEc^JUTtW9bWOR8V6wk&p|s;_t> z)y2wKl){n^^`px7wkOejJ_k#ZW-uTJXKSL8j!kyLDrFmBq*9UI` z4=Ga;DA=4j2}R^gEDaNSLPQ&DqU;m)`cC)WH;Z`Gx)=izeN^cf7I-KX)Q_*;G2Rni zN5Qqzl|mk3mI&H;)1MKTk(K5-^K z=jw|9#KZ?%U#%Aqjo+dt?`t#PsfGk$0}{J7bR8Z2?=d2K@m5zUYjenA4Enmk+b1h# z8aXpjsW<==U8_QE&LA>V0^>cEg=F8qIY9(XPY0-?K)e@}V7pJ~L2jPFA3J6&q->F9 zQlCK}l-dDgTj{k?Wn$p6U?~OkW}=Y2fT}CWuUo!ql#GuFD=(U#c94}79xZT3K}b{& z>h7xf@obi(AQF!@idm=HDr=8 z3ACbcwDmP7ia8RqLkyi_CS2qGDaR`}_G^THNsByjBs|3AY18FozAXv+3;UnO@2tHu zzFZ7{6#OHiuKySvjuP>0Iw^X*fyK^St1Yeie(3ue;;1p&;UBW{F^_#o^D55-dX_M- zXPqyAhEQd~`j$^2mpZ*#?&IEn_x4H~6;7z`jpo_{mcvzM!vnacq3kKG(&-z4iz%g~ z-1$=9b~U$wHaGfO-&H9%V0qyz*2EYaci9_G9&%(@>P&9@UOj@8^XqMvv&RhiQ0~~p zb*Js|{acoy1fgkdQ$e0^i1#I1&db!mn+IY#TZD7`ypMg+N&5C!jrmsPXyuLZSs0LB zV-|qmJ2vqb*pxsmFatm>cc7r&;nO;UUp{9uUkoaM%x^y_pcT=zxd!ARU)hG&)-le% z*#t6@fw_AOm~p^#|C?CS>!tAfXW{+7yyQb9$`U!aKa(_>kGS>67%e|t`(-T9A3zO{ z*AxHj7sMM_HO54s`dh~SA+s?7UK;;}3nUcP*APMA-IrF_K)DiIO-=hjy%ary{K zm*|mBKjz^<@CHikG>(Y6{ZZ1c!l+o^9)MV&tQlwq(y%6@Pzz?()MBrJi zZqB)l=ZJw3S2PgMd^ep%0!0=VfPqk5GgAk6ZxGuBejSr67l|^CxAqA|t?!l-`5}BP zSLck<@LL6=nC?2@L|jcPcBy4p##+>8ZR43e;^*+5 zRR0W;{W`?>?cd6A<|bZN(%c95ba|=ThJvFC51B*Y8w@l;@U9DvqvMqg|B(Yo&eICj zoZim}aHbmf5Nhd-x`+G+xA-)Z5USi5BP0~H?K)S}T}z=P@MG@JzHoGMCU{6+uR08) zkrP{9GI3yDED_aHOQ$qM_zQrdxC)kfJ!Prz|M_%8n>~_+M$vqSV+8%2Xf}XMTv9}I z^!tx6)F=21pW#5NA!}rb*KL^t;^+FC{J-Uv)osF4{sj9(rNs%6zVMWU_wV1gShn%rBv_(*l8+A>DSN)-Trwcu_rLmWXFg=q_!F@>#B*@@Ek(^`G(gbZz z+A}2-<}auFmELhbd$p$(T8FqRW&(y;Nem#ve#C%;`f4=qhYa;o#JcM6+^#Xckv`A9 zeA<)Nh$8!gUs9=vAvU4JSec5?&Ny-j4aa(9 z8pS+!UdK$pi;rc)Av)=L^dEdR4{R+)-DDZ}N9>AD5XStNp@@#R=l*G+R|j!8{~^<> zj19TuHtS$zYC_4{6PBZ7jIJBUx1JGFTgSjuW&)Yy-se_qyN=>!TDFO?>(?oVK$KY$ zVnB@smjmDhRZkl{4<c~aBU#Dpc*AxMmaCE!B+WL=VYR@7>vr)?|1+%rYx*ObbQdf zilzgJ1{>1C>;jcOUEyH*48mBkXcWeJr3*9B^lVmc)ZJ!fC~X>X2oFeSibJ-&*EFPn zH@40aDlZ z8@o(Vpwoi;Z@)%9*pkx8rEy_|860`E-fYty9_b#ff1L+&HeX5 zT}Mq!aM}IOUD#cb%QtAAg>zSQZW#6F7|!VS;->YDigb5rV3^r;i2_uIuvK4&G7xA7 z*zuQRC-yG?)TFFQU1!F6qQvPsqp9r5ZYR*2H9gEfUMvQfnu~lydf3CAy=>@)LV$`b zE0Hugd`qCmh)t?VZH8nKHb%E50Hvc5;2A^>0R1*o9c>-u*)rez^~aE%{KjNXr&SUH z7tc-~<89{B7tkH~kBNYvfQbSWsxW#F@Er8`=@t(_$OP3y4@2LuG`s@WWt zfnZxQ=+Q;04~`>I?lpFq&tAb+)DB+M%B{@T()Dg`q1FSA+})4Q(=C;uNM$r0Fz0uK zA?FWj3ey!~Rh4FOM`krHdaXNM#daq+Mf%3Z;yOrk_X9X6Cy^0~@*1d0WrFK@`Hiin z+H=fiRzC>7dmLN=*@SRk3eHAH8JVDSYsN&XQ3*kNu0zd~6P9hA;3qUFehAfhl+{MX z0!AO$eq$`Q%W?i?0lmV?3JeK7Gd2uyaZvygoB@~~|1PZCY{TgVE- zRR19j{pe*>e>ZZ~sOV-kDLfq>92C|wc=yAcSW%xfQ`Jxt9kk&?*Zc{+4tdV%YWb$`|oeYqZr zC`w;(xxM&@zI0(#V*HGcGp6Q`n_S#WpR6>_EsWLiTU0<~D7K=v9lV+=Yzi+`%{lXt zB~ss<{x%ONW&keJFCgW7r1J)-uEv_!NH+aWun1&GI|3s*8Vluf**Bo=ifSrbsqJ7m zzDOD?S->0}WC@cV|20o7-5tX1gTLV|un6y1u4mYj^Zq`#zt?qkte~582V2PYulFWk z8ooy*qAuP*4C!J%k^xr36oTO<6WqrM>Seff>t43)x2jw}As1;#US4Hps%4U)RcgaK zba=?jlwn0CBcGiGD>LwNfXGN>MtxV#(SCw!v7(EfOZ!}xN@I4_*z%|X`Y0*G&H|ex zD`&1pmqUjOmH7(=MZljQw_|-?qTk+0k3_9;$4XhW@K*K<_ig52^wqb1M<-TnrTEa0 z!r4gS-)!>9#A=1}{h*3y;Xa_%Jyu9Z%c}K^*XbfN0>CtkeQ2ju@IqV1C!hU=p7G0U znhE8@dOpDn1h4-U2{4>w_SZV|RW8cWjQ{`?j$$xfZ_3rJ+=eQqij-$}6ukihxLD0X zvP5@qJn1r&{TaB6ihK4UVW5Kr$mM;(8sODMt&8@&vPhZ%o8=el)qyKH3ox&fCGc^z zREdBB3795023H%)TqQfv{A;ii;v=K~iW(?6^_2M%Xvo|8mfN8kKp!VQyIJC3X^A~+ z3N(679H#Fgm#20?^@rMO1n3aZ)PY@O0F~zd&mV{wR89JSBVxLX{15|;%FpLOroDb4 zkeJ;LM%N5a;F3+-LHz{HJ-tmqqr`)%ya{ z*kfGlqpeagFjpkzk4r65c~I#SMOnmIo2oD^(R1=vamsv(2gpJxr>ENqty5=BMvU?F zUvh;skWqsd@>CnnvL5Q&jW;!LWAJX^G-o$oB<0_`XhT$|6xUc5jJbQJHLj1c@iBy4 zWs(E$avvk$B$j6!PeM2(~dRUEiPXp3$4)WpI0JGql*DmcnlI}Q0E zipx?zvJig>%#)(f;aE|x3wu@`yZM&I0-j>KA5AATX{?*(NN8t;&u{HbPU+%6Df~p& zsK5S6klCr~irZQ-Th6EBL$(Eg*C5^J@ ztUP^^A66-m6^Y?Zo+f(m(u=(Re@S2mh17sG71exR z^ZK^!?1SEuok}O0l@oEDK9o}p_COlN%@YPWTdBZduQ?zg^cvW)t)CVAsRDfEGU82& z&9XT%X|BlGZB?IbA_}<3;bEU)csnn6f`Zoj(Rxj3=eon=j{@3FC!wjI-8u+qn7kSc zbgkoaHy(f|3pX1#VZy230igJ{c5HR!3~zGZT^a$ehW}Y!Y&yeQ`~sEo{@)eLb_kb3 z!w-JQfL%oD^iZ>$(`r(?s7$rA&g!vi!?*t4Ry|*B?KD~{8P*97h?M+JDk_xCrBd4A zZ-23rZp28#tP6RBH|VnS>1s1o?_9bzU)QvjZy(HfKNSQd$YU8qaHHw2Ed^j#Znz2s5lwJc4)&;xClr@-kC{n8 zRrnTbyjF)(wLkDcJ`^pzBHSqa2t_{hTfO~{Nq;=c9+roEvA#ee#vRZy5V>T`W*dbj z4`j^_6S{F#9edplOaV{sZ`320=>qTf10`B6Fg`X}dieAH&EW(#Pa~*W)p>2~sy`SI zlK+T|03P;ult4%^rp6=JeIAi6JbBYaC3T?~p^?J3&%r(br4u%d>pN1!z`iD&Y}~yI zMa_*1bQuDI9Owfl6m`~B?B3N@@fQV^5t{`}g1aI&L@K2qY!g=b!dbtEwb7mZ9+=Ys z=p)Yg`z}i&USP}wbzzVPq!oUOV9+6sUmo$Ubf}6!F#+@dA|G&su|T-RaetqA7(ZtW z<3iaqLY8Y25n!3oh;@uOYR&r4Fg-t_@3TmVVQ#0==AiARps~>1^~DL1oR?N=4?i*j zWhbh4RlE(>>-ix~T;ty=j;W{wess=2Ih4>BS^b(_CqVY_KXd2HqPXjHV%kCYm%QYD zY4yp~G{^dW=?Pj&;v}=^W##v!slM_q-G|T()maXR{*Uog%6-9ydvC2|6s%BeL?fw5 zCn7eKJ&ApHDBzZgFiY;8qv3vfd0B`IAcm~KsJuFaPxe?={1(Hf-P7jG-r1EHJQU=J zNo`7c@bCed#=UlIo=FVOf4CcUAATRvU&Jnxx6=5CWEnBVbvfA&NfX$)dvtCczTl6r zH0ZN^G2nLUTqpj)r9V#OweqxA3PVW|LVmmh+*&U)+*JNG-v>?mv0U5qY)zr^B^W)T z&dq+-{X6H!pr*(DDVukVS{&kQuj)46us{~10B04z`*fJ3`l;oFn*MuI(c}Yf9DXI- z!{#Eu8MZ*d1bL-Hxn1e#2=eZkQ?=y}G#md-7fPr~HB_w;`6Vvpk!1}d1>ChlD}UE8 zWF1p8YOqLmEk~ka@Ib}30-(C*=+;WWX9m3C=hVy$P4d}_zaA_L3{|u$2=1FfK?B>1 zmLlqC{ovjJrMm$mD0Qi3lMmY72UUE%U2qMUu;NJ^KG7R;hr5#M{ zftEMv-W-j6KYON*)Adh~E1?;y&i1CElGsD(n@;E}_PmsaXqq$GSD9|6d z^Iv=6zCw|q@Ax6OahHtnZ1W12u4^^ob`)w~g<~

3DD0a|hUl4RFuNLD2G`=h}%K z_kdFTTQNXIrTzw?e9{gdts|hNwh>zbdWC1JK*HUm;UA|!kyf;(KWcqrcJ3t++nMFm0V#Txqh*W=|v zd~unnG9bR-oa?q9J{h0~lgq{UXyd0o4_x70+?sk+iYUgsbgOP~eKk9I4MBn9wfq3S z;R8idUUg)I zZ9wf$y-oyhR)Ka#-9nIU5-1|{yDygXHX!(Zs%Ahp{uui)07Ry%V``{*vtJz&Uu%Ff zJvfg;qO9F~Quxlt24s&09YM38>=DP0)@;>j%~(5S^Oh_g6lr?^o0H$%B`HG| z<#bR`j_9zN!q5@28JWUF0MMJ3wOF%pKBjdZYUp_%j>7`DhoP$BC=M&V^Dg`T#&KW` zZvsdTFJC~B3~7pgXexn3t8RcJB$wO4l@X361*ZeaDS(`21}ZKw3FPn%ag!=dwTy@V4MJXixv^N60xd7~ZCpSA} zqt27&4Ht6n1bS9K&xhCi5NJB&L9}UaoJJ#ng!4UXdlHBs12ZK04fW?Yo2wvcIZ2nxI~~7Rlzt2uME5! z2um0gm6HIR1!lknKm%THZ9ZPQ&o6ijxYcMVQq7hOe_{yt*9AboR3|ofpORV-KtTac z(baGlN6S0oZ~)e2zc8e&&aF3Tesi`w>Z2B^(y->c+sxowY-)YUNzF7;6Zl(A4`oDi z@vH_3J?_3?X?gqq1Ki;#dw~1hD~M1tHsHh4Y*^SKS0a z&zM|L8@ni+K|oFYKopt2&e9IB(x;S=rgy ztv{i8dQ#6mSkyy&*ZCDbusK18lRgm@Vf=y)yMJF+CIjsW=y zF?4}J1Y<-JWdiXwz_P1^KsTs)bot&`n_9gBZZDKkW>ss{33j%OPMQ}59)+(T5m@4K zG_ql^u|FH=V3!^!lAmv>Y1KQjWJFzJj;c!>p=ai+7apVdtvHdB5Gl0>^$`qV>^BKR z`vY#i`p#=B&#dkAcp3J@IeTR;Gtb=+tbv82_E|MrzBu^kL3s|o;8P?=BFSGA)B;V9x;g&uQ3`y8bv$0?MV6j9{1XpUt{tE_ z=>n>kW{X|Ms#uzY=sN8vxz6GQEEqF!BAtNVX@@G-P68GAeh4Lxc0Opt;+-z+fisup zotTFYf`N;H+8tOMn2;ln3Y}yo7Z2SKUDo@y5uE)h6L@(ua<%avoh%exLJQ2qK0-lE zY6WiI>nDwq3XmSA8*&)AD+~UuL_HC2M`82MHl}8n0!+WcnftNaM(*nRMap*UoL1TA zav*S-#h{UyCPRhoOZd-;#_JPuWZ2X3%H(U4pBZu-6fmydfknoKdc#cr@Utpj;k8`# zk^wZ%M_@x$+}9g_!4G~>07?M>&K|&wcva&JK#03lw&9hzEKrAoK0IXgF^~bnOBprs zJ%0kRBtHb7Ipz07l;!vEa+jDvQg}O7Ujq8ILrpI_ow!R2J@M>2HrI2=^kSSmmgJg_ zj)8#w#g`A>t}>>x0D#coIA#jvf;%!)(cci*rJ<<9CBxZ^v97BEE>d{Mfa^r(?!%wt zdV%R)uE79`7yR|DCxWR1Z_lBHz1Jk6azpFgbqwN&GEK(hIIjtM*#$0ASXr}b(7iQP zt85K`OT#KpSkEXCyvRG7ZzO{kVZ5x<3L$X?%h@rfKduXVN#S(r0cJT9`p2ns?D4K14`X{DLS+ryH^j2FH=3wkJVR54g1|ehkdUTnWLrkA zzhpEiqSf=NiF6T-(E$t03 zKVSQ1-X577w-!G)D&e~}=DwtagLc36OHz}|PS@qK-^TadDnKxVS=QOcl_! zHB-(Fzr3N<+!4`GqGuDOI;6bq;O|trWro$0SXWv*&W$|&|LF_L*&DAwe4}gkcSzw$ zE*#vo_gt40Ub4EK_Y$8JKJ0MX|eF8v~5ZT+SW zG2ccxQG4pt(Yvfze_0)RfV}wM$36@{b+2N6eh3W*aY*{FGdPRZ!Y;K!`;J zm2hPe+E_$?VwJLf>|IK*?q^^LEEXrƩ%IBa=hY`_ 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 +* Visit our `community Discord `_ +* File an issue on `GitHub `_ diff --git a/docs/intro/quickstart/inheritance.rst b/docs/intro/quickstart/inheritance.rst new file mode 100644 index 00000000000..520b4d33dad --- /dev/null +++ b/docs/intro/quickstart/inheritance.rst @@ -0,0 +1,113 @@ +.. _ref_quickstart_inheritance: + +======================== +Adding shared properties +======================== + +.. edb:split-section:: + + One common pattern in applications is to add shared properties to the schema that are used by multiple objects. For example, you might want to add a ``created_at`` and ``updated_at`` property to every object in your schema. You can do this by adding an abstract type and using it as a mixin for your other object types. + + .. code-block:: sdl-diff + :caption: dbschema/default.gel + + module default { + + abstract type Timestamped { + + required created_at: datetime { + + default := datetime_of_statement(); + + }; + + required updated_at: datetime { + + default := datetime_of_statement(); + + }; + + } + + + - type Deck { + + type Deck extending Timestamped { + required name: str; + description: str; + + multi cards: Card { + constraint exclusive; + on target delete allow; + }; + }; + + - type Card { + + type Card extending Timestamped { + required order: int64; + required front: str; + required back: str; + } + } + +.. edb:split-section:: + + Since you don't have historical data for when these objects were actually created or modified, the migration will fall back to the default values set in the ``Timestamped`` type. + + .. code-block:: sh + + $ npx gel migration create + did you create object type 'default::Timestamped'? [y,n,l,c,b,s,q,?] + > y + did you alter object type 'default::Card'? [y,n,l,c,b,s,q,?] + > y + did you alter object type 'default::Deck'? [y,n,l,c,b,s,q,?] + > y + Created /home/strinh/projects/flashcards/dbschema/migrations/00004-m1d2m5n.edgeql, id: m1d2m5n5ajkalyijrxdliioyginonqbtfzihvwdfdmfwodunszstya + + $ npx gel migrate + Applying m1d2m5n5ajkalyijrxdliioyginonqbtfzihvwdfdmfwodunszstya (00004-m1d2m5n.edgeql) + ... parsed + ... applied + Generating query builder... + Detected tsconfig.json, generating TypeScript files. + To override this, use the --target flag. + Run `npx @gel/generate --help` for full options. + Introspecting database schema... + Generating runtime spec... + Generating cast maps... + Generating scalars... + Generating object types... + Generating function types... + Generating operators... + Generating set impl... + Generating globals... + Generating index... + Writing files to ./dbschema/edgeql-js + Generation complete! 🤘 + +.. edb:split-section:: + + Update the ``getDecks`` query to sort the decks by ``updated_at`` in descending order. + + .. code-block:: typescript-diff + :caption: app/queries.ts + + import { client } from "@/lib/gel"; + import e from "@/dbschema/edgeql-js"; + + export async function getDecks() { + const decks = await e.select(e.Deck, (deck) => ({ + id: true, + name: true, + description: true, + cards: e.select(deck.cards, (card) => ({ + id: true, + front: true, + back: true, + order_by: card.order, + })), + + order_by: { + + expression: deck.updated_at, + + direction: e.DESC, + + }, + })).run(client); + + return decks; + } + +.. edb:split-section:: + + Now when you look at the data in the UI, you will see the new properties on each of your object types. + + .. image:: images/timestamped.png diff --git a/docs/intro/quickstart/modeling.rst b/docs/intro/quickstart/modeling.rst new file mode 100644 index 00000000000..ce54e63690d --- /dev/null +++ b/docs/intro/quickstart/modeling.rst @@ -0,0 +1,108 @@ +.. _ref_quickstart_modeling: + +================= +Modeling the data +================= + +.. edb:split-section:: + + The flashcards application has a simple data model, but it's interesting enough to utilize many unique features of the |Gel| schema language. + + Looking at the mock data in our example JSON file ``./deck-edgeql.json``, you can see this structure in the JSON. There is a ``Card`` type that describes a single flashcard, which contains two required string properties: ``front`` and ``back``. Each ``Deck`` object has a link to zero or more ``Card`` objects in an array. + + .. code-block:: typescript + + interface Card { + front: string; + back: string; + } + + interface Deck { + name: string; + description: string | null; + cards: Card[]; + } + +.. edb:split-section:: + + Starting with this simple model, add these types to the :dotgel:`dbschema/default` schema file. As you can see, the types closely mirror the JSON mock data. + + Also of note, the link between ``Card`` and ``Deck`` objects creates a "1-to-n" relationship, where each ``Deck`` object has a link to zero or more ``Card`` objects. When you query the ``Deck.cards`` link, the cards will be unordered, so the ``Card`` type needs an explicit ``order`` property to allow sorting them at query time. + + By default, when you try to delete an object that is linked to another object, the database will prevent you from doing so. We want to support removing a ``Card``, so we define a deletion policy on the ``cards`` link that allows deleting the target of this link. + + .. code-block:: sdl-diff + :caption: dbschema/default.gel + + module default { + + type Card { + + required order: int64; + + required front: str; + + required back: str; + + }; + + + + type Deck { + + required name: str; + + description: str; + + multi cards: Card { + + constraint exclusive; + + on target delete allow; + + }; + + }; + }; + +.. edb:split-section:: + + Congratulations! This first version of the data model's schema is *stored in a file on disk*. Now you need to signal the database to actually create types for ``Deck`` and ``Card`` in the database. + + To make |Gel| do that, you need to do two quick steps: + + 1. **Create a migration**: a "migration" is a file containing a set of low level instructions that define how the database schema should change. It records any additions, modifications, or deletions to your schema in a way that the database can understand. + + .. note:: + + When you are changing existing schema, the CLI migration tool might ask questions to ensure that it understands your changes exactly. Since the existing schema was empty, the CLI will skip asking any questions and simply create the migration file. + + 2. **Apply the migration**: This executes the migration file on the database, instructing |Gel| to implement the recorded changes in the database. Essentially, this step updates the database structure to match your defined schema, ensuring that the ``Deck`` and ``Card`` types are created and ready for use. + + .. note:: + + Notice that after the migration is applied, the CLI will automatically run the script to generate the query builder. This is a convenience feature that is enabled by the ``schema.update.after`` hook in the ``gel.toml`` file. + + .. code-block:: sh + + $ npx gel migration create + Created ./dbschema/migrations/00001-m125ajr.edgeql, id: m125ajrbqp7ov36s7aniefxc376ofxdlketzspy4yddd3hrh4lxmla + $ npx gel migrate + Applying m125ajrbqp7ov36s7aniefxc376ofxdlketzspy4yddd3hrh4lxmla (00001-m125ajr.edgeql) + ... parsed + ... applied + Generating query builder... + Detected tsconfig.json, generating TypeScript files. + To override this, use the --target flag. + Run `npx @gel/generate --help` for full options. + Introspecting database schema... + Generating runtime spec... + Generating cast maps... + Generating scalars... + Generating object types... + Generating function types... + Generating operators... + Generating set impl... + Generating globals... + Generating index... + Writing files to ./dbschema/edgeql-js + Generation complete! 🤘 + + +.. edb:split-section:: + + Take a look at the schema you've generated in the built-in database UI. Use this tool to visualize your data model and see the object types and links you've defined. + + .. edb:split-point:: + + .. code-block:: sh + + $ npx gel ui + + .. image:: images/schema-ui.png diff --git a/docs/intro/quickstart/setup.rst b/docs/intro/quickstart/setup.rst new file mode 100644 index 00000000000..371fb5bd57d --- /dev/null +++ b/docs/intro/quickstart/setup.rst @@ -0,0 +1,89 @@ +.. _ref_quickstart_setup: + +=========================== +Setting up your environment +=========================== + +.. edb:split-section:: + + Use git to clone `the Next.js starter template `_ into a new directory called ``flashcards``. This will create a fully configured Next.js project and a local |Gel| instance with an empty schema. You will see the database instance being created and the project being initialized. You are now ready to start building the application. + + .. code-block:: sh + + $ git clone \ + git@github.com:geldata/quickstart-nextjs.git \ + flashcards + $ cd flashcards + $ npm install + $ npx gel project init + + +.. edb:split-section:: + + Explore the empty database by starting our REPL from the project root. + + .. code-block:: sh + + $ npx gel + +.. edb:split-section:: + + Try the following queries which will work without any schema defined. + + .. code-block:: edgeql-repl + + db> select 42; + {42} + db> select sum({1, 2, 3}); + {6} + db> with cards := { + ... ( + ... front := "What is the highest mountain in the world?", + ... back := "Mount Everest", + ... ), + ... ( + ... front := "Which ocean contains the deepest trench on Earth?", + ... back := "The Pacific Ocean", + ... ), + ... } + ... select cards order by random() limit 1; + { + ( + front := "What is the highest mountain in the world?", + back := "Mount Everest", + ) + } + +.. edb:split-section:: + + Fun! You will create a proper data model for the application in the next step, but for now, take a look around the project you've just created. Most of the project files will be familiar if you've worked with Next.js before. Here are the files that integrate |Gel|: + + - ``gel.toml``: The configuration file for the Gel project instance. Notice that we have a ``hooks.migration.apply.after`` hook that will run ``npx @gel/generate edgeql-js`` after migrations are applied. This will generate the query builder code that you'll use to interact with the database. More details on that to come! + - ``dbschema/``: This directory contains the schema for the database, and later supporting files like migrations, and generated code. + - :dotgel:`dbschema/default`: The default schema file that you'll use to define your data model. It is empty for now, but you'll add your data model to this file in the next step. + - ``lib/gel.ts``: A utility module that exports the Gel client, which you'll use to interact with the database. + + .. tabs:: + + .. code-tab:: toml + :caption: gel.toml + + [instance] + server-version = 6.0 + + [hooks] + schema.update.after = "npx @gel/generate edgeql-js" + + .. code-tab:: sdl + :caption: dbschema/default.gel + + module default { + + } + + .. code-tab:: typescript + :caption: lib/gel.ts + + import { createClient } from "gel"; + + export const client = createClient(); diff --git a/docs/intro/quickstart/working.rst b/docs/intro/quickstart/working.rst new file mode 100644 index 00000000000..3aee348a036 --- /dev/null +++ b/docs/intro/quickstart/working.rst @@ -0,0 +1,635 @@ +.. _ref_quickstart_working: + +===================== +Working with the data +===================== + +In this section, you will update the existing application to use |Gel| to store and query data, instead of a static JSON file. Having a working application with mock data allows you to focus on learning how |Gel| works, without getting bogged down by the details of the application. + +Bulk importing of data +====================== + +.. edb:split-section:: + + Begin by updating the server action to import a deck with cards. Loop through each card in the deck and insert it, building an array of IDs as you go. This array of IDs will be used to set the ``cards`` link on the ``Deck`` object after all cards have been inserted. + + The array of card IDs is initially an array of strings. To satisfy the |Gel| type system, which expects the ``id`` property of ``Card`` objects to be a ``uuid`` rather than a ``str``, you need to cast the array of strings to an array of UUIDs. Use the ``e.literal(e.array(e.uuid), cardIds)`` function to perform this casting. + + The function ``e.includes(cardIdsLiteral, c.id)`` from our standard library checks if a value is present in an array and returns a boolean. When inserting the ``Deck`` object, set the ``cards`` to the result of selecting only the ``Card`` objects whose ``id`` is included in the ``cardIds`` array. + + .. code-block:: typescript-diff + :caption: app/actions.ts + + "use server"; + + - import { readFile, writeFile } from "node:fs/promises"; + + import { client } from "@/lib/gel"; + + import e from "@/dbschema/edgeql-js"; + import { revalidatePath } from "next/cache"; + - import { RawJSONDeck, Deck } from "@/lib/models"; + + import { RawJSONDeck } from "@/lib/models"; + + export async function importDeck(formData: FormData) { + const file = formData.get("file") as File; + const rawDeck = JSON.parse(await file.text()) as RawJSONDeck; + const deck = { + ...rawDeck, + - id: crypto.randomUUID(), + - cards: rawDeck.cards.map((card) => ({ + + cards: rawDeck.cards.map((card, index) => ({ + ...card, + - id: crypto.randomUUID(), + + order: index, + })), + }; + - + - const existingDecks = JSON.parse( + - await readFile("./decks.json", "utf-8") + - ) as Deck[]; + - + - await writeFile( + - "./decks.json", + - JSON.stringify([...existingDecks, deck], null, 2) + - ); + + const cardIds: string[] = []; + + for (const card of deck.cards) { + + const createdCard = await e + + .insert(e.Card, { + + front: card.front, + + back: card.back, + + order: card.order, + + }) + + .run(client); + + + + cardIds.push(createdCard.id); + + } + + + + const cardIdsLiteral = e.literal(e.array(e.uuid), cardIds); + + + + await e.insert(e.Deck, { + + name: deck.name, + + description: deck.description, + + cards: e.select(e.Card, (c) => ({ + + filter: e.contains(cardIdsLiteral, c.id), + + })), + + }).run(client); + + revalidatePath("/"); + } + +.. edb:split-section:: + + This works, but you might notice that it is not atomic. For instance, if one of the ``Card`` objects fails to insert, the entire operation will fail and the ``Deck`` will not be inserted, but some data will still linger. To make this operation atomic, update the ``importDeck`` action to use a transaction. + + .. code-block:: typescript-diff + :caption: app/actions.ts + + "use server"; + + import { client } from "@/lib/gel"; + import e from "@/dbschema/edgeql-js"; + import { revalidatePath } from "next/cache"; + import { RawJSONDeck } from "@/lib/models"; + + export async function importDeck(formData: FormData) { + const file = formData.get("file") as File; + const rawDeck = JSON.parse(await file.text()) as RawJSONDeck; + const deck = { + ...rawDeck, + cards: rawDeck.cards.map((card, index) => ({ + ...card, + order: index, + })), + }; + + await client.transaction(async (tx) => { + const cardIds: string[] = []; + for (const card of deck.cards) { + const createdCard = await e + .insert(e.Card, { + front: card.front, + back: card.back, + order: card.order, + }) + - .run(client); + + .run(tx); + + cardIds.push(createdCard.id); + } + + const cardIdsLiteral = e.literal(e.array(e.uuid), cardIds); + + await e.insert(e.Deck, { + name: deck.name, + description: deck.description, + cards: e.select(e.Card, (c) => ({ + filter: e.contains(cardIdsLiteral, c.id), + })), + - }).run(client); + + }).run(tx); + + }); + + revalidatePath("/"); + } + +.. edb:split-section:: + + You might think this is as good as it gets, and many ORMs will create a similar set of queries. However, with the query builder, you can improve this by crafting a single query that inserts the ``Deck`` and ``Card`` objects, along with their links, in one efficient query. + + The first thing to notice is that the ``e.params`` function is used to define parameters for your query instead of embedding literal values directly. This approach eliminates the need for casting, as was necessary with the ``cardIds`` array. By defining the ``cards`` parameter as an array of tuples, you ensure full type safety with both TypeScript and the database. + + Another key feature of this query builder expression is the ``e.for(e.array_unpack(params.cards), (card) => {...})`` construct. This expression converts the array of tuples into a set of tuples and generates a set containing an expression for each element. Essentially, you assign the ``Deck.cards`` set of ``Card`` objects to the result of inserting each element from the ``cards`` array. This is similar to what you were doing before by selecting all ``Card`` objects by their ``id``, but is more efficient since you are inserting the ``Deck`` and all ``Card`` objects in one query. + + .. code-block:: typescript-diff + :caption: app/actions.ts + + "use server"; + + import { client } from "@/lib/gel"; + import e from "@/dbschema/edgeql-js"; + import { revalidatePath } from "next/cache"; + import { RawJSONDeck } from "@/lib/models"; + + export async function importDeck(formData: FormData) { + const file = formData.get("file") as File; + const rawDeck = JSON.parse(await file.text()) as RawJSONDeck; + const deck = { + ...rawDeck, + cards: rawDeck.cards.map((card, index) => ({ + ...card, + order: index, + })), + }; + - await client.transaction(async (tx) => { + - const cardIds: string[] = []; + - for (const card of deck.cards) { + - const createdCard = await e + - .insert(e.Card, { + - front: card.front, + - back: card.back, + - order: card.order, + - }) + - .run(tx); + - + - cardIds.push(createdCard.id); + - } + - + - const cardIdsLiteral = e.literal(e.array(e.uuid), cardIds); + - + - await e.insert(e.Deck, { + - name: deck.name, + - description: deck.description, + - cards: e.select(e.Card, (c) => ({ + - filter: e.contains(cardIdsLiteral, c.id), + - })), + - }).run(tx); + - }); + + await e + + .params( + + { + + name: e.str, + + description: e.optional(e.str), + + cards: e.array(e.tuple({ front: e.str, back: e.str, order: e.int64 })), + + }, + + (params) => + + e.insert(e.Deck, { + + name: params.name, + + description: params.description, + + cards: e.for(e.array_unpack(params.cards), (card) => + + e.insert(e.Card, { + + front: card.front, + + back: card.back, + + order: card.order, + + }) + + ), + + }) + + ) + + .run(client, deck); + + revalidatePath("/"); + } + +Updating data +============= + +.. edb:split-section:: + + Next, you will update the Server Actions for each ``Deck`` object: ``updateDeck``, ``addCard``, and ``deleteCard``. Start with ``updateDeck``, which is the most complex because it is dynamic. You can set either the ``title`` or ``description`` fields in an update. Use the dynamic nature of the query builder to generate separate queries based on which fields are present in the form data. + + This may seem a bit intimidating at first, but the key to making this query dynamic is the ``nameSet`` and ``descriptionSet`` variables. These variables conditionally add the ``name`` or ``description`` fields to the ``set`` parameter of the ``update`` call. + + .. code-block:: typescript-diff + :caption: app/deck/[id]/actions.ts + + "use server"; + + import { revalidatePath } from "next/cache"; + import { readFile, writeFile } from "node:fs/promises"; + + import { client } from "@/lib/gel"; + + import e from "@/dbschema/edgeql-js"; + import { Deck } from "@/lib/models"; + + export async function updateDeck(formData: FormData) { + const id = formData.get("id"); + const name = formData.get("name"); + const description = formData.get("description"); + + if ( + typeof id !== "string" || + (typeof name !== "string" && + typeof description !== "string") + ) { + return; + } + + - const decks = JSON.parse( + - await readFile("./decks.json", "utf-8") + - ) as Deck[]; + - decks[index].name = name ?? decks[index].name; + + const nameSet = typeof name === "string" ? { name } : {}; + - decks[index].description = description ?? decks[index].description; + + const descriptionSet = + + typeof description === "string" ? { description: description || null } : {}; + + + await e + + .update(e.Deck, (d) => ({ + + filter_single: e.op(d.id, "=", e.uuid(id)), + + set: { + + ...nameSet, + + ...descriptionSet, + + }, + + })).run(client); + - await writeFile("./decks.json", JSON.stringify(decks, null, 2)); + revalidatePath(`/deck/${id}`); + } + + export async function addCard(formData: FormData) { + const deckId = formData.get("deckId"); + const front = formData.get("front"); + const back = formData.get("back"); + + if ( + typeof deckId !== "string" || + typeof front !== "string" || + typeof back !== "string" + ) { + return; + } + + const decks = JSON.parse(await readFile("./decks.json", "utf-8")) as Deck[]; + + const deck = decks.find((deck) => deck.id === deckId); + if (!deck) { + return; + } + + deck.cards.push({ front, back, id: crypto.randomUUID() }); + await writeFile("./decks.json", JSON.stringify(decks, null, 2)); + + revalidatePath(`/deck/${deckId}`); + } + + export async function deleteCard(formData: FormData) { + const cardId = formData.get("cardId"); + + if (typeof cardId !== "string") { + return; + } + + const decks = JSON.parse(await readFile("./decks.json", "utf-8")) as Deck[]; + const deck = decks.find((deck) => deck.cards.some((card) => card.id === cardId)); + if (!deck) { + return; + } + + deck.cards = deck.cards.filter((card) => card.id !== cardId); + await writeFile("./decks.json", JSON.stringify(decks, null, 2)); + + revalidatePath(`/`); + } + +Adding linked data +================== + +.. edb:split-section:: + + For the ``addCard`` action, you need to insert a new ``Card`` object and update the ``Deck.cards`` set to include the new ``Card`` object. Notice that the ``order`` property is set by selecting the maximum ``order`` property of this ``Deck.cards`` set and incrementing it by 1. + + The syntax for adding an object to a set of links is ``{ "+=": object }``. You can think of this as a shortcut for setting the link set to the current set plus the new object. + + .. code-block:: typescript-diff + :caption: app/deck/[id]/actions.ts + + "use server"; + + import { revalidatePath } from "next/cache"; + import { readFile, writeFile } from "node:fs/promises"; + import { client } from "@/lib/gel"; + import e from "@/dbschema/edgeql-js"; + import { Deck } from "@/lib/models"; + + export async function updateDeck(formData: FormData) { + const id = formData.get("id"); + const name = formData.get("name"); + const description = formData.get("description"); + + if ( + typeof id !== "string" || + (typeof name !== "string" && + typeof description !== "string") + ) { + return; + } + + const nameSet = typeof name === "string" ? { name } : {}; + const descriptionSet = + typeof description === "string" ? { description: description || null } : {}; + + await e + .update(e.Deck, (d) => ({ + filter_single: e.op(d.id, "=", e.uuid(id)), + set: { + ...nameSet, + ...descriptionSet, + }, + })).run(client); + revalidatePath(`/deck/${id}`); + } + + export async function addCard(formData: FormData) { + const deckId = formData.get("deckId"); + const front = formData.get("front"); + const back = formData.get("back"); + + if ( + typeof deckId !== "string" || + typeof front !== "string" || + typeof back !== "string" + ) { + return; + } + + - const decks = JSON.parse(await readFile("./decks.json", "utf-8")) as Deck[]; + - + - const deck = decks.find((deck) => deck.id === deckId); + - if (!deck) { + - return; + - } + - + - deck.cards.push({ front, back, id: crypto.randomUUID() }); + - await writeFile("./decks.json", JSON.stringify(decks, null, 2)); + + await e + + .params( + + { + + front: e.str, + + back: e.str, + + deckId: e.uuid, + + }, + + (params) => { + + const deck = e.assert_exists( + + e.select(e.Deck, (d) => ({ + + filter_single: e.op(d.id, "=", params.deckId), + + })) + + ); + + + + const order = e.cast(e.int64, e.max(deck.cards.order)); + + const card = e.insert(e.Card, { + + front: params.front, + + back: params.back, + + order: e.op(order, "+", 1), + + }); + + return e.update(deck, (d) => ({ + + set: { + + cards: { + + "+=": card + + }, + + }, + + })) + + } + + ) + + .run(client, { + + front, + + back, + + deckId, + + }); + + revalidatePath(`/deck/${deckId}`); + } + + export async function deleteCard(formData: FormData) { + const cardId = formData.get("cardId"); + + if (typeof cardId !== "string") { + return; + } + + const decks = JSON.parse(await readFile("./decks.json", "utf-8")) as Deck[]; + const deck = decks.find((deck) => deck.cards.some((card) => card.id === cardId)); + if (!deck) { + return; + } + + deck.cards = deck.cards.filter((card) => card.id !== cardId); + await writeFile("./decks.json", JSON.stringify(decks, null, 2)); + + revalidatePath(`/`); + } + +Deleting linked data +==================== + +.. edb:split-section:: + + For the ``deleteCard`` action, delete the ``Card`` object and based on the deletion policy we set up earlier in the schema, the object will be deleted from the database and removed from the ``Deck.cards`` set. + + .. code-block:: typescript-diff + :caption: app/deck/[id]/actions.ts + + "use server"; + + import { revalidatePath } from "next/cache"; + - import { readFile, writeFile } from "node:fs/promises"; + import { client } from "@/lib/gel"; + import e from "@/dbschema/edgeql-js"; + import { Deck } from "@/lib/models"; + + export async function updateDeck(formData: FormData) { + const id = formData.get("id"); + const name = formData.get("name"); + const description = formData.get("description"); + + if ( + typeof id !== "string" || + (typeof name !== "string" && + typeof description !== "string") + ) { + return; + } + + const nameSet = typeof name === "string" ? { name } : {}; + const descriptionSet = + typeof description === "string" ? { description: description || null } : {}; + + await e + .update(e.Deck, (d) => ({ + filter_single: e.op(d.id, "=", e.uuid(id)), + set: { + ...nameSet, + ...descriptionSet, + }, + })).run(client); + revalidatePath(`/deck/${id}`); + } + + export async function addCard(formData: FormData) { + const deckId = formData.get("deckId"); + const front = formData.get("front"); + const back = formData.get("back"); + + if ( + typeof deckId !== "string" || + typeof front !== "string" || + typeof back !== "string" + ) { + return; + } + + await e + .params( + { + front: e.str, + back: e.str, + deckId: e.uuid, + }, + (params) => { + const deck = e.assert_exists( + e.select(e.Deck, (d) => ({ + filter_single: e.op(d.id, "=", params.deckId), + })) + ); + + const order = e.cast(e.int64, e.max(deck.cards.order)); + const card = e.insert(e.Card, { + front: params.front, + back: params.back, + order: e.op(order, "+", 1), + }); + return e.update(deck, (d) => ({ + set: { + cards: { + "+=": card + }, + }, + })) + } + ) + .run(client, { + front, + back, + deckId, + }); + + revalidatePath(`/deck/${deckId}`); + } + + export async function deleteCard(formData: FormData) { + const cardId = formData.get("cardId"); + + if (typeof cardId !== "string") { + return; + } + + - const decks = JSON.parse(await readFile("./decks.json", "utf-8")) as Deck[]; + - const deck = decks.find((deck) => deck.cards.some((card) => card.id === cardId)); + - if (!deck) { + - return; + - } + - + - deck.cards = deck.cards.filter((card) => card.id !== cardId); + - await writeFile("./decks.json", JSON.stringify(decks, null, 2)); + + await e + + .params({ id: e.uuid }, (params) => + + e.delete(e.Card, (c) => ({ + + filter_single: e.op(c.id, "=", params.id), + + })) + + ) + + .run(client, { id: cardId }); + + + + revalidatePath(`/`); + } + +Querying data +============= + +.. edb:split-section:: + + Next, update the two ``queries.ts`` methods: ``getDecks`` and ``getDeck``. + + .. tabs:: + + .. code-tab:: typescript-diff + :caption: app/queries.ts + + - import { readFile } from "node:fs/promises"; + + import { client } from "@/lib/gel"; + + import e from "@/dbschema/edgeql-js"; + - + - import { Deck } from "@/lib/models"; + + export async function getDecks() { + - const decks = JSON.parse(await readFile("./decks.json", "utf-8")) as Deck[]; + + const decks = await e.select(e.Deck, (deck) => ({ + + id: true, + + name: true, + + description: true, + + cards: e.select(deck.cards, (card) => ({ + + id: true, + + front: true, + + back: true, + + order_by: card.order, + + })), + + })).run(client); + + return decks; + } + + .. code-tab:: typescript-diff + :caption: app/deck/[id]/queries.ts + + - import { readFile } from "node:fs/promises"; + - import { Deck } from "@/lib/models"; + + import { client } from "@/lib/gel"; + + import e from "@/dbschema/edgeql-js"; + + export async function getDeck({ id }: { id: string }) { + - const decks = JSON.parse(await readFile("./decks.json", "utf-8")) as Deck[]; + - return decks.find((deck) => deck.id === id) ?? null; + + return await e + + .select(e.Deck, (deck) => ({ + + filter_single: e.op(deck.id, "=", e.uuid(id)), + + id: true, + + name: true, + + description: true, + + cards: e.select(deck.cards, (card) => ({ + + id: true, + + front: true, + + back: true, + + order_by: card.order, + + })), + + })) + + .run(client); + } + +.. edb:split-section:: + + In a terminal, run the Next.js development server. + + .. code-block:: sh + + $ npm run dev + +.. edb:split-section:: + + A static JSON file to seed your database with a deck of trivia cards is included in the project. Open your browser and navigate to the app at ``_. Use the "Import JSON" button to import this JSON file into your database. + + .. image:: images/flashcards-import.png diff --git a/edb/tools/docs/edb.py b/edb/tools/docs/edb.py index 7761d86ec33..8ae53de86de 100644 --- a/edb/tools/docs/edb.py +++ b/edb/tools/docs/edb.py @@ -151,7 +151,7 @@ def apply(self): for node in self.document.traverse(d_nodes.substitution_reference): nt = node.astext() if nt.lower() in { - "gel", "gel's","edgedb", "gelcmd", ".gel", "gel.toml", + "gel", "gel's", "edgedb", "gelcmd", ".gel", "gel.toml", "gel-server", "geluri", "admin", "main", "branch", "branches" }: @@ -182,6 +182,7 @@ def apply(self): else: node.replace_self(d_nodes.Text(nt)) + class GelCmdRole: def __call__( From 1fed084c0818ad46d0b726694398fa4c3e78e59e Mon Sep 17 00:00:00 2001 From: Andrey Buzin Date: Thu, 20 Feb 2025 02:24:41 +0700 Subject: [PATCH 22/23] Upload restructured AI docs (#8345) Co-authored-by: Scott Trinh --- docs/ai/guide_edgeql.rst | 286 ++++++++ docs/ai/guide_python.rst | 369 ++++++++++ docs/ai/images/ui_playground.png | Bin 0 -> 473738 bytes docs/ai/images/ui_prompts.png | Bin 0 -> 628403 bytes docs/ai/images/ui_providers.png | Bin 0 -> 445620 bytes docs/ai/index.rst | 270 +------- docs/ai/javascript.rst | 2 +- docs/ai/quickstart_fastapi_ai.rst | 346 ++++++++++ docs/ai/reference.rst | 671 ------------------- docs/ai/reference_extai.rst | 491 ++++++++++++++ docs/ai/reference_http.rst | 382 +++++++++++ docs/ai/{python.rst => reference_python.rst} | 128 ++-- docs/datamodel/extensions.rst | 2 +- 13 files changed, 1953 insertions(+), 994 deletions(-) create mode 100644 docs/ai/guide_edgeql.rst create mode 100644 docs/ai/guide_python.rst create mode 100644 docs/ai/images/ui_playground.png create mode 100644 docs/ai/images/ui_prompts.png create mode 100644 docs/ai/images/ui_providers.png create mode 100644 docs/ai/quickstart_fastapi_ai.rst delete mode 100644 docs/ai/reference.rst create mode 100644 docs/ai/reference_extai.rst create mode 100644 docs/ai/reference_http.rst rename docs/ai/{python.rst => reference_python.rst} (84%) diff --git a/docs/ai/guide_edgeql.rst b/docs/ai/guide_edgeql.rst new file mode 100644 index 00000000000..f21f57157c1 --- /dev/null +++ b/docs/ai/guide_edgeql.rst @@ -0,0 +1,286 @@ +.. _ref_ai_guide_edgeql: + +========================= +Guide to Gel AI in EdgeQL +========================= + +:edb-alt-title: How to set up Gel AI in EdgeQL + + +|Gel| AI brings vector search capabilities and retrieval-augmented generation +directly into the database. + + +Enable and configure the extension +================================== + +.. edb:split-section:: + + AI is a |Gel| extension. To enable it, we will need to add the extension + to the app’s schema: + + .. code-block:: sdl + + using extension ai; + + +.. edb:split-section:: + + |Gel| AI uses external APIs in order to get vectors and LLM completions. For it + to work, we need to configure an API provider and specify their API key. Let's + open EdgeQL REPL and run the following query: + + .. code-block:: edgeql + + configure current database + insert ext::ai::OpenAIProviderConfig { + secret := 'sk-....', + }; + + +Now our |Gel| application can take advantage of OpenAI's API to implement AI +capabilities. + + +.. note:: + + |Gel| AI comes with its own :ref:`UI ` that can + be used to configure providers, set up prompts and test them in a sandbox. + + +.. note:: + + Most API providers require you to set up and account and charge money for + model use. + + +Add vectors and perform similarity search +========================================= + +.. edb:split-section:: + + Before we start introducing AI capabilities, let's set up our database with a + schema and populate it with some data (we're going to be helping Komi-san keep + track of her friends). + + .. code-block:: sdl + + module default { + type Friend { + required name: str { + constraint exclusive; + }; + + summary: str; # A brief description of personality and role + relationship_to_komi: str; # Relationship with Komi + defining_trait: str; # Primary character trait or quirk + } + } + +.. edb:split-section:: + + Here's a shell command you can paste and run that will populate the + database with some sample data. + + .. code-block:: bash + :class: collapsible + + $ cat << 'EOF' > populate_db.edgeql + insert Friend { + name := 'Tadano Hitohito', + summary := 'An extremely average high school boy with a remarkable ability to read the atmosphere and understand others\' feelings, especially Komi\'s.', + relationship_to_komi := 'First friend and love interest', + defining_trait := 'Perceptiveness', + }; + + insert Friend { + name := 'Osana Najimi', + summary := 'An extremely outgoing person who claims to have been everyone\'s childhood friend. Gender: Najimi.', + relationship_to_komi := 'Second friend and social catalyst', + defining_trait := 'Universal childhood friend', + }; + + insert Friend { + name := 'Yamai Ren', + summary := 'An intense and sometimes obsessive classmate who is completely infatuated with Komi.', + relationship_to_komi := 'Self-proclaimed guardian and admirer', + defining_trait := 'Obsessive devotion', + }; + + insert Friend { + name := 'Katai Makoto', + summary := 'A intimidating-looking but shy student who shares many communication problems with Komi.', + relationship_to_komi := 'Fellow communication-challenged friend', + defining_trait := 'Scary appearance but gentle nature', + }; + + insert Friend { + name := 'Nakanaka Omoharu', + summary := 'A self-proclaimed wielder of dark powers who acts like an anime character and is actually just a regular gaming enthusiast.', + relationship_to_komi := 'Gaming buddy and chuunibyou friend', + defining_trait := 'Chuunibyou tendencies', + }; + EOF + $ gel query -f populate_db.edgeql + + +.. edb:split-section:: + + In order to get |Gel| to produce embedding vectors, we need to create a special + ``deferred index`` on the type we would like to perform similarity search on. + More specifically, we need to specify an EdgeQL expression that produces a + string that we're going to create an embedding vector for. This is how we would + set up an index if we wanted to perform similarity search on + ``Friend.summary``: + + .. code-block:: sdl-diff + + module default { + type Friend { + required name: str { + constraint exclusive; + }; + + summary: str; # A brief description of personality and role + relationship_to_komi: str; # Relationship with Komi + defining_trait: str; # Primary character trait or quirk + + + deferred index ext::ai::index(embedding_model := 'text-embedding-3-small') + + on (.summary); + } + } + + +.. edb:split-section:: + + But actually, in our case it would be better if we could similarity search + across all properties at the same time. We can define the index on a more + complex expression - like a concatenation of string properties - like this: + + + .. code-block:: sdl-diff + + module default { + type Friend { + required name: str { + constraint exclusive; + }; + + summary: str; # A brief description of personality and role + relationship_to_komi: str; # Relationship with Komi + defining_trait: str; # Primary character trait or quirk + + deferred index ext::ai::index(embedding_model := 'text-embedding-3-small') + - on (.summary); + + on ( + + .name ++ ' ' ++ .summary ++ ' ' + + ++ .relationship_to_komi ++ ' ' + + ++ .defining_trait + + ); + } + } + + +.. edb:split-section:: + + Once we're done with schema modification, we need to apply them by going + through a migration: + + .. code-block:: bash + + $ gel migration create + $ gel migrate + + +.. edb:split-section:: + + That's it! |Gel| will make necessary API requests in the background and create an + index that will enable us to perform efficient similarity search like this: + + .. code-block:: edgeql + + select ext::ai::search(Friend, query_vector); + + +.. edb:split-section:: + + Note that this function accepts an embedding vector as the second argument, not + a text string. This means that in order to similarity search for a string, we + need to create a vector embedding for it using the same model as we used to + create the index. |Gel| offers an HTTP endpoint ``/ai/embeddings`` that can + handle it for us. All we need to do is to pass the vector it produces into the + search query: + + .. note:: + + Note that we're passing our login and password in order to autheticate the + request. We can find those using the CLI: ``gel instance credentials + --json``. Learn about all the other ways you can authenticate a request + :ref:`here `. + + .. code-block:: bash + + $ curl --user user:password \ + --json '{"input": "Who helps Komi make friends?", "model": "text-embedding-3-small"}' \ + http://localhost:/branch/main/ai/embeddings \ + | jq -r '.data[0].embedding' \ # extract the embedding out of the JSON + | tr -d '\n' \ # remove newlines + | sed 's/^\[//;s/\]$//' \ # remove square brackets + | awk '{print "select ext::ai::search(Friend, >[" $0 "]);"}' \ # assemble the query + | gel query --file - # pass the query into Gel CLI + + + +Use the built-in RAG +==================== + +One more feature |Gel| AI offers is built-in retrieval-augmented generation, also +known as RAG. + +.. edb:split-section:: + + |Gel| comes preconfigured to be able to process our text query, perform + similarity search across the index we just created, pass the results to an LLM + and return a response. We can access the built-in RAG using the ``/ai/rag`` + HTTP endpoint: + + + .. code-block:: bash + + $ curl --user user:password --json '{ + "query": "Who helps Komi make friends?", + "model": "gpt-4-turbo-preview", + "context": {"query":"select Friend"} + }' http://localhost:/branch/main/ai/rag + + +.. edb:split-section:: + + We can also stream the response like this: + + + .. code-block:: bash-diff + + $ curl --user user:password --json '{ + "query": "Who helps Komi make friends?", + "model": "gpt-4-turbo-preview", + "context": {"query":"select Friend"}, + + "stream": true, + }' http://localhost:/branch/main/ai/rag + + +Keep going! +=========== + +You are now sufficiently equipped to use |Gel| AI in your applications. + +If you'd like to build something on your own, make sure to check out the +:ref:`Reference manual ` in order to learn the details +about using different APIs and models, configuring prompts or using the UI. +Make sure to also check out the |Gel| AI bindings in Python and JavaScript if +those languages are relevant to you. + +And if you would like more guidance for how |Gel| AI can be fit into an +application, take a look at the FastAPI Gel AI Tutorial, where we're building a +search bot using features you learned about above. + diff --git a/docs/ai/guide_python.rst b/docs/ai/guide_python.rst new file mode 100644 index 00000000000..aed9004bd66 --- /dev/null +++ b/docs/ai/guide_python.rst @@ -0,0 +1,369 @@ +.. _ref_ai_guide_python: + +========================= +Guide to Gel AI in Python +========================= + +:edb-alt-title: How to set up Gel AI in Python + +.. edb:split-section:: + + |Gel| AI brings vector search capabilities and retrieval-augmented + generation directly into the database. It's integrated into the |Gel| + Python binding via the ``gel.ai`` module. + + .. code-block:: bash + + $ pip install 'gel[ai]' + + +Enable and configure the extension +================================== + +.. edb:split-section:: + + AI is an |Gel| extension. To enable it, we will need to add the extension + to the app’s schema: + + .. code-block:: sdl + + using extension ai; + + +.. edb:split-section:: + + |Gel| AI uses external APIs in order to get vectors and LLM completions. + For it to work, we need to configure an API provider and specify their API + key. Let's open EdgeQL REPL and run the following query: + + .. code-block:: edgeql + + configure current database + insert ext::ai::OpenAIProviderConfig { + secret := 'sk-....', + }; + + +Now our |Gel| application can take advantage of OpenAI's API to implement AI +capabilities. + + +.. note:: + + |Gel| AI comes with its own :ref:`UI ` that can + be used to configure providers, set up prompts and test them in a sandbox. + + +.. note:: + + Most API providers require you to set up and account and charge money for + model use. + + +Add vectors +=========== + +.. edb:split-section:: + + Before we start introducing AI capabilities, let's set up our database with a + schema and populate it with some data (we're going to be helping Komi-san keep + track of her friends). + + .. code-block:: sdl + + module default { + type Friend { + required name: str { + constraint exclusive; + }; + + summary: str; # A brief description of personality and role + relationship_to_komi: str; # Relationship with Komi + defining_trait: str; # Primary character trait or quirk + } + } + +.. edb:split-section:: + + Here's a shell command you can paste and run that will populate the + database with some sample data. + + .. code-block:: bash + :class: collapsible + + $ cat << 'EOF' > populate_db.edgeql + insert Friend { + name := 'Tadano Hitohito', + summary := 'An extremely average high school boy with a remarkable ability to read the atmosphere and understand others\' feelings, especially Komi\'s.', + relationship_to_komi := 'First friend and love interest', + defining_trait := 'Perceptiveness', + }; + + insert Friend { + name := 'Osana Najimi', + summary := 'An extremely outgoing person who claims to have been everyone\'s childhood friend. Gender: Najimi.', + relationship_to_komi := 'Second friend and social catalyst', + defining_trait := 'Universal childhood friend', + }; + + insert Friend { + name := 'Yamai Ren', + summary := 'An intense and sometimes obsessive classmate who is completely infatuated with Komi.', + relationship_to_komi := 'Self-proclaimed guardian and admirer', + defining_trait := 'Obsessive devotion', + }; + + insert Friend { + name := 'Katai Makoto', + summary := 'A intimidating-looking but shy student who shares many communication problems with Komi.', + relationship_to_komi := 'Fellow communication-challenged friend', + defining_trait := 'Scary appearance but gentle nature', + }; + + insert Friend { + name := 'Nakanaka Omoharu', + summary := 'A self-proclaimed wielder of dark powers who acts like an anime character and is actually just a regular gaming enthusiast.', + relationship_to_komi := 'Gaming buddy and chuunibyou friend', + defining_trait := 'Chuunibyou tendencies', + }; + EOF + $ gel query -f populate_db.edgeql + + +.. edb:split-section:: + + In order to get |Gel| to produce embedding vectors, we need to create a + special ``deferred index`` on the type we would like to perform similarity + search on. More specifically, we need to specify an EdgeQL expression that + produces a string that we're going to create an embedding vector for. This + is how we would set up an index if we wanted to perform similarity search + on ``Friend.summary``: + + .. code-block:: sdl-diff + + module default { + type Friend { + required name: str { + constraint exclusive; + }; + + summary: str; # A brief description of personality and role + relationship_to_komi: str; # Relationship with Komi + defining_trait: str; # Primary character trait or quirk + + + deferred index ext::ai::index(embedding_model := 'text-embedding-3-small') + + on (.summary); + } + } + + +.. edb:split-section:: + + But actually, in our case it would be better if we could similarity search + across all properties at the same time. We can define the index on a more + complex expression - like a concatenation of string properties - like this: + + + .. code-block:: sdl-diff + + module default { + type Friend { + required name: str { + constraint exclusive; + }; + + summary: str; # A brief description of personality and role + relationship_to_komi: str; # Relationship with Komi + defining_trait: str; # Primary character trait or quirk + + deferred index ext::ai::index(embedding_model := 'text-embedding-3-small') + - on (.summary); + + on ( + + .name ++ ' ' ++ .summary ++ ' ' + + ++ .relationship_to_komi ++ ' ' + + ++ .defining_trait + + ); + } + } + + +.. edb:split-section:: + + Once we're done with schema modification, we need to apply them by going + through a migration: + + .. code-block:: bash + + $ gel migration create + $ gel migrate + + +That's it! |Gel| will make necessary API requests in the background and create an +index that will enable us to perform efficient similarity search. + + +Perform similarity search in Python +=================================== + +.. edb:split-section:: + + In order to run queries against the index we just created, we need to create a + |Gel| client and pass it to a |Gel| AI instance. + + .. code-block:: python + + import gel + import gel.ai + + gel_client = gel.create_client() + gel_ai = gel.ai.create_rag_client(client) + + text = "Who helps Komi make friends?" + vector = gel_ai.generate_embeddings( + text, + "text-embedding-3-small", + ) + + gel_client.query( + "select ext::ai::search(Friend, >$embedding_vector", + embedding_vector=vector, + ) + + +.. edb:split-section:: + + We are going to execute a query that calls a single function: + ``ext::ai::search(, )``. That function accepts an + embedding vector as the second argument, not a text string. This means that in + order to similarity search for a string, we need to create a vector embedding + for it using the same model as we used to create the index. The |Gel| AI binding + in Python comes with a ``generate_embeddings`` function that does exactly that: + + + .. code-block:: python-diff + + import gel + import gel.ai + + gel_client = gel.create_client() + gel_ai = gel.ai.create_rag_client(client) + + + text = "Who helps Komi make friends?" + + vector = gel_ai.generate_embeddings( + + text, + + "text-embedding-3-small", + + ) + + +.. edb:split-section:: + + Now we can plug that vector directly into our query to get similarity search + results: + + + .. code-block:: python-diff + + import gel + import gel.ai + + gel_client = gel.create_client() + gel_ai = gel.ai.create_rag_client(client) + + text = "Who helps Komi make friends?" + vector = gel_ai.generate_embeddings( + text, + "text-embedding-3-small", + ) + + + gel_client.query( + + "select ext::ai::search(Friend, >$embedding_vector", + + embedding_vector=vector, + + ) + + +Use the built-in RAG +==================== + +One more feature |Gel| AI offers is built-in retrieval-augmented generation, +also known as RAG. + +.. edb:split-section:: + + |Gel| comes preconfigured to be able to process our text query, perform + similarity search across the index we just created, pass the results to an + LLM and return a response. In order to access the built-in RAG, we need to + start by selecting an LLM and passing its name to the |Gel| AI instance + constructor: + + + .. code-block:: python-diff + + import gel + import gel.ai + + gel_client = gel.create_client() + gel_ai = gel.ai.create_rag_client( + client, + + model="gpt-4-turbo-preview" + ) + + +.. edb:split-section:: + + Now we can access the RAG using the ``query_rag`` function like this: + + + .. code-block:: python-diff + + import gel + import gel.ai + + gel_client = gel.create_client() + gel_ai = gel.ai.create_rag_client( + client, + model="gpt-4-turbo-preview" + ) + + + gel_ai.query_rag( + + "Who helps Komi make friends?", + + context="Friend", + + ) + + +.. edb:split-section:: + + We can also stream the response like this: + + + .. code-block:: python-diff + + import gel + import gel.ai + + gel_client = gel.create_client() + gel_ai = gel.ai.create_rag_client( + client, + model="gpt-4-turbo-preview" + ) + + - gel_ai.query_rag( + + gel_ai.stream_rag( + "Who helps Komi make friends?", + context="Friend", + ) + + +Keep going! +=========== + +You are now sufficiently equipped to use |Gel| AI in your applications. + +If you'd like to build something on your own, make sure to check out the +:ref:`Reference manual ` in order to learn the details +about using different APIs and models, configuring prompts or using the UI. + +And if you would like more guidance for how |Gel| AI can be fit into an +application, take a look at the FastAPI Gel AI Tutorial, where we're building a +search bot using features you learned about above. + + diff --git a/docs/ai/images/ui_playground.png b/docs/ai/images/ui_playground.png new file mode 100644 index 0000000000000000000000000000000000000000..5fa19839aeeab10ac041e162989615aa801d970a GIT binary patch literal 473738 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

  • xGIxr?7(KJyqenMi6|P?G=7|h6x3X4;Q?CwD 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⪚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

    mV6wS<`iBDq5 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

    n)DXj88|uB z6sWSRRz9FpiJQg!@DIfx%*yh!z}ZQ_$E2Lk*vN%|18?sb5(Hx)z2p)u;doOFUK{_> z(3@?UJO{b?;ysajqUM{<)*!LZq!gFUbQYmM%@oZEOoJvuYyz-+d=e$M20+I|O;PAd zUm60(l7%0wm5Mtf*)&Zl`;8D=6Yu9%rDZKAqtef(TIr9!lu`l{WDJQ>ll zJpM9Py<{f%beR*NoP40UD6%YleH$U3Y`UNc*DhoyIwqoP-=ezk(%83tq1$D$7oXZn z{>U4osG`-&T>MD(AyPbGl620t&RjNy=#v&5?%o z(-L*GyCF73O+i6fYJPj&T_3iU49yonNHm_a~un0bLg|dW*{H+O(RVq_oT#xdg51bab3B1_rPuqE0zdyi@D{ zaIPlLp&E33360uISX$0T1>al?x> zS2QU@?qyIdL|93zj%Udk&z~h?qjzeygRtZW+Gl@;tXC5H+)}SR`Kj&e=5c7&1-)1B`)zeCSd|?R8@(a-BqWR=P{37t~i{Z zzXPu8;ZN?mkPpMIi-&yWm1h8#s+3BYLTP`2=pC~U8|Y9vOs=>o#R~fJ4!G2C$3Imi zwm9RdsLDJ4l6#$PVNA{VEfNx1m_>+aIvH45>^|pZfs%^fYm6;{&wEAN5+?R+XCKW6 zjiRI02AzFW!g;xx1G2`uB*ewXCm$<$3aN39e+?v=zf4Y<#1U?h#eYL4Ykb#7@4#_V ztF}G(*t(ZtxU#0pJaACJ<3VOsG*=HuX`*2E-z zW)+q?ycqo_gCuNrk9}*iQ_^1$n2$6AP$BSY^!VEBI~w@I&+TIr!7j21i*`q2N!Q~a zIE-XNfvK@{DMpm2g^u9T5uzcLE(J9NYVekIANhhWYt=NljAD-shyxMtTYc5<*ltLo z-EvB$Pasld`W^2=BKCJ4{*_maeT$`=ZWO*e_u^fCNj~&Cql#JWltS>PaB&k}ObLYx znC%WB1j8Dvbw7vhM#*U^R?zKj68}n74PGA_>q)JTD0JRbT~=;a;*z=?DK27}RWF(= z?zUogd&Z49831BcYV@B~!cIimMftPdx@YB#Cbwv9W9NvZGk1d?9Al>gq(ALoIqOF7 z?^{fL!-FyZF!`7u@eo@BqI?~>9*d0BZ&}2d*PA5E05nUgpzu}+4 z_NV-QSpEqXvg*I9I>sVL;N#20Bd~)WcP&rs}*kT+7^gb-g>WM4yZ56=`T;u$Se~V|G+&F&9+@ zFsbgmISWt52+8fOhmc%*>rf-^>vbKQbT-?w<9wr(&}P@4g9J{>p*1LB-E^7zEUl{ zv77F|rFeiPwI-c3?*wVCoAlIf(ttxXfbGFSO~A1K!tVAJ1x%+!f_fU-z<{@s!E6ur zmFU%j1&v@VcN(&wv1*o*-yL$z<70s;=fh45Vp92aWB;lKyFI|zb9-^=VMf+CUF@rC z3h!8@pTdUr!*ml2qj0-K!*b$BwL7>X@}pbJ#4`NPzrpD^15;ks-4%70cQ*8Y3(;k? zxW@J{ZjmqQfY*fA2fn;m?)V6$d7qUlp8yzOv8qz}735Fw}JMuK*x#*W6uY z$|Y4>n^0)gQa#;sl6F=YlMirALB;ZP=^+h`;7a6ym;yzsjA0R)k@wY~>`Cc}#kwTz z2_q(LgOSVBfS|`4a~CTF2g1VdTCS=VE2ypsC;t9I)~6*7G(t{TqP)vXMVkwY3#7@K zs~gNrub3)20T4@>79n~&)yfN-JrAMlNuF1IliE5dgpa+*-MSkC8h7hFoS7 zL^icePnx;pv>dCCAO$(*sM}~+D5oDyiZ9D;5>pKU+>nql$ z%Q~tU!#g@9KIejc#KzILd+x=mT_hVV`|xSglzXCn^WF$m#;1Z052r5yCL!Kw_IW>J zwfgFuoM*aIe--^sRy@1++XSp**hUg2U`l8L_Vm|5sehh;85|`=(@y7a%}?zhXE--vJwReY8%L)5+oKVCKSn0B#C4J2}-5}L?svr z0t$#o&QKsq7EnMzvP2QdA~}cp&Mm++?R;zAU(ft8v$|(`*|+X}o)h-jXKxTY^qGDy zAbJ~T-2d_VR zoYnfGtc-duE7VVV-jz0qaUog#z{}!+TCVtQdTPtHeyYiOKADGt#0z>5*My?s}9^^VmR7= zYxNKwq{yWuon_E{buTvAviE#7 z+T)eX(8P_xLLsq)FHhO8UF6$JE3Qa5ND-uO-gMX_jsv$R*DJJc@Ar>OMt^LhwdM3K zGXad`CMcJQeZCRN`iJcVB0NTNa23I_StZP7iOKF98DOTcG(S@WexL2k!y`~EWebfU zy6+;W8Tu!>O%LG&L{`c-!WZ4{0bN+D#{k3UlMvIk)ggJ1XAo>gLjI3)SFZ2 zSE?AWxOK`z(QVt?C9*utPiuQA=^aqfXz6aX2EN>kDx$;~XDpX;tgTUX&8F;w#&aXG z85kN#6{Wqv(E^oJ%Z_0)K%wuU@Xd?Aq{?|1v{0Ht8(r?~@Iv(O`)FnhJZ|iS;|H=# zWza<_!ZL(*%$r?%5DbKlXsp(y16ZrjB&x6GWm_92)C;;qnbm1sA4qS27*!R>$^@3ohb?2H9}`{8eQp8xi*>TKrU@U7m_{=3a23J^K!~bH9=n8? zoFb^!%H42#6!Wq!Mv&@&G!RdF+ri=-=^C!V%l_(V>aczFvS#x2Q>e1=qb1bDv~RfMt%T+E*jjx&D&h@55$Sr$QD_2CJ^#iM-|35KgtHUy!p3iDdeS#zb{4%IM^$e zI)Lz$;DpdZ)h(_q4af7@_M0yE(s(lOI}?_Ho)zgyUj$O7p{!WoC_Y#vX_wjp)qXE;7vMPKnE@Y?-2SM54uFbKsyJGI2u3{=o8)wl>c zAJ!NB5WYsiGBjx%Koxf$FR;4610E$nUjQmtdHV$rY)6Ey`6MnY^H3zC6KJ1bf4H>j z4iaExPzvlUj_SxphhCOPm7&bqAfIgcDqJcOS2uB}_qQf{9a^VngfG(&%C#EeSqk`GUP)mct_|6a?-nbO{nZqK!XLbt zU;F-9e4-JF*=lfY?lds8Xf!5F~S2i9dE8 zc!VuT;J!C3#0&UNJwpP+?i8mJ@>^*}+JUvex(kaBi8Gqf%uoz+HZg3fwH0IXpTv=6 zE9tk?x0{^(jF}v73!0VqI{uLn{wWS@SJxqHKeo${LxVnC=}bQ~2V7tt?b%W*doIa@ zXEA)+Icx9wFDBV3?q4V1J(q)j`{uP%qg$sn?RzbP+|EhlcK#d9t~LDFlo|hh*T{>q zoq(+?g?Chj>ASVIsYR@XJ8%}U)|x}+1GNi!ZyTO@1z*<)SL+>{tm4Qs@jT^i%hC!h zId^@6LF_(XW`?!X@udl9M2z(YkQ|GL&1*s!6jd`+WP%%?68SvXe~uaumIyW{Ae13` zxA`glK+D%PP$iT+ix7LtKy&*+-YK5tRX{*;>f>?t1A$K6&Vv~+OlcpHprYm0nnDIp zMAr~>P7IX6kciwLpW%Gsgdb{B?Zr{xuI?1JP!j`sEnoE0QC0aG3&ScvNu`iV5hBgP z(J+atX|u7Rz7Ps}Fgk=EA3L>kS;1*;=}As6vS>b7Xpb_UeHk|lEX}J6AL~2@URo8w zS<`i_LTdPyQ7T%PUCB_foN!NU=Q$Pf*b6iYn4O4Lw{ByEFGL8*{i_Gni(N?XrG(%v zR&1u)MInqPrCG%%xVLzJjN-D3nlfUX;SnB__$%jXPL}nqqDoPurS0N8J-L(_?9%FZ*R@~!Y>P&Iu7{WXb zAb>=;$KdV@`9CDWgZM;fwmv}h%Q%QWVDHHyQ@gx)n!Iy^>G1p*2 zU~GOL)g5(>L0tfr`REh9)zuZ7`?=$hq4ssVb`RhP+<<|1Udr1iuHSY5rRYwZR1{!4 z6vWJq)={fpP5C4f45En4hI3%ffe(j&y?ad za~caOHA*Fqm=(ZPE{Fb(2?^N}m&>U{DG{E-SYr*GppiBKw_XZEc)Hf7zBskvafs77 zwoyscNZ~|7uDS%pRPNXojs^6ZYs~1~SwvOYsfIWEjG2uMP1Itosg)ZCSPF33tn!;f zXi*|Tv_TQTJT=wh+|0}9o<<-E604t^8P(W=qC-?dEt5ktjjMFplx3CACUGW24*>4K zv1}^GKr-w4S+$T*F1Up4n84Qv0@*dO5nTUS4m6p1zM>q`` zgC4k!&fel&0W6V$-`bHW$T3%)8z_e z=`>myi6VOyiZ>73X0X}F73fubj&H~3c#j&FAfSx_-AP|bUf8!W>FmaMTJ94%8eOBj{ z8ecqo9~--;Cv_t9x;;#=9;w%;%1Z~1qETdyPl1(r#O*U()SKd{L~CU8vK(YG>j+7A z8pNFRWk6)%VPY;|W-o0GXc^r8{krykqI0GNW>?dYlc{7mNEsG#xT;mi>a za^9rfPxSq)7zWb+5yL07Hq{47hm(w8@_WHdol)3B{5=nQh+};n10=7T z9cHnCQHfU~vB^&ejv1%|o1@M+qjaTgq-75}#Aw1Uc zK&tJ4FnM7Ckt6$lwg+d`IC*91ue69N#(g+lc@7Uu{QU}FQ@t(Z8^P-cFcDok@CP1N z^aMV$XyG%<^bJLZ75XPC@`pL1YjuKmtE<~_?$b-=UK!Szt+OqBz|Eo1<5f+gIPXs>lI5GNY zrtbPTO9Yr$P7)rNok_%wXa?_|tqUXyg{4%N)?$I#3tPsJLCP;gKgPYl2{0UOTX_Cb zxQ4jBLdUJX+b^`ijghui&dVbDaP)q{V5)!@B@20~RZC+ZKakT_&Z?l~I&TxpsOoL-qv0=j1l2~4Ww(+#I_g9#`D7}x4u=Rj_rXe$Nb*7LTsjdv!WV!HoA)>k zy|6>-6ZFPrh|VK41#x>I*K1Q**;NH8o#}o_bXXikc5{9nu)=e+VgPew1zOkeNvXm& z19lN1>gIwH>R^2r;XXymA)ZOCT5s!7x3lNnD+40;zF@sDM3C^^*1um4LG9$^2hPE9 z!~|fQP;KWQOaLgiA-_#8%aa3$?X)}4{MmPj5ZZT`r1KR-{y*jZMVEU>UKac0wIyZh zF%}1!k(7rn)t-#V2*9T(^cs#15>b@8<@NQAc#I1%G|DgsV_?luin?&RCWNH++cEXh zT&Wr&iwNN$dv(s*3mwK@^*WAK! zS{NXDDbr6NTN|55>)&r}+!}+#i8cmIUZf?o`|lw=0(dlJl_wJUwT4o+bL6AXeFA2y zjTkHhl@EQ0Eq~=aU541Au!Drq1T4+zGGB}h6e0KL!-laT>|#FvJYS9*glurZwkl!n z>Z6bX5OZ}8u+R)GK?Cc6;H5?0FQx)hCe@bobb(x7Qe@37m*N(zdrSS3H|c#2><`t#0O#2&mL%C#7JY19ZpzG z6n7g@jUqR$N*XynI}F2FDuC<^>j(ECBMtbTYS62u&>P|hi$IAeBPQef(#j$rb%Q|n zaO*=~l$6pCia1-39Myim&;b^jEV>TH*(aHhynLBWV5krD44{Blvst(oQNN8ald2J@ z;7kDB+)V8U z{^vyGAop8*_@5s6-@|U!fF&jHId*EDb3xWkj)$X#hhHk#cTuZUutTt(_bjOiRr!5_Wh)W?D{(~sNKI3FGr+7Doh z=HNenHU99h2yr>`p6NYV0E*;(A&K+WEt&K^iv?Pr>j~WuhOb{EE$Rdc3JS7!8nxKB zNV^C2W>xdAmimd$nh^PL>12ku2dpIh!~CS()|(Lyg8|Z{SjLkXWc(L!7$LV;9iP%- zRAL~pt{$aXve?c!BVrfIO*~LFb7L-ux?)WZu=b9myN1ZJoMSY0QpP;bB|3&~$vf~X zQ5GrNM_KY{^F&dw|2cMhVFd1MyIWV4`v2sBz&lrhw88oHL0(Ff^_$a(Z)Qg@s>!p@ zNW|o<93*{g_fv8oossYlU9AT!3rdn=nX3G(X0RXpVmD zs1iO4BAU827nZTX+_aU(t^;+aA~Mc%0_T{UL&h4R9HUqS`M+zA9Z2vhPH&1NFq9>| zRRf%3Ljjohw$TWQ{)uyZ5}Ejhjv-VwF&~n93L7+0j3LOE*tSt|i2{|Hj4}yf8m1b9 zb|wSaGLeV2L52Wt+jb)_K@wEb<2RwVEj;iG45Wq; z4-#f`qO&l^WikE2$jRF~m|3E-CUA#vu2RxK8>Dbod2vi~->JCG+r9LlT;!r43NhW9 zYWVex{n$Jm_;_2_uF;jb5&6U!a&_}^q&IBV7>1LTfjr+ukZ$i=pXTO#=!IPxgJ;Mz zmut^E_wSFj8L#mLQHc^QvS&5BgkSdY{m{pu&+;h zhigZtKcsAO!78WQWnD9fwGaIN2Uly1q<(_r%LZmQ*B0hh4Y|f?I zG8Yo2GP5e54tk&s&oY`dbW!hEg}@b+r_;8aN_P6`S%en5!D9c%c-IY#o7d*I_zr94 zf{AD|=Mpgj4NQG9QRR7k>;;w`6)QP)*FD-9=POM>>hhfl1KI4SGH>s=@|sI>EVZuH3x4)5^KOhkH{V=V+c?=MzkZ%F1j{RY@rfJxFJA^c2Fv?Z z(9RHgrdospHBC4$w|-TBz0mN@PHshpxn=lqpI?*UmCTJ#CRhv27IijZzY|i#$uc6s z5?>QCg>qY2jJ2golpXJNYZx;~Ov zwuMSJDV{qpHwT+h_s`^zaR0%4n0nq#93MqYLj z#WM~s*z~>pS_7US`U3)H@twi_axpfa6@n)Yzf%7Y(fP>0-N^Yaa6qC1p&9Mpfb8K4 zW+8pkPkcI86xfFIzGj-|(hB42s3r1>bL8P_V{JF`st?K~Fm%)U&?R-~a=l?(k~g+x zetSe)cM;!5Z|aV4QVPEdUbfNPC=C)i(xjfI* zsLZ07AG4j!NVNXTn)V>6qHhIRsT@^)#J)#V#42M3rIa;{`U-D%#*0IerJ1x=v^y4Gzx&ygPrH8Md={yTfed;dhlNZAVJD^Jl(Q4C&W?^+jkts`P>pQx+gG z*#yj$5ie)gR9%$Zm^w;MI2qhSBldv;cTL01xS$-Vj&1W*?r)crAo00cy#{1xThh#? z9v>N}5;10G3kcN8GjB^Hgu?tO+`W5ZBb|r-{()0=0{Y+%Uup5ef{nWNYY0A6S0ZE#Wn?Wx>hthQpC_CM;9AB$y7O zkFs@y`^xJ-Yy;~J3s@SoNEc5?L2HfFuq;llMVE_IhIV)31s@4>QcPCz$QhPnyvn>0 zqD#3Ph(C63q(wZ91d2QBgnahRQy5)Ov{s}7b*?WvH$Py*H!|U?8cODOvi$v5r96U1 zPF}Ul9@+^Tdtb6Y-{!dint6v1;`-6cDftE)e=_q9B1FFc&-SMfcx4d$VA`wVO}_g# z#KaYCK!8NKoeUtc@~DJ)w^iVaLaoE~h>+tY;Bu&8&#AJI)M9;{Aaxo8`7u1%+Rf?S zUV4Qv$Q`^d8jr;%=^>jO{LiG!1s zeo)(B?(Kpwa53P})gK4@my34vC~|ByVRelqh_DQ1D>smVG07!>7AKdlOC2@7n}2%q zCkhe89uFj63S~FL(T!?Py6LzC@z*LY5l)KI`SY#?g!_pj}RO{ID+H&kWi5;ZN^hfKB0x((?#BSHPN4F+%52et@x0X?M`5ds3Bl;!5PZe5(w#|A!t$@WGo#M4Y-D!Rzu)`->~!& zOqE-JtzS~9>`OmtT+WQw+ZB93R;rr6BALd*7hyE}tuvZK5a1yReISpSKEP0#f^r}r z3C)~mSv*KE?H=cwUue9lg%NzOtA-3n3SOG(wAYg}yO`BWWQ1hCG8|uN^RC_*veY^! z##Ld)+E-(nh)$UJga|Oriz*3_(|}HsdvrnaOAcu8Ntgb))}lNc00#!vwMi%yhwH(d6asGVinO%!){)rBuc|CneLZs+f2}I zS_-*g=OrNfqis~GaVED)t@K}Na;kYL^%kdn`71Vds!~WeiUy3XEqwtdy5h!dVAouATXvUWj@j7 z*GAgUpK96?B#Y;q9bMY-9*k%Q$$3&}HO||~^R34p!2c(gy``}4Hy|%4rL^$(v#;t7 z4MGQaJOy(ZvTW13_vg-e3C0^h4uiByjkyHaK@dx5|6*aZE%*10797$3X#%pGBstCb#Vu=0;NSX3i%H6$kJVdMPBdg?Dm5praL4_h0K`BZsE_wjXrl z)1`sxmBoV3u+F5z1)IF zyPY#9X5c&U0JZDNIMJ#*+Uu@98FEC9K#+;(d#}CuRKK1|0*nRGT48}hT7NGK=R-`7 zuSU<*QK3+*|$s?1kL20>3>4D5p zMqy!h@K}aZd-tI;L`XZ2l$%-0>13*Hj6Uaan`<`^PvQ zx&AS3vU*$w%NlY-rk8U|DbRU0)7YtWET+OG_uk3U=>gwvp)}V=KTC!_rLc!&O-Hx-5>3mF-ee%-BNh8G zhv}Bn)3ufh7OTZ_b27WaAf{`SUZ*i%tMkXqxTS#QHjU} zuaoQlQVJt5R0zP$g4EcmD9P4kBX{RX5K6v8b=n&sc3muiVXc3#I;R?$lA&x=vdLnW z_)x^sTK&3yQ<-!m5&taklkGP6$)8H>PHo;xG;CoY%as%&V&|y=0S6}`pFNinUMT-YKdzz^2Vj#`9@# zHeEy%Y+k-BXnJ5>d(=D5+r5k3DnY(zSMo`-y_CkfV^K1mL9@zDq2LeWn~H7cHtW7= z4h!N?R5l>|36??c+RE$1*4& zj+KHTdWwPRpqi`4hvsJMU8P_5+H~a6>c;Q?K`3n#Girqi{#8n=k6$D*qFtc6Ppxr!w-+zW+10GuG z#iQ;Go`>=gBaxqO4JL*gVry^PNhV9mkR+=1D=bT@lcjF@Pp!;Ld7Tncft*O&cF?36 z%YBi#pult>HTAGzLn6Cbf+}7H$HYs?kExhw7h#!O*fc=`UI1s=P3wF8PMg3VJs%hj z@@86HH&c-t7>g8+SpYP4{u!i4&IDn^-;Hb=h?*h^HkTJd*u)WBZ)jo%-crV_t z`hdM8zh!pyLQi^sTaoc9GiTF%Zd!{N%j0=i0f#A4w(d8e+G;a;m5hXpG)cw4M9?mJ z$#E1D27{T|Q9KO;bN4yT=6f-?MzOGb8VC&3&;0jr+s$^w zZlmJqb5BCIF-^cQU9pMP-b+X+!NEYB>r;H+=?;2MwQqIYv?Cb#tCX|@Cgci%r>hRI zGt*dcf%LS5?ovzht$n%8SI*Vd!}4wttB^A0pFpiZ{3Kydh2!^vVdIt8%OG765F{x8 zc^$q#tracjYgawb)o2UIpF|6%mycsdCT_l*YbEU;nxxX9;bv1 zzdgrC$GLOYmOAU-{vk?Tp+LNe z5SNJ8;m$~Qy)-=WmGH*ZB)=UxbL8I6o*^=|M1Fii_lB1JFJNq8!yIzw{Ggj8g{M8(S zl63JA_0+iWyC@kM{W)s|-ppgg%W?k-haScwWzUFW4qn%`mi66|8*&!=Wt1G`3oOm3 zj5-B!K&EF7C=4zqdrM`KUkD{3ac@epeZ7-15Ps8$c~$vJ;hJ_MyMs!HvHaJd9`BROqyV0#J;Q$N7Kp zunZ;wU78>^VUbIOy2e7KVIQ;a8l;G7ZDXu$K`nl?u%c1I~Gx%UjQ4T;fkw_l+o z*Rio<-0wPJIL3g^=JQQQn=wht=_6%W(LY&+{qfm>RtKU)Y8XL^rHXzyFY-hTxSH#} z&o3=X&(~-?++zh8)mc2h72un85{hm6cFA@y>q~MDjfT%lEld~~0%eju!JtO^f`|5c z5%y0AT;Qp#KiDptsg(Xiv>0KTnF={+C0UG$_ugk(#{{Wp#r3*HBx+$^ZXHKpc$2W~ zvW?a%XNi9K^kKOJgI}shupQ}N_o+3 zR|7-F6{b9~`|Fr4NwgcI# z?#;C&f@C95+v@)Hk0Pc2nUoC_Qd)O@P(?N$`#=yLjy1X>FtB8FNnpkzZRG;vUk~r^ zU7M=LU|al{Xx_5S+z1K^O7Q}~N6q>ICwl0_$M?*>i4N-}Mzq-mqAt(MhM>^LZzFS(gAJW{!R*bi{Ue@JqVO*| z9iQJ11hBXM&TlBWP9#qTxh?Cn7dctw_}5AT!w}+{w7e|aXx~-t+gq`DdAea4paRRT z^Dy{O!06-|ZJmtW=mgb%8tJl?{QIB ztnzh~-xdYu;_6x0UGDxYHPo+vtd)r&qiENQ@Q%peRkj%El5hH-F6 zynzWsX^}w;DY<&7V(MTOLGO8)09cDho;T!w^1M(`=iiJ;@^()|)6lxC34D7;-y_9yzKFX<#>dsGb z?s=%mIkVHCC(VlM^0=0a24}!DvP%adfZra$;G-*8{El^@w+eY?-c^rI=HzYdmUGcZ zrMMB$pMp^C7QH>v_B#GA(g$oux7Z1l#Ro*iFFYLbHa`h1XFt%Ax#$eZ^GCv$D7kHb7} zRchQlsXNWVvEY7DqON+6zxq|zao6$HSCf&|sZ0IJC^@N&1YK0wXLLt!cTSx|(-rB( zf?&abm(SzlKNpAR?6oPo;!EuIYUMtF_@3K-UDg>Ro~i>>sbgKT>wqR8VK4qn198}W z*V7YdAbCIok@$%QviWkGw+#U|3L4Od2d{IDx5C6a#TA65gBPbAD{w}1xhh^t_7t>9 z%Be;CY0v$bTFy!)nAvo=N2MOHeGcG!D^X(9} z13sCeo7W#YSwtMMHl;+;t?Ul-Z*-f9|7SRYkl00*69@i`qs34rv{A%X3IEnPab~2V zTetX>?-806?R>M2!tWlBr_?8>*CDr!V6E4Xiei?z(mBTfrXk80+lV=ADGw#~8`zX; zhX|68;TqZlW^a=r6zQG%^L9XB{AEmHw*RhY&|l~_#r09`3%EZu|3;pV4zsch@_hJ* zz4fm(O+paztbyb{T%203NmaE=ubZF56zx#ur8mnZ>YFoay#^y56v_U5Ep2J-!nyf} zzNxFrj&t%SH$-0@q!E8LKHy@-L<0*Jx5<6ptG;lye}!-X2iBm1dSTeNKJSIQkE!1J zB?{!?H7;MvhfypuEuf8C4%T<>`~5brf0G#>^xEnp{x(m9$GHE-9sln{r;Rvbz>4`s zN(L2TGc)W;bmv44t^ow06;uCQk|GQXEM81$CNpPF?0$_@jcldl^lU1535qS;;tB3f zX=31S$;c4dqA}Kd=7X#*fWV?1+wtc^|9^Hqgh32K8yKS`!4uO@F_ZUIQDu^gtu7pm zhE`Uc)H^KHI8&NagXIbPGA~rtznt{jY0*^hZvO1KbH0g*e5t0!g}aHQ6+MnXPADd$ z{iT0%B3c{-kCU-=DEc7}^vvh~tPCr@?M<;vqurV=>^nS$eTUypJZ6MU4RL0O0(B;C zY8KT)N@2m^0*G;bV=D=u;m%Jq_nESG*ppBjCyKIrqe~+jHJT^XYgA4pdxHL%{N2O82yoL!o?o!u(|FH)tAf)p_h+ zJ2kZv(JX{=0_4oz-gYc1L+4cQ;j#}KW^x7ZIP-E<@1+JTh=lW^6Yd%mYA6hs=4WnW zQIi(L&N;ef#Kf|&s>sX1c(ua<*VJ?=*B~j{3tq3nv?FV)nA7hHivPE8JpadVoUp!% za66bRmB{dr6mx5?R5-(8ab@QYV@0c#HqDA3*II{8NMyg|a2q;f z-s%t*34^3<>K2(tE(~XFyyFa&qm`h{yV27G)8k)q$`@KYWte6XKxiZV^QJhsGDB$7 z%fYe3Qc@k|E~eYRwMHeBNRS9^pFO}~##O52ZYx$abx}Wdx8a^e(?C`maVK5``2O_z zHH)i&Y&qJ;4q{kTw#>>_*}c zl|H`>62}cl9Hq>r>jb4u2xPPJfy8kXNgSGAiz^^;u=Z7{|DHJNx$9SfVgKqG$iCko zX?(UFQ)Klr%Uz!C9WP&-RXjlq5$0$zM6_My5YjAjut4*P-&jF#ARLxGA%2tGhw2r% z0FpY6LF#D!Z>Ns=4axOJ&}aL2BPYzrSA$WIhQ{IuyNt(0paz~|Aj?&H`8;jRUJ`4d*mt};u-+bI}6ztw*5#QJY zf25701<1bi;Ps}M2+J-oOQmhw{DU?Dduvn@e&b-zxai@-J2}K(Tk=hLz8mr3Yt_$D z&Sn4xz<>}sU;HvVd27?iFdpAlIUvYaF+ZbJ&X^_YIS~`$q~#V7*&dl|ka?Qu-Q;P_ ze&~YX)CC_8u>7uFmc)fm%v$e+J|_VvkAq+~hhw()+dM75p3Zs+B$yRg;P`-%+`Z#y z8vXB&eLi{=@RfVauYY9FkrL(uYT|-X^b?JC6(T6I;N@(eh1a{Pix#x@GI1VP0> z_v)FC&nx9_FITMeEG*>j#X)HEwm{YjP=uzJw(_CH*g!N(U`{=T>-fex))@Gi|j|!qFa)ZfzDplT!0ws&-Z+EU9qt}jr0HwtG zXtEz+9k>2@?NX6=Y8=)s@eyu6tX=*VQ=-L*^k`@=!Mt^w+HC<8NyIH#-6!pN- z{nvc%?>N-y^;$xmWe37=COHKhbIw4K`QPL0#=%x+LTZWJB^&5`G~B=BOK<);n@@d- zX$ZCiE`B&kNkv^%Z&3SH`=lW3N0wa=oc(B1iVX@3{Meff$aUWgXL-$z0Zge|aY%f* znp@-Ev%ZOM`M}$);?EGt|E=zE{bSwZAc4-mc7{M3nlU;E6{?TvEtT`pK3OkPDM~{I1j2Wu z9PGT1qnFjJKZ1rXvj4*Lt3cELv0g)}_`k2$Mu^E`Pi>J%0#r7ccuytMB~u@jqS!@mV^A?4JQ(w ztzWghemDJrwMz)TdSV3LwS2!P-HlXUhtDEUSCQJs^%B_&rGGiSWNLfRX7@_Nh82QI zRJ}5sABBw909YM=PvDG1C2Wx5!RjW9R6>Xds|QBQ*sbUl>_pTghi)ol?lhW?sS0WG znXlf8BxgbW`OL=uL2_0w-oUEQSOQi}zWwyu?Vf=MR{h%F?-@y>p_`i|gJ5KsR_wbD zVzSi(9Xq^D$YG(8dTjc(w~)A*`;s^VnO>U9wA)GpbNi48yOy~OVcAF^tL7$)kWB4t zi40yD-y*hr7G{dk$jtH2;*ily_=pB@4rEV(zk{l=z#;~yTEz~HBJQ(sGWHVOTiP&- zWu(r@&{q&D&CC>{pnIQyPVi$qRK25e_S*A@j8?#fRtqHMFyu~q<`3(1Br&(gVc=r@ zKj@Aeq|joL+Yh;yGma|kB{u$CSB{bIPIq+267()yqol1gH)~E3ZWJ%lNUl@T*sXjI zefHf>!zZdub3nG|LDj3&puOrjxfhW<_xXR)c0frX5Bi5c1J&mO31Vz&%e^YFLI_!Y zn!qq=R~sdzNYEX&XYO1F+9(-aqLpBq$%PwO01Jk-JR8md|BEhZnXoKw+fjAWh)taO zEJnt3IxLD5_t{CEGlzX2;1b^emr#=z4B3<8)LncZW2Xx<4ikONLGxI~uQ7fiz{??T zjzpmK$A1T{|G(u8%o<}pINF+u4o$CIw#?Njsy_HLqM?S4UPjc_cEWj3iWKFhbqP7Q zSiEq0xTG!T&2s-}d+}}{e3$A=?1(F$6lMz*wowF}=*bqVZ>JUP zmKW|po{6M^49Kq4G&;(QVt&bk$FX<&ib+W^h*nzo%spXuNH`J4Y;Eke2Yuk41@r*b z>4+-#KbuwR^@+%-M{@Vj$(FGx_c8wzw;46?C3M`sBHB+aqD8r;Jh_Cz<^r7&st&_i za`Wh+XDK-`;z6p}9DH#AXwxH%^zEDuF(dCxgS1_g;*w|Z9tFRHhb#7Rpl|k{p@+$i zg(T2)I1D$~*2|K9oWBVhF!pWvcE$pfy=c9@ss0-4fEm5=vtUz*z1$_PG+)efdG6LZ zx6c8$y+Q6X;&Dqd#gfZ~M}qnq#<`22VEclHKh*wvCk5t}jfCqtkjaTNi zyg}>3Y(l%vMMG>PA+`*ZG@1N47iegYw&j?sBI{4(`#~;v0;H+!ik{`@8eo(# z$LWF?7#f#@ZA!})WeJnJc?zYT;e zSwJUe9StAQ@3gjYYm~-O6oyQ{ZB6wt>=cG`j%$9#=S&yE0|F%dz~)1`!hZs-tzhvX z=mo=I#tXAan!aFfw`PCey8G1;x247?YW?N*)&Z-k_r6TmK=hII!qojxAH<8{{rmLd zwIy2+k0MbIy4Ws+F}@>(wTqVXB&Ydyav@##Bw}+cx@3Z1Ti7hhodOX67-7NB*vve8 zrJqe?nE7ONi}a+SkEr6-vbJNX^qftw5n`d1oUU3tH&Iq_>+u18vl{IFv21x1D13uf zlPAIU(9gx_?2p(<4JpikSe)gi8`E#K!aCabpOp%0t|=bCJ_K1cL=cn8pOG)iP{p?t zc8(4nxcM9;(-{ygz+McEn}IQN&*J;5HxO;Uz*%nIND%7_v}~FkUP=~}ntoJA$)lN; zqoC|q!nRdkdd&P>_Q+ii8PP6>2aBWZp#u8s)UYWvF?2#koL3iH8*cS6Yj32-(y-y` z(yRyBv@?0aR5XzGMxKory!DZg^br5p%UMg;M>?5rFuzP9)hT->0cE1b7 ze%VzPaKahA4*O#n@vy(3?&$!T*ODUSi5U23|zjF$gz^vHA zhON_SJVm-1L#uY51w4?5WU>VtSG(sCE8hipDzg_4frzhP@UwV^RQce<*74 zjMB}F2d9cruRdL;D7(K`;cEushuw=v&gFw9_9cgG&{FRRGfNw0DqfHm17UpA97B`K z7|E}Bw7s%29ddr#3-!N~&XEQ(!yS`GO2*1SrfOcYTUsnuwR)#;X3F2UDeg=C2rOv9oE`uOe1n-H()f~j$zktsDfn9E$-aTo#_tRn@*mI zyZVea;}GUF`T88<%FX-(Fo!_ID7Of{>D>Ku*8UMiX9DnZh<49A&2^ySMx?(`#?;Pi z-IlQ{(xKs$;b=>0cF-d^AH<(4asih2I=|mG8Jbyw@^1 zYy1AlU`~G*Y_gVtEm61N!R z9L^?{X^|W5tKz zve=dL-}j`I_|^}dMIe=?H=?}&RAk%A@XgKP-yy3J3IvL?fF^2nC#Txpm!N^)NHTa| zfq$!IYuaP`=nE6qnS4B#;ytrOkRVo8B|VpE-7cVC)JbFmo*7Elz{80dtg4HBps2cv zXMH2Ke=pAx5<6yGoBTZCvtP1wsQ_f)%g=c(HD*BioVe>J`IqEEDGl}fi#qo*zP!%u zX<&SScr55h6mkj9-#j5%)^Z1IRx0OkYvVZTVvs4fS_KJRLnPlAM=`3s8@IvD*_00r znbkXXgCZhw<27<^x(XZ*wR5lJ8dcn`#BzY^LQ7HRF8(1Mj^(y05s}2xpZeJ6#dI}c ziO3y%Ksd^flislgj!NQ)LtdcqC0!*g)n-z6m+6R}oerJnAG{w7-tBk}5#)?rWOx1g zfo#u+#BGRUS($ZAQ?ANkIeI5^=#I`xbue>Wd9$lm=#KLlv9B5BW%1Ipi5ZC6Gbo#P z@ta`nrY+Ut-jYfU$zqcx3&yY=ZmraH5~~|5O%Ofe%AQPXpZAMjWi~_D(fRnMYaW6P6IJbdT<|V87 z;3(Y6plmRO`j}u8T8J6fKVe39s$q}DA0f5gXK81n7!^9qw_lic?YhSfRNe+N5| zs;iyir&(RQiEDJdk?)~wk3_4OT$Ve?rc1tsQJ@Kl`qLuE(=;MRC**0B31!c5C8f4B z4$}j@QjL@TsC@k4C-3}`C1`+bhRe5q4~r#V5iAg=a%nEa3J*gbP=L|CcGk>yC5<0Z z6aQBZ{7AhQyPBu9$^yilyu6~>RFYh~zDnD&t@|BC|+QY0CSQjsO{<($MLCwA8Z{NPPMJyoTezr!muju1u^;5%Rz9F99 zS=LD^Vdp@v^=0Z4`}aqB!B_>`4{pqD-?W>j4-c~-@|788AD-I2-ge?}lF$Y4*y;s; z&}U&Ss4?SEzEz|0YXqj0iJo_ zYu);#qajP&OmXeg9v`rMuXrui`{hd~?!MBrS%_0E8bX|hWE}JPRob&6U8A5$%K_rJYJA`7 zpIO{sI&UjmfBpeC-5L_jcUZtjyqb5~C5bs9Q8+r(uO>&ov=lK@>V>czgQ8~8as6f= z#i}-W_JN#dYA`8M)rlmLTST>gdEjw3kv6)_D;&(*Z`%&Xg^DCi54ST|skJFTxNc6K zus8#Du{xD3(KZZMit_hpjGPq^(3b}xa#ogWE$-!o%_GS_gk!Rc-l zm0Ap2b3N*$=3$$%FLhWr-8oQwG&}h7S=naISDzWM&rjd!pfDV$!s@m}@!+!6FL^1! zP2SxEsu*2n>lS3|ML5QnA>p`Jy+2XqCxb{x&X<;rZV2?R8HEU}3aoXVr26XFg4Lqp z*$}CVEm-S+;E=<1(O=$jthGR@tzJ2hDsguVFm$YQJS~!NL_UZe?lj#)A4e5^=En^^5l9={m2dr{}lNmoU%j<94K!Xj?+8WG0~WFA15>>wFIWKj0+Fu92c;*yTR;Ac_*c zYUos22mfe+6q)ney`hIa_9ylzF12;KjHU*T1UjF9(pEEn=&8Te18&sFl6(7(@)jYa zF6L14&2&_0Yp7e~z)f=W+D9#S2JAyJ_d;^<5>K{fi3$VHRj2ALJ|-l~Qv`;OWGf!e ze!BM4>smS$Ee;jq(nHDsb>d*!Cbcg(E2**D9V(r55n3<9=vZa0NQO{Y!Ak$*>M(}Y zXC#v+E8aWYZYiD-X=RYkj$M9A6hlg)nRY%gBHSMS4FbgE5q-gz-{LcG*%7~p$3L#4 zGQO?4E3+N`C-hagu1-~tv;Q9E#((LaDDz?*qa`hoPbveU>GUJZ4sb|hrIubWu)MGN z%2H|o{LSpNaxH?b-*36-oPXw9o%4Hp9U7`7#c7cC%zNPk?Y01Ags3RRUMm4~f>O99 z(F$nJvlT5=2wb+OR>v%~RY^03@awUB%kK-CfO5|5I4g=03=6(i3NL^+&#ObP)@IXb zB1EjG&IUSrbSrN00n?4+VxMpBNfGE;4lQ2kKVA$zjl_wT&CgB;kyn_ruyws4F!T_3 z%mVk1`}7iS@ayN>qUzVxOiC;Knf!Dwzlhtm)O6Wb2@&4!xC$1ZH|8M_EXGK@iXPfo(jS~L_UC6ghKU0u^n@t~rW z?%jIMjQ9(feizubo5#Pa%<8gUis=KWWK!_pK_hF10@a1f*i*%m65u^x-FnAkCU)Z6 z)#8p2-Exy`&;*~Li&{9=C%He;R!(WJTojgxQxg2lyssOD@7up0DXCRu94c25VuLIq zV}+k3+#oNK>gPK5$gXyAFscVzEa}h+YT6+z`_CpxCvf{rKkA+@nn&TNVv_c8b0(Ra zZt;;Y7V8meaZFNqmc(Y!a0KuO7v1-`+JSi!iL0NjPZ0Sy3zsS;F}e)hCFoV8WcK^% zl-6U=Kqpvwc_l@tjcltfkA{mWGbGa3RLF%C&uQ&#G+j z{FhPbwD4v9wL+>N3%rEHIw(AEQP&agSM3xCOb)%iTJ6nK^5eYV{|d8+bk~W6IQC@y zEk5A3=8dl+4wHZ8x|_GB(H*iE;+)w-9o!7Iv69&lsRF*!-C#%3o;Ew$>ZhuBq#|UH zmA~T=K`+t^+QNUXVrwj3jzKj;4zAjx0jmljyju|;-2iK(YBWt5z$Sb)%!7q4~{_v_Uaq>Otwx+BQQ>Y`M@w~MH<$3l_g%%e{^)+YS?aPzpeC_NmQ zk1|jMS;%+fob$ZEkfuiKunVk?#Cilj1rd`?8&Poh^0Y2b8nW6fvu3YFg^K11- zz1Gq{AbD5Tb61OH(SxOYFsc~rc=gZ;m>-H?@OzCaL&M*R4?{eJxbukKWD$$bWhiZ3 zPC|+K|MB+T@mRP2|35O$2&b)Kq%t!aM&^lBlu?LmiR_V)&6yJoQX$G#c1GD`q-dDQ zo}sc=HsSYtotoG8ef>Va@8{R&^T&0&sf)bM<8>U*<2mmSYD&h4e>odog2>T`YArDU z7ZWseq+SL}&nMIr@s2El2}yb?-CYF?*6oJ zjp;f52Xk3iSr<}I`Xd2*!8D?H1me5N{Eeb|1xE<0p34m&YEv^vP|;>pC+fYBVMvLH z5tsAqK~hhz=v1Sh@@L-@H94u*39l4nDMn@WfqU6uK$kn)2x(;lc$UR;P98$)Ewx*V@C)OYLmSm1NhlJ|jwI*{;=m zRnJUoCmJ)Z-9Td9FWegAhtZaRq1zI+4HUK8{B&Zi&iTwy(i;FxUO)4A2c%q1ZdKeGgu5n? zle_ngmbp8-f_|o5 z6yneaB9f!u4_v}ESMpC5=c->J39Evhx81;UW@(Vw{FVc<9F1ZVhz5_H`-dnqN|mWI zz94`_y@Pym_+^BnXnYe>hp-^d!W~1C)Y@0T=EB18L4lG>cD4z*V=73M7B%qy1j?Gcb%tvpqnoO z&hGEy>G*}Lfct@hy$OU1XHEqzRWBQPx*>f)<+Q^uXDcj{w%t;^wHPG#ngJPcC4(_E ziSa`iu}4`6EMX$mt`{VQl4<$P8IeAq51J#yW5-BQTp29v8m{(EP8v+zk>cBTh)`MP z#+P@KkeBNFH*KIVwNH*)=&4`7Ltsq$>Q_n(NFn&1(p=i7NN*LlJ{-%@f1ksQEJTuK zRA2i|794$NKor>B^~;esixWsZo7n{c6gHh;32voQ8hS_(S!EU1+?E;&I#Pv5Yt=fE z(5OmG<_U=;vq=TS6STrXHr0)_E3&>!gllxIIZ{>et+t|LrF?UJIuN9>yxsa zh1S))O-NBaID2q!wty=FD~C)@b+^-;FPS9!^Kt#@XOo!>sH-*hopPS+ z%3mCwq6u-u`KvRW(;pdy(#%DW^aJ_VIQe$z?znLOa<0{1hXA%dx`dToFRvxw1re^= z_vl3|D_WySO}%bDDcbn%5?=w&W{S_9SL8boCu77=nNW_!#A+1N9d9#Rk-)6jqPMnt z-D5~hb<U)M=eK5Z0;LW{BZ^cub6@Ju?^LxBt{2r4(ej;{$Zezob@-x%6oMYmGojO6 z6eVfakWyPpJfz8N4~e+)?k}sdDZKq@!RdUqy(RfiHzQ4MZwE@~^Gw6(HGrNHCO z+F9r0!8gcuX>#NBw#L7@lvE%gz44{}=PR$PTOFuKIvo*E`1~_}@E}zt;nvN%mTx&_ z;tuJEjyM|q{>w6Joim8UkX-?Lt($YDPA230L#weoBIA_xMrYf_-)F!pzmdQ`m?y`T zd`d7bouTK<6Eo7$Dy}pO5V8eeMp5zI&C?7h6DDAezIY0mTb3uHQk65fM8Vg}U5`Yg zc!bPvIf&5H-6*dZgFU&wNmNJUV2k0Wg$NVn)d-6(M<(B_eEBeaI}i4Q_Y>f(2omA` z0NDQb`p+0M;+4Hkql!N7%asBRa2L zAt&SApE`~$hYSR-ybrB&OLr>0Vmv?7s|tSt6~rkV!kYxd@9woOGKaekujX9-9U z*k^n6)~=pYQ)SpKoR*%zJ7=-_l5GRsHxnSL?NhL~JX5dua5Ute3QCM$l4hV&O%{fg z#^)YfDs*2MJE87RuNgc8XgBI~ao3TAzyL0(QN`eQeq*|_m59QaLy#ahv@%8|2k#aQ zK<=IGCGGN5$M)l|f4Cy%lM{q7sVowf;QiW0OA35SQ10IVJ)f>&dTZBY2z{cn4*0F;-J^2ZR6EkEKo9%7!Wh{ zHbdJz%0GHolZb)5MO)xi*pfutSOA5C$}jd6;>herYRGRA??yK7zHPiUgrD1G)J3m; zO~JKkn}5ky4vADwk>KFq3%M8g0GN3$UM;X@^E1Auap=+Q<>b>3$<;%3J+B@Z?xvUr zxdjJDQqsb!>M5Z27R1>t(H~TEARAi6WPvrYb#w-ppKtwR?C8D<;uVF zhDMGfedn)Nrk|4T#iXwFBA)UsgZadGOKiGjgz7W3nbCc0D{rD(+vsgQz+~DmQ0V&E zrn@Z7hWJQ&LaDH^wBYkfKnbkZV^Xi)FFXdHB<-IN~_2p2=_EqIaQy;kecSumCNs z2jW}5gj#o7>X(uA&vS@hCM)}zU)OAtCAI2KN$fT%v3Q3_B1a^dbFgI@vOVnF%VN5| zYGh89sU}|}YAmBv5sgLurc@h=i}#m=<4o5(@m)E}OdJytfn-dF!^Gk|5-5L*ZBWD+ zO4$`Jmrrx*G^DgGc=k642<~Kkzg?Z(-n^qEH&?f=@uL4|*C6Y9uP(nyp6cET*J$Cw z!r9rUc}Nqm>9%noIc}=E$;DK1P0qKDj{fZW+`M@2_Q*OpE)y$rHF7$dV8AoU{1>V>|yTS;JrIT05 zCa57-v&MS1bfL5{gkJf??}s2w1URTnV+*T06uWnND1fr60FOAHJP33X4YUgd7?MW5 z2v5E#)~x=DqfnIm%zzA##J54FijKQkF3ZgRs5$a$#f3k4l<17?7YlY`U$CC4rJPSS!oIQ6j)xHE4u^fu!cg_uHUx> z<}y()HCiC}ZCT{_tp{a7nZ;i{V&~?JjP(SsT{|+RqCk{6>huI7mK9{YMv%akdSdJh z7Z53{IVW>ATT&WQ7Q8bsr=TeD?zdNrQLo%Ih==4#GR0}6J1mQy9aF@Ye~jsOtN7dJ z6T(MvI+pt2K{}Q`Wy1Q?7D2$p0=jd9JA089h>@i@sKLjXS@*Z{%~8_2n*!zUj{_dR zhV=3(?e!<+FJ=k=b^5oMZI-0u6oUS1H}4pWbKrh!=H-d$xMK7kD>K5qC_>~vd-kN~ z*xeFNjO)X>4o?pT^2$1jt7luK%Th7gU)h_aemr**8PP^D!k_jMitiyJLd`#h z+c0*Ih`_Ettmx0av{en{HY`kaE(3co>g%W*P6zGsAoR#L0aC#OwU$~WYIkyaODP7b7SEFRZ**$N zafdL>DG8bxZ5`!0nX!xX(`^xgOoYdMng%FSQcUdC-YUdYik!pd^&7<7d93N$S$Rwrf_GnWxE)ffaWC-!=s)Be|MmzX zBqi-FUa7UdFuP}$dWx(jQ=wdt^V`ikai&C4Uxr^)bolY2b*Sm+tgNq2K744ScBQGy zZSy{B5Q}cc@|W>lp?PO17MtXwIJrcv&UadPV9O^b?aH1`=J)q)v~9f8TY|ue>OUz{ z{SSN&NUjFL^b`Fs?{;%Sx!R>_{db!@YLTBe^9){XOmyPfv|b@lizB>fk;vU-8Q;5u zQ^?px>v&F!^*Z>@63fH^t8-_f^T--5@MP3ADdy4Z_nUATM2#Ol2=c|P}Kn^hY9 zphge#@K%2?i|Otm-Bvy{D_m8^keQ0GQMbb6I9F8pSsv+jsyp-=7tW_8;(`P-#*lUi zc8)o@zH(H{urIl;7zSS*5&k~M-*AtSxh0px|C3>rz7L;)Yi1r$uW3~GRGP2Oi>LKh zXaJ_%&AO;plW73CzH=`S8spKtnACuLcdvjeGzao*>b>*AIDJOWKItrWu1P0DNl>nj zZs_=7yV|-MttU@xN8j}S$@Rs=H^N~jLJoWG3q(^T{xWjd>(m?)em~+{vnoit91O=I zAU=GB9Ga>*rL!ZcoT0zB-a4+#A}-=6o?vnA)?&qI+Hy9h&D$uAD=X2C z4G$dj@!{6O`}^;(D-BR2-)rtOel$*6plrT5eyCJ<#dT$6t3%=sYS(|y68x8pi^pgq z&vsqUkh%Gayv$S;a|;>MjdMdBMv=Dxb8!;lozL4~^l+?}6}+oic4wm>Ex0Xd;vu0j z1UF8HXJb;wrM^U(RJ{x5%Qp{|^CDmR{9$AyRTEuTn6Del&)lKoWnbW!H=g}uvfe@I z^32vqe$})2(VvoDBWzn8e;YfsrhrK5j=OP|j=KT?B{Sin!ZPdf|)j`Bw? zAOF>=*3X_;+e<{@Gr8x1*C*?q?2;k+yxokH$u}^S_hG>7?HguW~t)a2S*|5+;wJs&5wE^>m~is=!ZQ$Vs7C~W)v&=6f{%T-7c~(^(Q~<$$l_2jHl)l zWt{Y%`{@*xaea*AgAV)-kD=G#k79g~I!cJcCxL$~_Yc=W20vzX5~5a@9*k_R=ix2R=W_v)m4{s%%M?G`<0OF~znjjtND z*fZOO%9m8pw;50#`!K1sQlNP{kv>;gEQfpa=uw+SI5`8kb&MIsuJn3~l$f@zJic+5 z{!pFzPdbGEy__U6_5Yt|V!`R8^4B&Ns#!W$ZrAmtexax=^~A`E%&4hFMUetDCe(zR@Fhqy}I zs>433{9V`Z(C7cCqVddr485M~$8wO~u9WLWFeK_q-z_Wcg+@>6w3<3qs)- zyp{n|P!0?3>0*+$>PmHoe>nR@CZwEGTwYYD$l)m72WBNr zAY(;t|0^?RNJo!4z>;5Bte-NSf3z~^Cw_n zoG+$&SZv*!Ty7ngty=8@^UGat-_{4Ompy9|AaH$2DT>RtYA?uS@0bDyh>P%*{^w6H zJm>kn+54|#$^Oj^Q1b^hc5E7VJTFZRPgW|2@sV++!tUFkCVB+Nx>pb8MY{rmU!Jr1ue9HJ}=*p0IxJ*h6z)Y-dI5^S|c z0?@u@n1jE1BkFkZWC1Zgn%&USi)}_QDJpf_|MS@=z`EhPu-P}Iz;AP-YexT!D89Fw zDQ(w)JYZ4$0b+o7JmE-nR_?N{Ex2=&wnm|P{rQdjTf1vQ_Go>wHv^F;jiD2(YLtUM z-p>J2uks{w(OhX%q22>#ze)n>IW&Zzme?X%AIWzrwH+><%g~?Oc`cwkn|#jYyB*W^ zzdN|=$CF|$DVB#3a`AbOCq?2Ak{CjwVO^r2=cnf6FAoR#YCaZ8G-Mf!yF;R(?CB@y zNBrY z`8rZAS`)3$otx!@@7q9UBnj$6p8*wmb+TSlzo|Q~AshM%b6h67+Umn~>~3q7AdFN) zVice7CA}R#Y^a*z)*Y!tMZ@GzK(vh=y5b2)AN#sK)1E7c<)IXf0$3;o0*FaCCKkmz;N0WZIGBszR ziil27jo%tvyY+Am1jzs|F*tiQb3uv_7o|m{iMZ(&Z^# zbC4ZpBtK|-uHIVTuG$#!Wo<$Tt6ClA)QXbNtFBj*G4-Wu-y9!J2;jeDxA9TFx7&Eu z=8C0bTcQu+$&>1LW`L2O6Qxt?V$;~GhhVtY@PSc>KOLe{J$#DGK4Q*M4)P3@ z5M+EM`(qyL$592N0cjHda?UbC37&CGb9cNkLpv@$*-46X~j`}g?=XCj(KzFWJv*OHRAbaUf zL)D>&ayVkt5q8F3X2FaBj}VFuzaEVI{!vKup5}t-%%894kFP49lOTYNJJ81k1x~lm zFQBoGZ=_iG=ln~PG8QK5_$NSF%4NF-$HbRY_DGfP_BPJS4((*;yUQ#U0XN47oulx31;%u!}KxsAk>}r5?I|0o!En z{;eKvVw>gvpvv{%^(V&Kp*HpAl-PWeeDL)dBQBqF=0DtbQwkVHL)z_Oye(-$y;%nT zn&QY2+yx|>H8e3Kq=5lI{EpJ~R6Ct)i>=BtUkl%*v7uTjwHW~vVbIAA(uFw0C8uwm zz$Eq5-qmMR8Ye}n9}xLHJQv8Lotmk^e)PUl`3hhT#I|hbAE?d$UO&QCbNP%f84gB@ zj`ScyI$#=O)ZYIjmT~K2;?(a$)hJHg8%kCY-qI@gyQC=&VWhy!UHG*62{j&RUCSr0 zC*l_AS7b=OwX}Wp5ywmp$^NLT?nbnX1SG}G`E~n%3@M@;7>qV1r-M0c!i)|}X>W@i zQpCU#y(nM(`R9fTXPjvahrs>Gyqbdp)D~XDmRobRFBblh$NTff8aam47W6^>ZtOLI zv4NL8oR_B`D=#$$Gco-bu3hIx#uboEa+mTs|D1}~4@>bQw)A*@%2`O+1q|_-RUF*U zJakP#D5qF)ZD^_`{pk}D)m5lCb~*q=C2wDgnDnbt7RULA15+6Ba0HR-Jk?@x4H-F(Usv{Q+#yx_PMF+vLQ;3zZFA(~sBUlJBdvS7TXzbA<5wnTo-0wM$~8 zD3gm#hyCPVT4Y6C-<_vTbO#F7Pku8jyp z+Lo>R>g-4)RvhJifX+LdiB3ldP$F&Q$TXRDh4*@v#G%W0b%~MPND2m-Xl!bf^W$kA z1_oK25Ge(J1J^=P6FBfWal(cm$oLQeFC#Pb)_(q|+&l3$L3XU@dFT2lYH3OBQ@%n= zXZg`Y#+9ReO!=GUPrlJAamr4dCBGz%Q@ zHG~O6Kgt)q_*-$}4yF*Hn2E8x^i-OmWB~Ej`Unm$7uBw;mX9JUGL!t*uqNQtFC-8o z6tn}~rONdo2Y2fFL$D7EtkkODeI%NZlmeD9?a*{MKt>Hqj>63pSp!`cp96v^ehQ87 zZgD%ciw6b(i)n;`tC#8x#xd%T3+ZQ=-b9Db?-}8p_*iCX0lerXn37cuNXW!d9V`UL z6E(qsY_SNK@gMX%l*^QCLaeq~d&QfP-+Dh;u111q7=51dho?jXt~xeM>`tnunQB@R zR0gTVpJeClb4iqZ#OmJBh9QxQ$mo+~li8hl)I6B%e3zpF@s2 zcG8oPhWganU}>T^4E`~4?tvK#ck{cn*Q?)q8yy02XSIRHn}pBHsr$;4fb}vW-WpZN zQXy8}l>+p)e@vVI9Wu>2(j8-X^8Om~Cby>L0qwdh8vWH*iKxcN=q}}%x0TF8yKk?l zOI2!!2}uWCpDm|ncS@R_g)=b#yuPPi`8vHzojt1p1+RuCLDBl=Kw`U3?I%5eDNmgW`;o>T!CT=79im;R|b^L^u#u_NiY@vX}2 zZxZV9h6s&r{LK|Z*lv|sG~Yp7bz>l&8ab-2mIEF4BvqI0q|=$PDr~6gp1X*!5ebYX zMX1rqyRO|QvreXUz9XLFr>@qNdmZsU)0MA>qqw*V&9Q0M5G3AD+!@0jF@c|X?bOIE z2vap_U@f5hun5XeNWOkc-t^}c`r`;-sPRMVSGFKbMl(gnzi+V-T{!(-5_vt$aQbsj z6GIH7m;T16Ziy!+;+`ifv&NGqB7ftKt4Td^DWsr^8Upe=<1nlqJej4ho=d4jr6V!j z-|Y9)#EPNcQ@`hbgADT{=+@STN2eH9v_lp?e*0F8^OBK$&rL^)9W`}^~!3+Z}T3L?h^zp%!UsRx$#vN^d9TlC)ZcOi-iCrGf;wCiK8 z7;OGdrTiN>@E5Y>{sRb8^XxipSAm&~j#8-1Ja^kfj}i^sTmI>y zamUO?Wy7CK z$lE`mycB$p6)~0?rG%5fd=!6A0oK;Q-ky8M>sPU4q(i4(eT!J6d`*y`usPVBM?z$i zOBpVFqZ<#uz36MN>}ha_W$ZjQ$K0m0Icm{OQJ#M|G<%$5!smnftf6w(JyGLgIU?YE zDgNcnLv_B}qj%iE&-rD~cU^jYG}8KDb9o)+&^!He9r5zbSOWxS2qj#bXQ_to)-Lc@ z6^&ROnz>wie^LF5Dg%+Qh5UOJLOGj!f`og4`K#i>PXSOa$*Pf8I9c9!o?guAK1-g- zxqVRE&Eds!hyOb0(jljdmVM8Y*)O*E__ze%4LK51(TEJo2owH=KwvKUF(-v&pA|Vp z`l)yl(xEl`9uT+b?had$jNdBENC4S8Ar;eM9WChQ|H3os{<`eR`v-P}hWc38)VM3) ziHx`Za_Qy2d~#5|zUE6lSTmLI=Bzcqil0^#MfSrIzh2=eQ0X zZ##G)l9!V4^(8>}4a4Pk)+{PXGU`dUU?uT>uddpL9*Nj--kWj-1e=pF%mx%mY?-L9d1&dzA z=RlfR;6Cnk7=8lxF{T0qnQ-QdzDZ?%UeA!#z)J4%zmvZ#FGQ~gGl`> zMw25*UGJ>ReO8j4XmeX1M2grbvgs(VUd`%vPbci*e7YRaLLxB0G!hq&w{M zN+q3@k?CV|(&lPA?{PF~KJiOvC^0HjaiOm}I8G*~8Jh7IYJ&NG28-#OTlHS;{PzRy zaAMVv6Z`KfDNPjk6KjBP{bD+iEzu70gWpX(#wZ8*;Wk&tLU`~>ISOz=i&|`X6i7`< zR9nf0P8(N-(FRovuHg z=y&OSW;zh>M@0^3DOI5Vc<0P;b=+Vb-p#&e_il>P$%3eu(KcN>O5g)bn@No$Lw-~; z-)3scGqOr}k=*CcY`h;g_$g>;mqYqMVFUw^lXqQ@Kz(IO=>SnwD2LNlfn^3Mu$Zoh z{}@63V2Lo;=Mz(n`Z8I~wUwTt9wt$oq84wKC6BjA`v!Fk3IY9+qd`Hai}sxBrryvc zd?@}{@k`N3P(0lBw~v}$WWnmj6{G_ks_z3ZgHf?Q1+10e0c19-D%uF^{=m+6=G$B& zH8Lv|vrsagMUfKcz4}DU9&+0Otr=RPi)CY)+2lY`@i2)Y*}C9J&mzR<+u}>e{y!Lv z)Y@R$m%w-~Htc7CM(2bY_5PdxRe`2lpN74q0`++2BfBa&4FXw`I4;z^oVJhcBvb>Z z(EMaSFWqeiwzj^QntWqDhcCt-cJFy}p(6UNXZn#J`Vn6-yCRpau{qMGS~?X{6YDXx z6Z*h22aU$p+Ft~`sq^@DT+zZV9$L)LxV8QJoQ<#z7NJAZ!SwM@kIhk1a{MZ519zz z>y5#Nd`;h(MxPDGqS>0=FE`iwH#?`tZcDF@sW3|14%FeA;*UX3o6pf8P zzY8CLJ+mF=?VoxPqb{SL;ssTO;t_Yv>0_}CERqrSd%34qamTjR$JTNF#8T`dYZvoW zZv}sgqsmFYhDRy$BeR>tMo0x#)va>p1-Wtd6STtZ8z(mVvt0L^%x`AkiQXQsiFEmA&{g6<;GE#aZR&;zp73R*N{v&Ms2?w$4) zeWLx814dP)k=cH8;5d{U8-=*O+E<0gLovzB-cZFwJpXi{z$*({MBG)q#x^fcOI8l0 zHmrN?zd*|@M7kr{M17m~VVsLa!m+27$%XI*;kNDjF;_w*BR&P>`Mle<9fxDRM}Wnd zxgRn@C5WC*W{SG)W?r-G@Z#CV@KSwj>w8PBE`5u9zDbWaQ*~)a=3+0HUNtlDS$k;B z&2x4oM0)iNfXix?uz1AXK4qF-k@1sZ_13E+=d zR#cci`xyoHuzmoIFvevj&GoITE5F+e{g_hlW%Gbie8l#c-R+VMUHgd=*pAbnoCi3r z`*kwoC|J^S2|v&pbI>iOV2UQ5)t1!MXcSdjOUPe%h}0>1u8~kQujuj3eoIq+W3|%& zg)1I8OGSvn5D=k}-;74R>fc9$+Qx7n`6KCl0-}M+uVz;G{|68GCS=fmr*aB zImk$4tlFYvC>lmw1ry3090U1zc?jIHVI2TLqP{7y?&;mIyvnN{gEzQ(!g$o5NJe19 zTqd+rPysMB>e8^i2-ti*z-9?yeKa)*CFCg>T^>Dzc?HwU69DyyD_-jNkr^&nHHi)g zAVsFx8;{pS@BYdF?=lt2O>@nS%4P+vxw&L)o;lq7i5B-BDT}-1GXwWmN&C*t*CtKgl3z-UxGA1G;`jL5 zc5d>7M4H90Do=lrz1gO&d(oug2lxJ3xGOZ*D^7Btza$<%hP?1*S`7O^e!~-i$iw`n zg=SYnVV5@^tomPmibhc+bZpuL-oq>}4~3M%XaBGcc({V=u3Rxr_tf($CGC)?)GvpIy39y7DEe7Y^z8m&Um1HbbAymz2&wSO8vy zfFIJHm!^!r?xkhu<=m#&2|$ouAmr>z@uY*#YMd8?_=en76UW|vjb4LYt8I0MbA z^3yX>#P~hhe zt*5kBCzjictDUZ~c}MkaDnW7=+hzf${f|yzJ`}MST-1FWE`7k?tG$9;{#~4} z0O`oUi`a8TY7AXC&myCw14PF0K>Pc7D%hE@%O3lQj0Kd!6`Q;0;@F zOB_zJdF5g2IMEv)$z<$@UWZ)0N47b=xzPyb$Vxw6R79i%nK-l!RTgoe9Z`{(JSuv1 zsz<;k?7hgT>B(F}#WkNB6PN2>yJ6Mda-heq zDd={e;S;(cbdNZ*se(jS=u`g0^BI~~Rpk`8XKXJwFTC!)Say|Y^(pI@{kr3IC3o5n zKS!f-?>^e`+Y8`C`-B{44|Z{1sBAwB%i_o3PbRT>sU(~<5R)h;QeL!?FQY64$%yg|U|M9uIM7yKtFh3E|@fgg;&$%gC;YI+gue?opyBu#{6q#WT-D3cWz) zozHWMTnyv4ftW>LkD~}SN9Ne&ZfR5e4pd{te%#NUcyRmHdZ=+DmTbY9yl!|Ob+YG+ z<5U{UFZS~$toRtPYn-D?(y*>Pwcn|M1Fa;Ghr)R)$OsMXH&*lOKF3fHd)@5bx3DUI zY8wtzfLAak^^M<6%qiYzUshI){Z)Etj^+0l_p%9STin1z-eUdybN>?%VKLvNXt6?S z#@mtgH`)&Cf6xvZ&;RWN#B<@-pQ6zO*8h0syfdtS*s?uL{jHJ7MDZ&bd3cl(KFP>% zgc~HwAEGubK&T?RPstfRi!(=9-q1RmW*rpWqL*W>4H<^&F9r-AullMrKa3ivF_4>n<^c2pZ4%Yz+H6 z;f}&|#6=HHKHItwt7*U_-`-t@KeFt5)oih9G$@JZbzFYgoD3FC*5$`Xb7M4$pS-Z$ zh_h5iJ#kQm%OiL%R_$|U<^yQ1JEKIeQFgAV$@tOQ)LVZlo75xMdYhAqNeV87#r7Yd zR^r&tpn~}t&&pmGE?^unCPU8wD&SXN1+@MJw`Ag!@+jMqG{_V*_Oxml_U`-kHk3;j_X2L;ey^p{{>e5M zKS~k%%Q4RPt*ou{9M{uQVz0PMZGM}Z0*dHJo3s`zH(f{tL=>g@Z927?&%eI2{q*K; z&FO{l%)(f8Cxs+yq5*_nvIJm}xAjq?jXXNWSuOa*cbwd|wXN>RfDQe2;r*7CEurHs z#Aq9~M~?XQbvm*b5VmY`G&Z(WaIvyx_tlg6YP4%{tV4BT~*RKbs@eRntRuM>%#|E)T8cDGd;;W&R(Ywa^=@{ z#bVeuSZ`pMQ*)3zMkt3EjUu}*s_XZ!*K-pcay@tX55x8Bk$8T!Bw;_g0X)ogK%^fw zcgTAV8}E(2{R@)wStyU2c`0E$XoD+n57+_&wXnpqe_nF%?n%}M-VH)iT%A)<{oj&x z9qWaMF4Cd8ySjP+@;eA&SFwO|=V7>4ZA&M=fYBGEW6QPS5~$@w-%NP?5{OGL*Wqfo z9(DD?v@-jI-7nir&Iz_z=&(56eZw4&rzMt~RN=7je`SsKR^ws|2f9mVjGw_- zt@v@EBRD$u({7N+=@*^a@ha$c8ex_HZ4H~%K;uB&v88=GOR|X)HbTTjI9?WLFREbX zj=((=P3hPWH=QD0h6WXcM?}AwW(9W7>=s(=oe#)gV%)$q-w%|~_5as}yc3M^+&r`J zZrmRe8QfMGPI&-pzc|r3g}_cK7nP{=jF&*9RdkK zVq|78KKi%~yG7?P3P-+Ml{dB$GE)z89hX*4*FXFsxF82e_mHh8*a{`+u`^}oP7}+i zP#}->c`s}Q)+uX-UvKEU>;J>+#E2lKxit{+GjreXDteZ{3*J?GDMAI~zwqpp@`J5RtA}zwMT8&l2tNoI+BEVK zs_`V2qeFT1YqRe-m*_*)fqNko|2fl2HxFFtIQuuMCR%LH@jE*ikqs;emcWDXxbVNZ>7bppA3~xJX5sA=SbGAly|u{! zkOq_oIHBp}b*6*bccj0@63Z#j_LxQ4Ohiip^i%J8UBpyR2%o#}!bd-97l>IZg2kQ3 zG_KYQx6?oO_pG_`hO10;rAeS5N3s>>I9Ep-*jkBM5L!IbJ%%vxr7W#&9z}U z`)|+pia%;4zeJ@|Dpc;i_Usb6g7xdJ!%|nSypUIzoV=CCExs4c7~CMvfnE$|EBh^w zapyw!6DY7x#4zzA>lOwHA!DA@!<_%VK!d1PON~dbeRYR_@pW#6JEbXBX!oO7;wp$9 z8d(5p-KKmv?s0kSJys>kVdowdq8Q@iNf0BpAyKn~vwK-qRs%BNY71$~tjx^%bzr8R zX}3tKs5u6qd@pbX>`d4^CY}l~@(xk5I=7s)1?+HMqBRXlGetxRu@Aif+_D{iV0TaG zz;@oz@Ka*U9DyJaKa!&|-uiBbG2&Je#7MDr3EXKu#{ds|e+Z)Vv5hP?Hv|Npm6XTWL}2P8@QP+RWlhDA*voz;aUcY?STwZdg&wBD4T)@YwOcK z(}&|uYHU&n6jeT~`1ZAS3aa%RHrUwGq zrk=5w?&pgIE}6=?NB0(2AV$ksnBkNLf<>&Z_sZv9t~k%Z{W}rNUqaV?Xsw+B)^Qs6 z$qNVL;66fPg)`q{1>`yp)@T_vmvtICd8H^ptZoGA^uQOwz%IM;(#m&b| ztIx;OW8;)c_Z#*}_MK#(uid4<-co(Dpx{Btm4P+x=f>%7%#}K0hG7@R_~^d~b(XL4 zq(v~SigKWL-FsGMx?vP@b$^`}H-#JjORH8*Ey~v4V{rC6;ah$y9|t+Iqr;+M@4ltU z{d2wlu#awZNZ_XK%1D6~vcny)xQ^-IL6grw@no_=Y-ooG|L8POVw{kiga^R!dXZQP z{$c`7KU3l7`?@+&dUuzT&pfy|*<${s?g6s%9Pe#+?xSXt?)micCACaXCg?GoU%X}b ztqPjA9YxH(wXqFZLy8)StDkZ2zA2sRWnp8Je+maIz~pYX;h0{C^)4+Kcf(BKZ6vuO zCsNh}>5tyMfqO2xDdKLnEDzoi6z>h~gvs|z+lh{+ql=xya+-@w!}9^!Tgi_^aM&4x zZ{Nmy^dGlF?&*om8SmN_;#;Z$aZDQr$rA+UPOtA1x-Un!S$gn>Tx3f|7SD0^Fbwxf zc5C2`5Ot*kd5H}UdG{aNzuy-=Co`WHfQg*p?w24kUg^j+{kfCX_=&6R2>EGH8K!N= zR3Hp%26y0mS5S`3Z?VK5Ut)xj1;62k7>o0B7v9f7Tvc~iO7v7Kpdu@r!73C)NqH2k z4N&`Zn8bIZT@|I+)D`Xq9Ab&6i#Bo5H?2<}(d|0Fw``hvt&!HREJL~XkAoGv_1 zEI^{*-Xe#g=4$bFCILNj7}RRY{x)gn;|MX=Nxd+G>1+o8YYP>E6Oi({Uhe`>^A!DQ z*TO(G!}2Ql(U(MWQU3kV_xs_>r9#s3kB}&Ku*%H8ulbo4rP;|AZL{zBRzw^JpLB6M zTMV+#G^DnYO~H)gs&Yn&+mrij5L83cR6yB+a{Cd806@#@yn;r#ayb zvU5?2zG)8k7A+qH*{yu43Rt-HwJTo0Jr#v*stlV2qY^aJdGwc2p(UE7R3on9ec(hz zM}$rlBSPUAL=Q}$e}2b5?21}7@!;C!symXG12NjwDaW$|4FrIYDPq~e9g1Qovjbme z)T`Ak;}jN@w{op&QK#EOfI82EMk>Gd89Z`r7o}Yb>#(Of)&`5+Zy$>DW>nEJm zw%bFNd0v9=Mq{aGz5)Bug~kf!$KNXA33ce=b`I}D^SWW}pKX@4-Ccdb^zcGVS(*Uu zXp4KaoPmV#=D7A4$W&E3gkEbud3(HL1)1zQ^~R1(!gA{5ijy? zdG;Oqwed!5%bN|miCMksyXghijrUy;1(=ce%dqlNa|wv+@Si>2N(?P*aEsD+;|j!8 z*l7P3`I(+1Rp;2kV*#UIFWmcWWsd*i0BGhI%y0%$?*4Kjgmv=h{X}p~2Lf&1-aBBr z^Q7G4+b7R599SFmR(h)V`jNSxJEywI=-l(ytR6)}Au@dd-&(W1P4809?W~Xy8_s3v z+PdSk;L-Hm?%+cjY!xa@mtBKc?sW3%f%3R&j`@tem+z8z?aN*N^o>U@{vP?c$^Gc` z7Gk*vftfZ(T3-q1X*>4wwD!G|k1=(^J~}cHzo58F^CWTA_LGM2jLKD=jSm(cN4Zox zSe*E5Aj^JmX-AINPdgwqzx|ach6WY5;pvD2r^*zvpHJ%CjI)39y#DwSJBBz_bnwQ< zB&o@djVaNfC_0BN%`?{eX-OOpy!E?>3Re*y-5*Nfn4h!=34GS?xl zVq3e2D_f38$2HcZQ9s80O*mP*_14wHb8AluLS1GEoxKv>JaaW4a{zo)z9A6h7bAbb zYC!JfC)$$5MgIr&Mo&7q*$dIU9g#IoGPm~$BMrW++vulnV9CZZo2MT!fM z&`r#5o*N+Zx{w=!F(1myJ5ykgc|<2vwgh+Z3GQcg z^P5SkzVxbGQ7%;(yM6E`TiY4Q zb|Q%zAlHAM$OS;~|*bhb>T7jTN??Vt&G zcC&?4+!MAO1mVesBRbQYxrca{cGIA0rM6kK{d}K0yuN#I@;>Fq$8R$K|i4PfN-udRz1hG6V~Ksuq5> z?wR#cSXej;ryY75)6r%2?Eux7&%jAlH0q@SmGHZR6wWLxr`Huiszp?u+J&=X?W^8L z6u&nqoVw!bXeKq9tnZ)~@$8BzIGYNwlRvE;c5H9c$~qf1$K5PuA4K!K!QeY3)uYz7 z{r0~9_)_Btk|7b}M&7+}9D@`acn6K1?=&Smm+eK}zFsPXq-aU&d0qap-4u)m?X#bM zy;=J89bYeakl_NCN$~5<8wJ0`w2|6_4F2i(=It8SFe4^A-1n;8i(}fpevXDLyl#E& z^bJ3UPqLw8>kFtOq?t*M^^liy^QF_})U7BeIL>~iwVR_jXCUwcN?H-!GP9S5ZIIs5 zbFxY;1mg-v8~1Yh+4C{3q0&#a;b6Cz+zJpwzU2g_2Vy+8g@LbrWO@$|`05vscVH#m zvHQn2{Bz^Smmt3SaXG|S&scjtGCD#7*&+3v&WMneu0>LKbnM%2BacFOO;S4W@j06N zI($OeBJ&;iU%Hc+SC;(@2in~@TRt&CBYp{(C1FL# z8ugy0AV1D~7ul8fh(hCiZyp~BZRF-KP8lDr&E%Nfycj6NjT?gSe7tLLA3EJc*UIW5 z^=k7xCarC+9g|24pZ=ZW`}5EN<(Xp<0{V{`6;kf*JIUBv7{=mpkL;yO%KB$l(aVc; zdv)(aG3G)}?%AJjKuwc)f($2f5%DrD$Bt>kKDmZ?nN62+wocBEM8|KR3Db&rncD-t zy3=5D##Do&2_TJ?nD9M~)no@BYK`*1HpG)lRU!&!M=LR%;UKXbeT3r8e*7e}TZuNT zDSP!a&H2kV^Is?)z7{=wY+@HyNVDC7EgiclI8V(aUWJKSd1WxauXJ%Sfd|dH@nPpc zj)$JXLg=hiTSN&Y7+P>Uf7ukwR@ULp93gD`|J$S)qbby4-nf1LoZM1y0W}{nqd?wB zz+voH3S4l2=vmUT-jor)jRQM{o)WJgc`lrPKeUmlPBvdlMR6QSWLF%&i^AzZq>+2` zQ+=1S*9V2*tOG80_wgtRxSD&VZpS@(Z9T-f$I+tZ?%MU>4}wl$D<0%#Eo{hK9Y2C5 zLE*N^KCtqjyJ&vAIjW53QuD^@bNWp}r_cH=Ydzbh=+>73+fVPE2$JK*s)gUs zjx_h;*;Lg(w_!NvDu`ay_|SZ~vn#K`Ts@9ey{L(1mp=tdSDz6RiorrnvFfAcxJ``a z9t|&%LqZY9Qx|WZTYj-y)l!(BMJM^V9SV1Vs5a-f=d}2KjaeLgf_xNaHSiC&-HZyx z$1lGfmS10v+(irl94NC}M%}hQjp|>Oj@q_xK^?(P-(Q#B<0f;5T#lkA0{{fLvN7JjkU*h_)dA zxf53(z(;~df8NtfB?Mv|g%)oPEZf5mZ_y~Go*{iox>4DS78j*mGukx-NE^a*^D^ydTr zel;~|A%`nC={YojcpW(H^UHWj!u}oXd=Eh*EJQRPd%gAfD(1(9w=T3|pChVBj# z5G9oq1V&OqQMywa2}x-|MCtAl>6V6pnfa{^);Z5}zSsL+*Ygi&kIs?3*Z!3Js&3sofQE61-}oDX1TIgr^ahwQ5ExM!waqIs@NBW}U+rfUX@`6nsubXZXIh zY1KT=9l0jrGm8ru?reMBUSg@nA8xa$&fg7yGtK9LQqVOVcG^#5fEQh-|K=ja2<@0J zTod<3`7eie3`TOBruvvaT$50c0s;lh0r6rlv`?`6pYP%Cp=dJ-+D@Lp)`(#HFT#)g z`X>CJ?MM#7G+M%@)sU-90quQVPOF$qhG{I~yNZsJTc6nJ8j)P5*kS~(xB+k=5=b8XA|S+`0^m@f2XHh`r{)+z@|4rX^)1JOebeV38y?ufD7awf`s>LbU3bYg~M!% zgShyY{U=e#bmxm8ypzFIq4)8_?7*5sC3_HPnw!R+f!;?V(BkltFnn|V*M0tBp@*05 z!4P`m;c;k0rAa(;=C@N=2Z1+|jDg~)<#P^a`T}gxyb3<|QtUjAx!Em6vBDE-EFU>9 z#dR2X=3nP2@o)1qv$B%**Vbm(zu#8OjFW^_n7|VXyRFwU*WzIJL@D1k1jO8n5@a`T zJb7+zZIBX{tU{0HCFrZ`@wKRi%329O#v!h2SyN48LCSNKH<|?w=9oTz&M`3npar$( zIkR3snRy}?cslR3QbJv-@YR-1MUi}%RtU*f{9?doR$NRCv zoTI_HVtO3>R(Bg{Apf^~{GaBQC39C6? z1du{J33yaOpn#AEi#nasUh>m({nONr!R+WEfZfY==d%*-kKVlGwE+qkw$yIBNl5kl zDpr`yuNRak4(sXdEmL}Pr;J`E{5^D(fcUom=#jTI3GtPvy zJbxd8RyFwME;@j-bSr-B9CrT2+g=T{u}j~&I|rzV9(=O^vFpc+RHb(RUICW@J%ku! zAUUWWfGU<(*foNsBhcqRAN9~{LiwS0Ws^@bJVQzZ5HPZI08#^jWAOhG5hRGouif*~ z0b_-@DFO+3h94dppI#9UCuv(C=%mSUl&M1%S7gEN(jzvUq@2_-x}8+Ik4MvehVy;( z05sZ3dySA=Fb#mt1?vW`ta94#qNRK;%i>JLVOLEj6fKzD^COwOel-E!HT}1O7;>L+ zpyMgL(G~>K@h~u<%`ceotoox-^mnVyih;r$U1+~K6Ta8kvuCXUoFpHw|Kl!bbMy-D zQ3?NayrhzeVA3~FEv)FgT--kbxHGI))Pq+J_jHB}jtLpeoU(FPBWCy61@R6_r1DPa zk8%2yM~UH==I(IJNRf(^Qrf7~I054J zN;2N~mwoN(y+%ig&O0m?WU{7@uI9!%7(^7b$Zl9MmZj;X+c8_kxFwlaVcYeZ{_A4w z>OqOvR*R4%2nwn|*QKs0nqd2A>h(`&1w2!R6_kesDeC7XF%d58_Gz25r)P-VzCv=A z_~#;o-J!Wnty(nYIOdez9i4>s}=I=dvJO}auJvJIsltvq2Vi{iN{?h0__U&N@(cHD}8a( zEy1g*e(H2xB4=3R?6~=@uwto^YCBucJeU`+xJ`=6!Ib-jx_&Ec9%>3;;AN5PbNrqp~{@DNS*U$S- z*MiYe`_`teYm{SH>tSU3KtluSRRAV4m!k<~dQg|RvroL&eta|AU-p5M-?Oo`kh@I1 z?a`_0la=s{1r8!u_kru=ZDCn<6;jZRCcoL3{mxQym6VkbGvj5%zMi;j5pNxQss_0> zJ*ut1kGjt1yws;IV%isCHAMQ^-drWuBfferWtOwp76KyYlrLmW5840G)uQ2&I)Z(l zYD{?-19H08Kr@wpDlPQ*zg7?@uR)J~?&{3|9#t@N$)w;h3q9Q)!wxW_tqG#zqM`$r zv$THq3Xfe;)XZEd=bXEu5)33q_dbvDqQ#+JQHeetD0;)VPA@^(#8GNMK7{*?G7;u=>uIilAjpnv zpw{imNWSS$2mVhF4c~&?^ZZ;`zj?-KFTp;3;-qzAJTi9esc<$e4_PJ}x}RG?S{&Z> zHQ(@~E>LFCrt0zWz4kR;gYd zZ>ajG#}=0q+edYTN=IG`yd$gpelDn~QFt@c1~lfkK9^r*SPFL}5tpE@v>8InH`j)O z?pwFTyS!hwfAoz5vE}6&hWbfuucnNQ?v5P+B55zvqz1X4mv2#CgpbCLnC0aH)?w- z*j--3K|%ORD)Kh2?2w%{GWcvr^i0}gKZ}8`>y7>W@B8|AL;g~kq$^C1Z`=)6;IPoF zVahwZko?@AMT4g3l6)0NFdRehCJXW}r_|Omoby3T{^!)~aNnwiUL*q>58e)(($kq+ z?7v>}AJ2Ap>F$15H9CaME@gp#>@7X9G%XcyLK4T7RcU@XUP7i5$0UT*dyGbfB5wNf zYvMP(fWWPwqYEZwZ+D1b)0>Th*^fbWF*hqgoWPm4g_D$t#N>RO4O0$C@oRsv0V)+; z5M^tVTWJY>?yH+xXPv%sw)k@T>rz6WA8EM_dg&kTLU}y!MC?%u5xZ^|Ogr*?Vwc2oVwM?a6-ttRO#O=P;3O5*^_4`K z-6P|8Tecc%W<8zMcD?*Vk{Hi>g$W$rl8&+JFHQcgluV%8jDEMm$4E77!l&c*NIl}< zZVTvYHE0(}BE{QvW3h&=u8Q1P%7`XveT>QJU z;edSi_pgHa;9-VWQoH}Gxc0(k$m=g2_{5O~doH@-HSxhGTTjT!seuWfB{bm+i-yl_ zWWu}#8G8-dUQ-T0wQ-Ql+=)8x(IHZ0E=7<)A#jpzi>HF1QMPK}QkFw7!-rc}d-LfM z$k~5-4l3MDAvgjA!`f@6OMsTZwF&j_ssyHee}3gZZn9Q}rW%>{2G-tth49>%fJytW zHTm&4N5%!lu);a4hKkIcr*b~j(6_He-_4Lt=*jBFZj`0Om~R8b7F7Uzj+a^u?OF|Wbcqpz-Am*2-50N7a6(sL*)0V2@!i=zdYp;7 zaRS?vzf9}QWzhJ01`tS|regytp!fIy)LB&88;za+bbh}U-SaSolT3z6de5i&gHQiy zSsD6=weKRuO_$ZpsGjuFp7OzGjg>tpn0HeXR^?W4L8XDu76T`t_G-9aNKZ>~Nox^K zjTz#4VtJPQ*|0kAb7%WIe^1~f`bq{$-Cw{pmqgTUL~-k+<1cOh46?u(o&7n0Gm;ko z(8s&qp$BlWZMghLA^G=b0Rac(ppu!;1Ke_K6S)4*2LOQqOkUnTE@s%GcQg35hgg@{ zce_vKfI>zGec9e9JJ;XSV?lgRP7ue?Jf=0aUJT9Y#eW9J@coyhJ5eS{xo?azYv$e! zG%#-iY=)){0^D@<+8e%K=JO1`iYr)yy-K((A8)oHrPz>=)vyQil4dxXXU&ZYC}!D{ z4{%syXq40VNj;|0s?HATVW->(jQj_|$IEmW10^&oobbd>&y$Hu&Elm?sD`aNRo=J^dCO|lp3CJRez{J5UcEHa~@9Y6G2?>Y{o|-znO!Kso z1s2wlG&kr>oNv*voqxjn$9&WmepCUG%H4bpRY2gh>N@}Ea}NJr0ogzmP!gzsQe}Wq z9rS$t{!gcP_cb&N8F(;NNj4W!x=-TTQ8R_24^Kq;l&1CBtfM@D2t)05w{yrVIMXcW zC2%-UF?-ONkRaEP7byW0qyFLufMM;0d0l*cl0N{>|KYb@Ld%F|cM@ z$eQbKB_7}ydY+1u^29@U!)q>+o3;pqN_+J2iOjC&W=Xd^Y z`A$%yFH`2p1<);X!bv&85C8dO4fdXm5Qf~{5IbJAOjj#T>Y+P6>g1cWov zaT{SpFaR(GkWez=ra$f$=ZF@VSO-nUK70V^7%I&%i{F9k&$Wgg3a)V2DJP5nBu=yB zM`8b;2G&G>m|&OG26!Oq#R_q%PDH{y(_j?uwL$N4&^R9STjq5JgDTqJjoSB2lxEk zYwi;!A6`#wN70ev)+z$BW=XSEv^IZ=k! z62q6*&pEnw@G#|w3u?=q_D6i7Ir4*3Z~uS!5Z5OcvMEl~K}_beyaP0pY5L7{dZTvT za#ba7jsb8J9NYvzpQW0cnO%2MZ140*`Rjb){Z^aqbOk;!*3d#KavZ2J57C3rmJqO~ zt6gi+x(c@)(5HLR;Go|5t&3ysgTwB_{>Dv~rK5c>sYS=8#4NRB0VY;u=gZYs5Lw>p ztAh{wuVI@zF$8KIP)z^eQjD376Ar3ipI_SE&YTXGBbJPDQGZSCynlpRC9u=^{r8$K*LM& zYjxX`5VZ|-Y2H4?qIcrF#KQ7Q$DFMITf^bwbAnRdem%!H3A&|?z@6^DP$Se11BSdq zqmJXt`YvmqMEY(U{L}()qbS=oL>VP)IxbR<@7_TP-1m!#P7tu28Sor>Bl*e!B8y6V z?T+UF+%P?-=`eYMXo9VtuC9BX*X?7Ytsi#^RA5kxI(vZJYz4Eb-n*Yoxp0$T(|+xeC{XS+zu-mKGeVS)|PUGK{932*rS%58qi0>g8%(rZQy z?}6zKWRa#W0v^nl-cTDDiR{L_qict_Zz ziR9__KH%`$18%5Mg!6Bd^4?Jru842%tp5L79U4 zquQf4~}2v#HD0KlInOv6Qfgr2WE$GL$x_ZA^R(c?UHK{l+J zVrd4O8HeZ2llzb1Y9~wyj8^IJ%>oXY;VN*Qa=XVpZ;V zuIm&)B1&H?%v_7QgC*MgY;!VsUV+ zCmql>TtV9&a?#CwbmoK5D3*8N?s3LCO&-<7DRQO@Y8lgWl&1Tg2xm_J?luCKGku4D<_wh7w~Co7?hCT!5hC7@#0? zjBf3z771*P13L3t`DG9k1$6pN6=t1d@dY?H%ldVhAFdQW?xkAT$W0OGze!rI&?hh{ zcQ3t7%yosce2&&Aq%%cE-S%pxyqF4LkxfEesMJOKmcv8e^Nf7kC+)7*Bun{7PsA3< zHs~bHTF;F5XJQ&2tlV#nHrdGH#lIiST9@o_<)F2re1`9)!DS3me)=&Al4?pI!>x6#P7rM#BBJXElVDcETX`ebO6>hg_C) zx^q&bnRS@%nPTDTeIcBrJ7*E17MmtD(cM6Us6hY5m*PlhY9fE8t8ih4V3VPe*~Qjh2%CJ33b34ItvdCn({t$Ua|I z4=4toABq;H?rqEpEjw}~aq3WqAuIx3U9n=k_Hd}^;ln|e9@mYS@f(ARozo;H96I&rt}>>%l!M{ zq4JYeiXYb|KkLx(;b}x6_AxEo?e75xy+6wVaL^$A9AjRYSpy{6-VwdkpS~eT?Ev&# zN&$`C-f52a#_L@NkbFnpz1UQzJR2G)DSrRHa*9B!nyk*!J#FoaE5eR zzLuXZ$s~R_c)5r=c(8z8!au|=qekvADi4d|EZt}mis52illx3jU-f=;qg`~>3Mgi5 z7N%cm(j8&YPY`h}hxmnE65jD-f^AsLDwa1$!DiAVLhru#LuYu+^~c|CKc&$&!2&TN zi@?HGmAQ~Ig`}JM3j)5~3ZkQJ=i}1B6x&oc&Q`DU3Mswv>~7g?e2f(%kwa4`b9n#W z{${sA`eL1bTRY(OcNau6N^A$HyqmSYS&Dj^Vasvzc}~q6!D`QQf?s%3Yu=SjH3)AH ze1upsyp3uF<_gRh%Gf=DrA+GIbu-`>LM=N66vu<@M8|D2ba^sy)3}PVaUDk^)@t2b zokV-kS~&sIIzWGrK2xu{({T+T7h}b%KkiYVFSsbfMrbyS5=-RF12~1X+%tRjdTg(6 zYChQQ&3Gbzv;FPzTw5qpnFPF~T z+7~ivI1}>e#;It>m)Rt^T$h^3k^0Pttkd&A^{q(FPtkv!ybDnJ;sSBf_j+AG5!c=j zMo!NmxJsw=$z$|-Gn)}{3~ebhg0|Ns(**#Xu4^fLz8L?I9nehYSO)V%=~(^Di3dVS zmX!(;XeZ`xo)=wHQ&w$2Vm1;=E{}N_r)@~MlCrBPzZvpJMsgQN954r|JOn$Vs6;Tr z<55Ptq%WMQftWkYUzn5R@v86D!2AtyqIJ4;pA>X3Vfto|ib5IW^%Gt3CyhC_N@oEL zvGg0z66*j~W)vk?Fk_UtRd<@RXhY`gKInUHAH1AZN1i8*Q`)(>b@BBxwptaNH%+z@ z#XY9$DIxL&wmdGF0vst)D7~{9wk$1V%1uAXd@wS*(G zYv08wCy%eY9qYi`spzIz9z-FCC9t9k%7vPS7WO$gdRU%_9?iaiol*#$q&_z;D7cyT zdY9eoI6?;NX`__EF|T|ojoJc#hdmRV&NN&bZkK(W`#t~SsSLN+#Z!ZTH)TjBjw;_; z*@%edX*F2zh7V{oZT?0;-%5b*>Sux}QAdJxAV6+q$U=}M0nVi(e0ZC`Y3u zJZxLtq;7c9nf)5(wUGJ6%0E2a{M!|Tc!*u<>`CquMIAF8w+MK&q;a51W_?%0(w7h*i6uQ1B(#0WTwnFb#fB(#tNN{kFhg2)u%vIgp|hPoCKVg(UrI zPT5Q}gT@%3G&A6PzxyN?997Q;bY%<;_Md0i5jTQJjT~HizPxx5lE-ScEE&AdprHr! zR!Ru6G;Y^JSr2yzL?MfidRETK9v>V_cT##ipc_&wJCCxF2vE5#xEv9jBHn7WJCY^a zE_c~!DrlQ6t4*L4A!V@Fq#;YICc^C;8)yo6^^b|u#G5o|LLWT=Ik*-do)htgzZ`{3 zU5xQNb}rJKIz7qWZFb+c1F z1?DYA^J19fss4jA5|TY4EP9Tk_EvpwwRkm#(vo$h4^&le3Y$|Zi|msO-RGd!m1a>_ zR&4?ga;*^2=W9C&{*)4IhZu;EUH0e)TpZtq@Yyc8!0}R7r2>efw)V<1Qv~h{)CRblhT-P28EL!%w3Vb8^Y- zX??R19f^&)$9%0J)*LhvcV3cOvjL3O=_l`^BL~Bbs>%1jZK0!Pe zn`b;Le%M)j`@zpB;#bIrdmriGsSix$18^q17r=?%MrY2z|E(f$7lT7X)X_ufE(dvi zaEu{c1{8P$2ubdo4th_5Cm$>yOQ*=J9DX@j)mT(waDkn8|7k zRXcHnaTWcjq%fdT=DeD^ijayz5aH9`cLh>YD{G&r6*P7vXkL6uhv=8h?+uR!w~}6Y@CJ`+khU(9`&YbxSq9*gT%az_UQr@+4B!v;VnQ3h&Mo=9OZ4| z%aShQubt@x%jDC_cVQXxgdFg3MDlO}R zi(=Exs_)Rk!I|VuATu^`zb!WNn}{Uj-g-+W%UJu!Ky1HKaYYI$w zogeXM&DB)A%`U;CYIlns@!UU+P^tyLtpLWZR7?WtgvC7^zGuoJiH z@;QY8FB#}Y81yBPkUs88L8v>fl+8x(lAI0$HT;{WTfG{E+mPJcq2Q7I9%y__1PaWM zFTODX?nAOLFiyenH7EU;bZ&E4y+&*p-9r|e1ZB3UIM5K$YL5X~W<{RsvU#7rN9yh7 z*UlkZC>wn*%eO#sLca6b*3JYF=y8Npy8OI>c2Y_OD3fj#ZWfffO7pc85Mu%}7C?#S z0C>9c;p(FS-)d|hd-YV`rdev<%NA}iwd&=N^7rp>0-dGIFTs};BSP8N_(akasl)x9 zvzS7Hh3)nIbf|=Ri;N&3%~7xMwK|75Fh*BvgOogzUA721eDi1aHfX#!{ZT6$C1AZ*O z!w*3`Pz0-zA5|6Ja_1@l3SJc=9%MzCo%`3hDmg9`(uPJ4bxmidUS90J7?llVuP#4} zy>8+Uv2*qAhYI1b0pWwdM$O;?d<4{tfXY!IwZ^NZ7=#j6PJxe7x1(w9|3Z!{`UFkYaZbVtz=t^gfzE0FROydyQ_&}gD3+%B%66Ku4TZU?%I zxvdrN^l>2hpi!W!Fa>qc%o)WH#37oj^R_8W_knlk)u(p(?jC0PbP+-GLPB_}wb(!~ zp-<0Ij}o)q%;`w&x*3EBzn2=y+^S``kVEbc2{6O~O+wx}kZ4b)$;DhC(CR=z${CY; zAjRQ#t+t^@I0`a`S-qb)37z3O=qwUE2xKxwK&AR{nVwl%{mhY@kr?m^7rTANgt!-) zR=!nQaUM?Rx>GU@mBZWPNFE!^|3R#ThEO)6HR9U}2 zRP6(3?iG*I98!{h^^U8c_0;IZ!Z`ISHCrp_C45zHXl!9Y3&t#nwt^@5_x$h7^&iD) z<yh8eF$6g!ywof@v{62#wXP~J&5mcL zvfcKk(un-1_?CxfLql~_Ja0prnS^N zrt`*iK)�A*8Dcf`2c9p+(lZdM`~vzL{ha*osfab8ymSt_oeHE^`EYzyNJ)$ycZw zG)j`mMu%_-uBW^A$u`Nk@gDIVo>NhojP6|Fwb%Ejn@;Vq2Kql~6PQg&&1!M`1oNVp z3{{bT3_8JlnVX;$(@w>k=fXzYKy<0lUcEUely17%(Y`sHI6o zdp8ZQY5tLrNYg?i!;))zdQ(>k87?G@p{>=?R$>gDrOKga*4>nvwiqse0Z~7g+E~G2EInCPQN)Bt7(hOS@mVhs{T?CQ zz?pcO3jHy!&=P>z0M#16-Zn{t6l;Fl-k+CuxeggYNJ#T5-*&s<#e5A|VV(;vbc74F z@(7M#J-R7o9QA7EFTQ4ZQjeSw>fHz4p|5(#hVJXI_(#$nx5}?QX$73Sg6LG{#_fV3 zO6$s?mGJhG>a~~Fk)atdSJ2WlDPIMubTa@Xo}+(piWs(^UE?qZ`pmMc8o8vSt1zYS z-*|(?KFO?y(k7mzY#&V%Q{`WpyHE^0I#3o3H<4@OM@ZchjeRx*%;?3dvW^Xn;WiLOa+VM>t7Y2qd@5t;T#_CKxS@3!*g5OU^P zx1kC1io@O4q3QV|N%h!EVpqkEO9Jn-vL2OIjx9k!-n`rF!}PfO9@;Skb+2Wtnj{yR ztG!oJn>i}pg5jeLG+~t356;*IGev<>t^`YOqgE1_=Z7M2j5g@5%%*;B(QSkx2vSBS z;8IL79|lMxeHpP(a%%J>#v^T1q74@@2woNeZSBn`!gyZqD%HM}CDj@|lvg&pU-Tva z_$PcX_lO3idMSy(CFV~=xBxEEITlKyrf5&x0^)&B?5+CFC7{xcjC_{SuqSo@S^y-P zy8`+HvexN*TAWm-25qM$v~SKt8ZA*tSr6n%*)=nGZnkq`ELoPAX5aYDWmchWay zaER4o+>bGSjwDCbqMj*bmn!rtb0;_VeA0KQ|Km@MJa`;Xk|{e<3Je3i5v5bCLLubv zR%kBKQ})?GcLHXLF7`4|i<3VS`YLrHMRHx_UOg4q{v zWwoL<)We)^p8FLQ{%#ncn~#45!m-pGW*dwWjr5R&Iq8V=V$KQ}F3r7t(FbXZ1?2YW z(DB$0LXyPL0Eo|e?B>o+4R(~)Bvbdgel?B^l>kJIddyk9o9r_eOqY*P>{d<=_DUTK zrgcEfDLaEX;3znSrrbV?|8cUpl~u_)q!b=_D~je0q}(kZtWjbI8vGSJ{kq*CjeW>XLre>?$?e`fA@B^|@x3-jU7+$JaiJ23o{5+0NBGZV%sEL5H|jtWL`dhmxLFdn z$Oj|WZq7oR7~iSZ^Koq360}b2{Ub9|Z1rcuyN;cry4%T4@2qFnDX{_sDf8D`_$203 zQ{+=2LA!ak5apYzWwh+u5}<&o%#V|)0@E>ltBqE^QX`cfrN&%HF6@%0an&QXBn5*L zb%dR&lft`SJs}Y>gG*9+jVsZxc(kAiANJoADe3zH)Uv zHbNGIrM>Lxy_TFI=J}gvh)#i16*$ssUZI3^q(~Z!>BfH5t{*yRe&VaUBA&Qj2>1hE z-9F2nNz*HjlO%0UM<~r|VJTDncHx^h&rY23a!4CSSa(iw|J>QE+DV&nPnefa3hj8; zM#NCX5#)i@W?_K&S2R*oI&wy&JUmNhfWb*X@#;Z=z#*~rzgb=4w?j%@;e-|&Ze3d@ zC3hP3gt)|kAQY1;mHs**vGo)*!$(B1d+lv!cM3|r`LmXvm*=n5ZjHS55%T$?&h)*i7az!&I1Q5$On-dxb2xV%g}_< z(Yqs(!@Y7^NZQqa0Q3gD>wd1$xw@2w7E*-bP0-$<+yQNKeu+n_T^K5${RrjZ4z{yx z#b2IBUC(Iy2o!X?UQ!8kp-5;6vpnfE5!#1B+>J)zjZeCFp{c9iYyU@#ejEqOephM6 zevWGAmS4O|UO?P`3Oetjpg2mfI-f8JvZrrvoHWWo^pfS5Az0D4;rJ<*%YCmej_VIXWe4isb<&T@}e>Cfbu8HYRQ&vle2b0lHK z%JQGyl4kLM@4h2bmaTQM>&d+ zM>{hy*3p`b7o~_k(RF*Jl!GnGYi!G5RHj4_HwKh?<(psA%{&;V7h@h8OTcWVD^8aT znX#6FR;`YHU9vHk#8pVwIrcV-#BRt^8cK3>j}6CTLg3%i-Vym&dFz5!Sa-~7_JhL#EG`8_&b z={A+khWvKHnj0F@!5KyE!Fa`3!94m0%oN5_-uPa`%=G;aGgH3!LuGaxCrT&TwXYI7 zoTcv$QiEjl8h7~=s1?6~NvLqTvtRxicWp2M5RQkRzhbZJKaei<>dN%hs4WtAuE2c8 zC zR&6Rr$I(ehB%BF4RctU+V^J`Q*T1g9#{iV&=!6Ijp<`#^y#DR2O=zn|{r3^7!ifp*VrIO3@YJt|Q> zRDn+P{28@*6=jM8(FB?Dy)Qd*jr49YEyu@|bn z%s(zLbUu3cbe%KLi@wX#_VhQyo8?H#Ghf-%4-IH*K7tUZMC2nC z^{=%4AD|_!$V24x_>m9P3VlFNBncgYW)HMw#7#|#92zc~YHn5npFcDTrg2Jg+r7X6 zjMp>uvRofIL8g0mU30r{P=-`^2`C^+X-JDe<10Cq5IP1!DVu)qD$S=ObZrpjmI|!I z9&}CKDdzjmf2pnCef>$5F-opWO=>93i@DMJ3Nx*~k9;jZ#3E)6XL~tWW>x za>u9_AD(Y{P4+uF4umrh`G%ST$&f^@G4JxT8Hvw1?cTVxk6vl%(oddHQqTnlwmk}9 zN_PYGmiMKEsanEOh3Vi$Xnd5D7Lp?6rz|}bKgC}~!oxx5_soAi4XqN*XC42zgF7U+ zC$#>~#u_ws7peTDoYq9gBCXi1IfTSB0112*52q@PDx<_42+=lVL`t(s`rs^^%9q)E zmtsW7a&jW$Lb$kKxVH!Me~D0_|*1mK%lT>ZIj`h!mygE+`C}%i?mKz)upb=F=N3ZJ0T2m3)cw* zc`b!p7(S8a6;mgCr5 zkFde&nh&>hjL#BZRMb;59afGimhE-8{ZSgO@(u|B;EBU_`vj1UV@C)hO+W6>BEPYF zO%P=E1*erppMJq1H^PS(vPj_?s!RWBk?#*Ja`wm~okGb~@B!bU9l;o9jH78#9|qtV z+H{40;GgQK9UNCLBJq6~q=?-?Z5+U2L)yE}KGhtwC~RdD)M7jCGvjZU{?5pWs|OK1 zZ1hUFi>O(Z3e*>iA-C70^mjASpy4oGGGZgM10CJ# zRRlygHT23;s<->^`kzbxVj(tgn)0kWwL8%%Om=Xng_mQ7sYxY_! zXD|z^o+(;~MOZ*l)S$Z4;M_%i zix2g>IQPAVAX-lREkcsU!m?0Xi+ev% zvgtT6Hu~IFJ~lZyk&yIxJ#+eg^2t+F=bv{w6ZjYM6Ncg{!F<0OT=Av3?IEV9^i7t^ zm$*}k#FNRng22DCKJm`&7Zj(StcI;%dehBZ9rG@4$5gnE*5p>B-`eiv7Mt~I>+NUS z?vGk8qsz9? zTFant)eRGW5J|mZRIatf&U)Q#h&@~Les67M!-1=e0oDNRig9uEHE*Cnx8uLM=&5%H z%ZKC?8E+r6w@MIMF8^FEg5*3e+fq}3XEY;Js+E+lepU9%jx{=`X3I%K94(G)ce#Q@ z_UD=OW7_wfM6EYu+!{IOSv4{9qUdx-o(i>u{?NY`vCFHOI()Y9XMY_7r|J<#-oESe zm*Kv`%Odz)aW{6Ufu^_okvZYVsNCx?E<)H+W1Q~oq8#{u?KA84v8_c8jyun|7|kiM zvqhs1jPZsk#||`f!aYkOCYzW`cIq-gkB6LLbVZ)G=W&xWj8IH{OCSte%=st;of+nFCif{drOb)Slvg0kqG2ogtc31-X4!I z)z+2)c56pHO~{2HeoR4XZr!|Q+kBtJaeOasylijA8Z%R+Ur*+Y))$pE!cltC=ycPJ3>SOe7_>)|>iqe>C4Ol0;sC^Q+TXxK}NPPcLGP zCF(AJUHpbe63A~5FBx-zLWd=|6fx~@kU+P$$p7a79AS0Eh?&aMbmPYUslW0uFOv2r4w8pifTg@uK!r7q2- zn_;sn)%AG?O?e|OpEO(~@-ThY=)P7_>@4;`J%n=;1-6=vhOFMoqb&GSzS&6sl z&*%)t)|8|8*)7iFZ@TMmWe4uRFL@`!41bSPAoJ@rBz{1-ru;SGd7A}Vr$=C&JkReR z1Gf4%8#%nM-5#99_I4X3S8ADO-&M}LE%+F$(;E~x?X8;-oW(39pbPi?4M3-7ZHBUD zjgl`)2)Qy$fD#jZu+eLP?v0_|{^+J@fL^Mo*{|Tku8Cqkx9+%(?^ssv2Gl&+=tiOx z#t+_8?@S7IBX-1&~oDEirO?2}&P58ierG5ytB(0?~Z8jWV6*5w)D~Wk;z%#$B z{b~MGx*ye;zB?CV_mdbAS9q(7JVvQ_Wt1?_%9H z-S#-K(=oWG%mX$I(Ah})4ZZO#J+-Z+X543PgPi*&G1RDA$T|4{Bz6^x279cvrfe?( zyMY`t-|*H)uKKV5N22~Upn5KV*I>uqz%d&+zF##y{PEM?I2Ywl3lcbe)9u-J`&sIs z+VGX;1<&OmuCG#fC9B^rU)p&ywZ|e5xgECMj6vwQ=c5f~iD+8d_Vzx(E(QvfGB}p> zWmqYinti)kn(KP3t}803EnqJEfTJ;C=sFtr^RIte z*x_>Q!`_ODHrpS%7*`TeyBvg**DzwfD>ZK zPMQ{S7hRXce7St#AP>7$V^zH&RAal5hv}_BRZKG(C4{LAW`h9)fCR$_x_H$9*;a(Pn?`BnP5>Zf{)S~@c9|WBoRNKIA7+-_eKOe1E)`=4uAGNzj{Uf=U@M6AMUQW!1qpQeq6sjyqE8O@)6S5w)qw&!Q?z#x zxl4eZh#AKWBloL#@je_3itd{}MZdyyiaKw^AUCY5`)Bs6SND056PyR$`dB06(yP$} zlmT{ewHU#4jg|8LKC~OH$Euz>=EUY750#Zy-p^oIU9<0qwaP<+N&5^L_M3rAUhDqODj(!B#}<)&?I^8b!s+q} za6{O)r+}=FEpnxO^dL52!?rJd9|L|X_Q{3A=|7Fb@-?rk^=pE!9*o<;G zse^9A*87&iTu!B}e6HPmme68aSD_ryx#L@3@n0fm+7F^yu_yyr~+-hD^G0ihuY$}s@!^g37;1icl1C7yR$7XV4wgMA2?li~J7bXoi zh9g`DBP`uMaMhARQagzkkQ<3S>T{B&J5Z?LdL`6un3NhZqH5k-7$P$SBe9FdQoo3iE&|(bjRu_Q;pG9>Q^jG_Zx%$qIy?NkByMg zzQfj^;MRfTH7F$Xw0}4jX%~cQujsuk$&=+5cu?s!e&J>jj^TWZhR6-Kd6Sn$(#Pud z8suL6jBSN@J^M|e1g_-Qb&y-nf!|7y0O7CwTZXgTe~W)N)!escO`XmPv`q?}gkd{? zmnJwj2`m-)zMs)${S@W{_4|H?i4akgB=$ib_KN7#a|<^taN#>c2jFK7A4sJP#ut(G zuXc%I^3X$hRsAzH*d1*3-g)FVg-w)K>ScUd1~xUZ`X5(ekK{@cHbdOHX86!)<2^h5 z3fS#&%y6p#N(Py!f$m8_sqodT^rOqS=BpEWG1Yr9HD#-ek(-KhEVU{4dh}nRt7GZ7 z>jm^oTi{YG6L-G=oouifz+3Z`?7*YC#;wW!C3cP){YHN)%wR7pCU4h2PcvaxPRT1eoqiAs{uLA}ayrkVdaV2b_cGnf#ss+gDy>|i>U6kE8_9}AfRncmf{xq zpagrz=Jqe`P2trdB)4S^SbZb=4-^Tn<&}B(zI)2#OJ0Fbd;iS!3t%&eHPGrbTsLxd zY}ULlTR6R1f2(%*ATHypCB{maq_TB92Y+m4^#LY#Y;@i622ulj!x_^y4n7DYXA7st zqn?ZV>^Y`EKUR}o8)8PY!H-LBOvaJO=d8w&<0tmw9yvCzdK}1q2_I+P8?^x+LJzDO z!^hn9NP`YQa;+j{IMrmh-hSc^1Qc)LM&N#YL;7nTWvYc*lk76P;N@-P66hoY`-O2NQ06T_Nu~ zjPGsN)SbnCM5;)wqc}Db)WwH`E7FXE>&2?vYFzR4_H!8d+AASm8j{hJ zNnym^+q!`ERBsq?^c_So(9$Ql4>5j2X3_^zuv~DxHFw~7q(19GeeQgV-4M4>%BB}C zOs48x=_qmbCnu=-J>R#6CBA(ltj|JI-h}k-y$p_1WL>W*j3zLpDE@a1vl%7Ai=juw<0)qj8CI?Kc&1sg&4qkF#EM8d^E^z2uj=)Mk~ngTY_ycd{;yl+v9I-QvY5KmSJK?th=G>zdc| zlWPI&K|?iwF@fShLwzLSpHe0W&aj5-~JHw011fO*#$m)@^h!RUKIaU zt4Plla(I;Nq%Ux;*5Gbs&r~eKPXEi$XPZb-VR&4GRjgwCFxEk^|BkKgr(_pvDgyQl zo501!ng>m2w5*P~fb0p)#3Hra`MTbLiJ%-k$;a}3n)dPjm+Mctr`-PK`^)4~){pX1 zq3#@fDFBVG5fvqhZg6nq`(OX@4~>e3%k$bv@uOF1=tp8+2>%egik+_@cms6Zt+g$z z?QXZ8^3)gb*_k2dJ#V2Ypf}+r+}yy=XZs{`NHsQAAZ7ppxoWGyH7df4Kp9i}X+}ls z6vl@Q4Z;Vqa+IRyz78|Vmtm5{LqoZ)mz?-r{(ln8*0~g2sDNUd0%ZZ3G**?VCdz3HG3y(!`I=g*kruloq5*lZIKpd z(f9fD)ii@BCf4!_m&Z8;a-OEzpT%@9xPDQ*Quq;0p6Q3!@Nu@b`0ig*&L5PQ==s>c zYwee7C`h6{Ufxr<4$-WDMDvZ5{3{zp^K%x2`lzg*eMO0i<&xsqzdm2k(L%lu6Qa*} zU`R*Je;~}-P<7JpEPB+Aj$Zbc)v_i&R>w~o+~s^S@?i^;ley%C{S2CSh8ucIO!mq- zDBs?H!!gyft*%ZW#=Ebd((Fl`lt#&Mqu@(_JDQFELo}oFILC`Znp*TSUC}GrJxk7M z*15Kw!%H0(n#XbyNelLIluo2vkpALWLvgnRlX>BEnq4B#e2PVkk&|;X1@7j`%y2GtWP}!1mhT+H zC)X%&!uj3AZA_b|*Sz;Uc}$OjyS4DK1}vn8hbv~My^rAzvp}|{&T64AitR?)q zgSEHKs$;FcEH%^OWaJx@^r=yHHOF2Q8n!**nziFS5a!SXyoctqisy-^9i8USIRJUq z>f7*DkD~#nPAm~BP$Edb;vkxY4nau{CW6s(2Yyc;{;}Tid;OVWp++rU2fnVYa4dX97N|xbjc-emS+G0kn;Vs(mvD7VoF7Y#0O0p|vDrx9vwrX$><=M&Bv8s=5@PWy` z+$;R%1@M2t-uxw~fF@0do^zJW$kS6sEUbr0(KVTxI`xQ=oC)K*fBiNk)Aod3 zSyED)FII&9&5;vHYQ_=y2!Q*;XC`H@sC!6>p2{MY=wrpIqCb>qePW4r9gjP+sFNi+ zUyyLD@rX-_u$aUp*Oy9pDI9YDg49-!UL4B>B&)8|FU+W;Mm9F%vPW5lCk|OT)}*Zd z)_&yR+js|_GIo)9LT#q7=Jbb|{ql|Hp1a0*#|`Ll#3tM)GwMI^{r~Ggij6j`X5j%pfH9S6@Z>)rV>{S{;U)t>Oq*% zvc+oKq*&EGtqV{`>Atfad8)y!>@L=YpY-w3{h;*ASS7}`OiN#RLTUk`+75|o5#C|@4WoJ&F{<&Bm8aat z4*EvPu7Aj5ks^SD+jaW0J$g{oqmY3~FUlqG9XZo(b|EH_YC?N~!MR`gs2rUqp5Lcw zp~Z3WYh+2v;lJ)H?2(PZ==d+rb{~FKovh2zM{W9vSDgaKVfqO{n=>lATtUrh)-zoRT&5prAJ-M@;L#9nd*oqr~ z?u6@cCy%SC>#t#p&HT(I$vT{4S)V+2nBu5X&l=Kg&*vC?DL+kVuek^m3;e zPPceVof_25uy2U`O@w*N3ybOHD<|1PEmR8tB2W++mTy^^Y<&BU=hG(C{psjZDP1XEPi~r%> z3Tx;Q+{xK+2hL!0@m&A+xg7~fwT-LCvJ%KGV!v(LF-O_rt z++01~`{hg8efoe5A^IrvR6}!&yYLRjV>}OA$c!%7K2^I*8$a?q&kU~rR9(PGR|s6} zzOuPU38tA@@F6*w&4qUGSA;TCr`8>D=e^h%ZFPM)MA@)8DuWs2vU6;>DHq%J?j4H0 z_nL+A)tI&e<8Lzb(dhKP9z#ja`FE5bowo_m-!uA@2(ty3e`vN4Le?ewu=$7RaH0eR z>JJ6Za5P8sWFsR+J1~WMPU;H9UEa#jzG_pHNXhVTzyTNxL8DJY&VNYDL?kD_!|LQn zT~*z<`mIpIu5_|4jq3%-1Qw=4|J(%j&nOhWZP>+5tzBY53>k?WFewgCK*x^?D6CjT z?n^**A$b@-l>nUAHqpu|Mdy?{ORKcBq;A<)f$@gQ^PlZoqNCsIvWw~r%Kuf6M@(C&Y?5FZ_T!M@VzR(b@;wGj5|bxXc4^JT`JAO$6hUKaE z&Rb97a;|J{i#NUnm&{g-+OaeE5QAf?$#`K5A2gr)mlo!~teTk=X@mmCQA2(ONe(3ffHyoH&2!LR-Sm zjg>P&yyOyBF-j|4638}Q~tV`qu zh!`bJh0HGct^6mUp3ug`2CRRmv!IY2QrEuL-sK+{Wu;lBZR|f0GHQ0(E+M4yYbunS zd7u9Yu1NIM!$3;*L|ZjBllXJ~Hpil@5LS7wg-Eijf%q%Az`_bgKNS+*Q8{Lq^Yb^t z^a_bo{`Au)VIY+!0jWjL@0+1me||`T?)Wp2R32UsfegmPc3S@jI#Y-UzF$5}%LomVeo-CwvHF~Q%TLtmKAQ{^ zVoa{aL`vjHR$h2LO=i>r#BpEP#7juMcJ>jkIibal`Ob(m@)65hmeM&HBsmB{a?nEG z0S0dEQ2yZ$g|bAUgg%Bv$=#akjK%t&tx%dGfRo#G+}SWq%+R8A1{gvr%0WG!8IwD} z8&i2NrZ08C7_?CaW?D?{eKhpFOYgU|e_)*1n|Ai3C) zcUs*((f<}f@Y&yPI!gYc=`f~7p`m^;bt)N-eSML5tg(!ftK8uJfCu4KOO?QJ$6xqp zTI7OP_X1TE$H{G;-p4Y!_|EAAWpVW*#)M_Pu)WiX%rx6g_lmO@5o&cjQc{)YuK;Sx zmQvA%wDd{sdu>{OG4yygYDGou z6P1@Q+!b!s*j-(PRU!%M7R49SHf^FZ>jX`^QOZdBB7{O+L*&me%%QrH5$sBdOE&X9E?O`o{Z>D~vb?IvQ4RrV~tQO679V)7- z3Uy6Qxludv-qYfSRYL^wy!ZQe8uIN*PS(9R)~h(tjsY99!xN!`5;q!7I_?ORN2lknB)Qk>lq#TVVJbBt>C zt+n)pw@D3u&5nSb4BTVNNbxI`cX_-%36Kt`rM^6otb1b3F@PDIEPH^s#(QmwTe}3Qb>gv(sDrw>StHRC&803N& zv$R4psU$g|o;7V4r(U^@zEa%M`Se;M2)poGyXNy<+z}SH!Jx;ZkB3`+PEVnE@Oypv zLyGG>h{&as-0UJ?P<5GA2J^#1vqbV(a~*k{g^uM)$l<3I@GA6 zHxDyDD66yYx>SF<#5P0K_8R_zeOhcaq&-k}wMt?wT1Ma%FL;TeowJv{+sXvJGB}`p+^|r#`##wXIQ9bAdvVhvuY1-l?JSk3at9UtVYC^z9a2uB4_zbh& zt}L{k{sV=aw}Z}quLiVCwG|~cs=H^n{uM06&lOLf@vx`$8~}YXBZ6BW3rprNp$CkTbF)=viZy~b%hXnz&M^Rf!}SVT1vG`d zI4??soqzWLikCQne)ev4jpF)KYK=w))X4^UBe$0M=q0Xtmf49m^LPwbsp$raX&3P6 zG|mnLKh>^`h|23XBEWF<{_xxlXi%$9xtC!S7HtA@93D3|-lNZC;$Su?PozR+>eUR_ z0$fh`pTOl?MMW_cHcCV4hADf}mozImGRcerR?=e!IZ;D(9IwQ0+FL(fP09 zr44%pfM^*O2w_Hvm(k+H{Tf`-37t72i^r>9ePFZ{5tX}>`MCQWGMmo1Tyot19}x2X z)xkR{9|i;cbUgLm;3hW^CV?U-(D`5M|CZ;> zPCLxlXXrmyJ5UiOeO7c_cBMQc4^TL5vzI&Jod2=7i$-;Azi1BQf1Nsq4~U(oG>eG4 zzNxeTP=@00A!9r(o)tZvfBo4oLuacsCGFzma6-o;8s(N6KpIu#1u`xT$+=mqAXHDV zP&QB7%ZF{u7#xhB$zwlM!ix_h)3E}jotSbC!V4sCZlZ%F6~MjQhV*AmsCA!+!rBQL z`u_Rftl!R0NH=dU>dE4mA~P!UY18o#+gFIAiZ4HtIlE|4lE08GRbV#Ecqnf-ck4iT z=4EL7Qa88pL+Dsqb{`5;K0-#iSHfAxpy^xF%WvPWCLYBx?{lpIDkU^3of&1<^=^Lt zEL}$PuwO{MeXGC;+q#Ua31=Ha#mp`2Rt5&T(^4)R_(<&x&EH6ObFl~sYlBAfV66k`|x*Ux|%SA7t6Av{GFmjid#$;N_<*9g0`pgbHnS0YFS%uU1MO`Yt z&}@9$Q2Dlb@>lJjh3G|amv_UUG;(tlI7?(k$UJ|nc)vD2TpiWYgtgsIrkG#_Qq4zv zt9KTD+D4x-{1wWEmE8(hsVq8W{`&QW!tv_B=!Vf2&-)tOha%@c+%Fc*Pe3N566-;+ zGx{-X31(DRbHSFN53KOm?YWs8^k+(w%p;Z?8JjOx*Z?i6YBV(!xc;G5mM~uVMqXS? zUWbjYjaWR*OfY4OioeSN>wfH258ktl4$VISd}l^o&L9Jr)>_>gGwEY+_>p^zy2$w$ z^W&w5{fj3r=<`cE$5iyxl@KT9Fe9ygN#a<%w<>FX8@&Y4l5{sxXJOs3@VWuQyve;a z;Qn?9|M+66um?G>ouiM)DO`W{dJ(@?YQD7ve8{w46UNXNtrH{~FM9}gic@&W@HDzO z=K&8yyORDZNqL+X0{KG-TEE^eXSUI|>olaGkHzWaCFnb*K?-J46fem>mjTS@BIFVF z%S1{xX;X!p)kM{?@9wP$!rx@ax2g+0>zj#R0=MqLS1bF z)@%1U<;RmPi<;e(9~Yu4dIvty;y7#xh^!)Mb4PfH#JddY7lkX$c217;;H@rA-Cj+D z7iBI=I4sUT-5T(EztLjsgqtxHL8ER9E^%h*GX^iA`nXU+=aOf7^ftSgf^;5_BJ=Kh zyjo#8Li7$H2cr>1p(ar(^fxsMe@S)10;&lW;mhJ92IYszqZR?WGosf+me3T~n=QzP z9&R~frP48V0wP}!a5KM%phTl?yAy1mT$$Z#c?!p?d_dlj+WhsK={di{3G^>Oc6{pD zciHjFHQDjY`{(;m^mE&{q3E&qs2h}c{{(iRSd`Krlu#d$5(?UTo`Zk=L;9pf3C@>z z$#C^+w9Nj-&z?$RW6uTqTKcQaa-$>9FGNN}Obv4Cd8D8Ni!B(9pE9K43tZD0Rb0)J zbi6_?nfKK72-s)a9zog+4FsGq|J|*&zwAO0;GRW=(!H8;9c1W=d!jS~o8K;F#50M^ z<983=3Sx}8;4;$E-(UJd3Z@{b9xU3hrdT?G6AygLz@C8nJZ-;?wteZnZ1v%hM`Su9 zF8SGcOA;qDXs8e%zxg857G{*<$K?B46`v+w^0dGZb{`tDDM(3=v{e{vtCxv$8eDN2xAtK^^+zpS9v0r{+%#}@eF_yzS%4PQjbBnmBNc*aEM zBNq0q!b5Tr8hk_Wjk(K1_?tq~$u)l>R6K`QwT9_f%CMfEo^O4b9feo6lj!A!S;dcs zl-NzT6smSm26=^yqQTOrdcA&4$LQdYZBO`P}`f7@Z z+?y6;p;ekX73;M=C3pUWkZz__gu>N}i)Pv~Q-w&MQ1ko|T+Fx1+smwP%QNyYx-a zIk~`4kEA-DF%J37u=095Ebq=b%!hq_PnV-zG%_#{RNY8ylf)q;jM+ik~+WzoUC@h;CT?1ok1tk0S}0_RIc^#;(C)!1YS$!jI&#ctCb5R-e#FSU?g?ClWrWzW(6>RaMas2`KChNPp&IwUAoo( znxW4)N9LrlOyMhQ!*Jgl;{^=d37WSN8FKd0aLb+L*7^A}k%K1q*-JG^qsX_8>w>hg zlRrC*D@6}c4^9TpmRRjc_wAUV=l;9$ih81wiSV_bcRdQp5+wo*QG@gZ12lh%$pYgp zy`Mc{yj0!sN~$Yv6m$T`c@NhEY9J>#3`@yN)YA_+6^38AD)M2+!aLprTH0?xIc8B~ zTBE^}m$$SZ$#Is&w{9nq`noRMmRO~4-E%3adluNs4pYj`CZu}~|9$4?4ZCLw;u&ls zoTSFCd`?a7%3&JY?-(W zd)&7QY)@j98b~bcdSxt$q5m&LH~%>*LLn+T(U&~?b+^&N;K^p&cK==I0Y*{t5*g{n zoi4ex$r<%?Q(gd?gaUwx=RYJO(tf@7iGEbij?m)lTX;1c{=1HKLY8r~L(0CPb@+F7`xRvKdmp*?E znPB7_vKOB%ZErODWGp!#ck&?gP9Yy%dxj71Wm4}q*=&6iti09vG++|(loX1})=nd5 zboZw$OPUEW@|R_v-nM9v|L9oRT-ol(}=RX5~D)EY#X_O{S} zc6bs)@W}?nTga^(MDgbTzk$ob5{_w-mfrca+fT%VtbWMu-pxH!ji0&Qw#6eqhj)fQ zapVGQ^XYD*FSs?y+z{?lK+*LnCz?%FQd5b|)GfcxMyh%>yMQQztiLd%y8mLgx_;cI zE{qHz?dp(jz=B^M8ts!ZT(7omX?i(oMyXd+h|*N)-6wEZsGT7*dUPK|A~jD{4W@dB zpFG1PC)+J^d!&Y&P%j>j31miPYB7xr~qC4 zs@dsOafe{)@};+66tevGHAR;x%&4A^J11+f>NS|)`K2_p2_RkQ8#!So?TxIv-5JO# zKD?PX#u!sF(NX5Ft$=oic9?F zzSrS=+e*%Rl^u@{-da*|>of12Diazu1AVNtigT1or)i#Lz?#0$vhntJePQI9zOZfV zD?OmO(}3n4Z%+%|P+u5C97gW!L-d6Lhh3$9cxZ$MSvl?T(M(hoKGApzR)9L);IQRkf_wI{zJ)3?6Oaa^HpI7> z5@OJfZ5rHQ^z)|aL-_dKH9>ELMJh;n^;dlm(713m);F(*B4dFpS zHJm?7Hz&zEVyn@&0w^+$byhz(V7Uc%yfjdOSui0dd?IdHGf1|7cKlehyx-;Ngw3P{ zfHLfYjcJ!FDT&9zj-fT!%Qec#{N;_@3L>Xhj-nGju|E`D=?+Ly(i z=>@ck(<`Xh{FGrShQZliXR!F;EKNDh63s+?&$|s2INiv32V_XSxs4w}$NubLtX7zC zx-rAyU(7UCudy(?VV%d@-%H`aA)~zIPpMF?Me-!%xcZAUa`US{<@hhYRY+>q@MWf1 zWW1MXQHj>aMC=9-w;-Pk%^yaur4fv)^vIjOOB)?865EoopLl{H9woA%Eh+L|CR;z4 zS!@1X&4?1X7X<;ZjQo=3_zx)VGEF%>x3Zpf!mhB_i9BK5=8{8;nCpkmH##uQ#`EXv z$4e}C9t(Wa0<6|GHmjQZH$Se_PJ^t)>QhUvaz>zmvXc`KhRVGz?Z>giy-n)^n;PD= zHz_oym@YU1^tX9T3=D9jS&*Z49~U4F&GbzxbsR z00CWETi5%W%0l?88!8J+fbTYA#ija3(0z$})27<;0`+`>EgQ;}&DZrv& zYG(L;!%b`0sE`Q|Rx6seIQo0_<%iklTzq%>dixJE%P8HTBHXq9@MQDlrd-^h_n@I~ z58FR@CzaOdWQ(dlW#@xw;d#8?>o2P+ayQ5c861&NHY_UTa^7R)Mm3l?>R#|mO-wFe zbjM)b7*QNbg_mQou!Dv>tTL)Mfu zEh;AgzQY0gup3}nUIl{d4-f!IY!}%fBgH9SE^OiY?tjMa~ptleH zBfm_EN}xo>&;xVo+i3lnsa*t9sFoBAQxqv(R0Dtq(kjAh1hvU31`dWaJR&o?dKX&1 zh&=e-x`S*pJ__nSq3PQKLLdcyCYo2&Z^2n~z;?IsH(v$B*Y9syK_Iq%8(Kj)yN|sa z^r$Adr}MQmobqI*Pp}hi4sEko5oOsw(lFr`8yjnkm{+KhMIq)DymXF2N{v<@dAtwW zVO>_uBFJ=BQ=9bkffzcaGKa`{H($Hy+JuZkL_LaPVlqA%in_Rpxp2f$)0SAuMb~z! zh3q$9y|Q8jn_6+s?kROq=)6&uzJpAxic05GX6%eCYcn;3g|UKFk$;#Pi(vbpEhS*-B6OqgACsQ41IN&`&YBUn}~<+f6A^x+btn|MmiS=w`~Yet3xabdb4D7X5#Nt>grk3Y;C{N<9bp? z$6_}1@;O9Rh;8!%kSX*j>%vvvV^?PyLIZZUcn4Id-}-pzVPam+(o+#l6@F+l+K@IQ z1?-nLXAKsVDrip7(6@Dpbs}%rosnctV#|4^G^j(7c z8--df!=ivhPsLkBs%=!L2HDi%21j-L=7ulA)SuDyu&&YI)SK|+We@A2E{Vg*tOD$6 z`n130^@&cwvsq1`Tw)S|=~zZ2P~O$fPAZ0C;-e-53oEE!O}yWjA0H3oQX@YFQ=4B8 zMkDmqnk=E~ms7Eq*TT@_C5gU@Wn+s3`f3ji&{r`uko+s|P@x8cXKx!RarEA= zJ*|jukf^qNByG$u<2($;J$&NmY)-taj`7C~CJjl^zhq_ERkn70^8)w>hQF|(XW;kI zP<6z@KWKRG!GiWKpdxYxEkvH^i&dugonBT^QE?6%yTQR-{`B2hZV}CfyGpQKTGk|6 z8n}F-t~yHLIweZ!dVy`5xLHY`eP9?XFC8);Y?ax3Ab3)^qFZL3IAVc>T2!v)L7=+u!DR9#dRaAA|#X|9z#iZzya`+c^`9re?X3f*f$ag;uDWs@qKg;Bn z5SS{%t52-V3CDzt>%xHi?^=ZtRZSZzzlmVuU3^I0U>RkGGTPHq>1;}}yu`vu4FSDr zOzG+~)BVNJiL7~Bl(2cq&^ZR3FF%w06W)=MO2|hGRAd&-=FR7Ep`p>&z^4b<)2dt} zvm&fJZ+n01q#u(y>1$pwFtL>03#H}y(OQE88^U{e;*_0u9$hKCVtv+^mQHdH1Tm{z zOX*o;Y}|XUfOb2-M&p*d;oVZlZQX*|5<1bjN1&*jBr+FOa#Ewr=XTCG*sn%$nv0Jl zHecqTzJA3tR@M0_m|&=d*~J6G*WYx648+%?J;sS+wzV7iJ1^ z?_yjWv}2OQLen9M0Wcvvc|uykQVZHAHF2&I8SO?ld2Ae+(aj1?%Mz=89g@~gJ|C^JR9z}tlmGnQ~9nQK>-C|@Fx=>fo25yPqxZI-# zNCWro-Mhtdy|l8_ysl3YcZS8!mp!FVc7AukerAGKw+WKW$@foHLEh4~x$+idv@=-n zq_g+MC0Fmc^nam$c9UTUTk2pWOW;q$!pfvzh@AjfKvUpoRwL1Rt(Od*;POX$Wt;Zu zUT{97xO`pU4D?Zqzb5C&m>NG3%uo2|ym~j*IwAI6<2lLGq4J#%Xhf>=Z}?DV$SGQ! zAzYgexna~1uldMS((b#dMMif_1q`C-$VF!N4423ZG@D#C-urW_%IzzThciL_W_y9C zetWgK>NmuP1E6yP6?MRg65&^x9z~|L6KKghtrR$!g@&jk7w#0zJ8#>c*5yNsZF-BG zaL1zHv$I{bCbyo>?B(u*eP-w03?*kusR%5{H4r6{r8(Zq-jrr}aY~yiiG&x2))h0T zh7X(_yv2~wCS~SQ;DP`A5p5fIk?e<5-KA457vy_-c_j}kn!_oq;AZJD%*ADl11&J-t2xIc~t z(j_fg3--DWfh*!MgV8!#ufd$5hSMd2N?9OdXl*m~7hpg(lT|nxBw%CcA8|GR^G-bo zauA~ar$XFJ^NG)1O{L=x=x5xGR5C1TGZwIM9DZddViAlKotk=QxprQ$ubW@^v_tB( zF0Gr^*{12AIjcg?Q&`)pT%K}QyRn^ddQPS|5S9Z;gaM;Tt(NxdZys~5Wa&myI z_c1b<4Dy&cvJtX#WF!tIyNF)d`|qg=tbeFb=9_oV^vic!U0#T)mSI)5_>XXAGSj*o zNU8Ygsgcffcf0dYGc2_IH_jwgJ=4u5sFv$btL^*|By zB~_vew}#aUL$*q@F}$;IPvMvR^y25c>US<15FKTfWutnTUfBGjw%mUDkaM9bp}}WSpG6+)RL5( z+&pQU!XB`6mEuPJU1ro9v3?EU2=X^K(Sght{6U3N?zDw+n0pt1aCeI9||RAMH>9UZ84oWvB=> zd%*e-ZCEg>rGDpYo~{e^$#t_#ysMd&^cuJ^80)2=ok18-ewU@Mk5{JAEK^)Zr@!&f{;XhKSQ#e95xKn(%R7P-DcBbXI%Yi}+X)eCXweg|N5B(bFI*{4W6QnSE9 zwZto~_2RK_9hj;xqHE#_FR2!2~f7ht%QyDb*Pb~H!l6oAC#f^$nm>4{H12Sr7xQ1?q+t8$Bz zi5{n$w;zevyyx6813$GK(RjKHMS?poUt_@=m)orYkNV=j7&dD*i!LH9;E6Mbp^*jK zDb{^&Z2IcIREC`Mb5U16$}epTYdJeVoxYDaA;png7XPNoaQ3ejs)75~++mE{djEU~ zDzE9aV`nuZw=#wiyX-pQmj2o>9&DQg0@@3f$E0?^c1332D?Y)j0t^0Q&gTz{-wdes zI9&ZI|H*Y4SRbcX(ME=*n=3tq2zVDz!wy4643v%hig`tr?9sk9 zvnMfZV9Sj)z*}wO1itWguMig-e(E(cE#17`F++byUG$cd*b<9(MG5?knvCWrA^jFU zTlA*#=Qe7&Ne%EF_{1g(99M>&Vt7EMsPntC6#g372mD^w?JtpFs}i>d=Oe!pp_*LD z;f>K}VP2{bOX6Du*u?a|djSZNlp+1x{kwsMb3$0SC3+W+_2*}eh1*AD;T#Zeh%uTS zPm;b{9}sJfM{ps+Y;oYtekywP*-(`#!@UEweddATXg^|w46B=FuUq;K*tSjRK#U|n z>lYTpA}sHCOaBeF`i0r}Ylp7tBd@Ae*xT6q_?v(Q9fmw&_djx5C~%Y!(_u}?xVGqg zHig2|KIzQj>)Z;k=zY7avobn0b$ciZW(+iilTazJU&yUYXcl+q>_2Q$X*G)WgQ26_ ziST$OAc@}7AkyCdfsRuY>KDxzpP1wAS`D@#lK?u?H|=V8&lJqh-)I`I}{Wj^d%^en#nUd%*66z=GSsg*TGKTT8N%V7zMoSGSggq7v|OWrGWu zF!>2R@Mj2}W$!*VDMEn@WKAgVbP)gW#rt7GMOcRo!a=iC7leTk#^?NuzP?zs>4}N_ z*B^lB+b3ywlYtxkWiJ1XS^ zSmoOP+xWSUvc4*i0@p_}In05@zJ|XtIn?7xSy?%hJlFw(Rf8uR7(dsO6S`?}yk9kc zFJkB){KYUqm9>cQaFS1Vh#m34(5%42-BX#cwJ)st~<$k`S*P{lD_c;iDKFt(wSL5e79d z-v%yamK@wmO9vs0-hS{>GO)&Nu_M}G^sMs8hv}Xuwb0&c&Ah+W+>DB_odulAUfD^o zD-8C?Z1HlM6iiK;0S$AgM0uis?1buV#5noP(Vmu@c?z=&Spo^K!H&W9>+SFMzQKhH zk{}3<`@MP(1tlkzt$5V150$<8qUtljNTZ+NO{!E`6W${vz8pbM}b@4T4~847PKS++6(Ed-penBZB%$#?-njB zrVd%Jazfz|`EzGQ?V(GJl5<-yeoM`pn&}h(66VYg^Xh41VMGaY(6vh`aqY03(P!f* zBHtLD_vvn+RJq(Ic;93j9?M5g#Sv34nvrB_Szs%JJr4Y{Ka+-&f%^}dfn~kN|JDpV zgwq$}n^yIMW{6~=CPO@ZE4?-al&H}^FC4id_lJe$v;AIle#FAzF~T_ySOWwaaV|ge zma1DX?|SWMfB#DYuEieU6G_1=s`nuZ6wLMe6-P?0DCYT9qUbX!U3;3wea0*7=3$nw z-egTq)AYN^S^#3$ae#N&ZhgHbv7y#B&a`IW=7_hmIr+FV|G4-N)Q zomLcgbqnY;K3Re#SvqWa3m%EeR|2U-( zo#T1F-ZM^KIlwoc^l4<`a%wS8^$td%(W@0ma*G{ji(E@?)&!3lzHfSxYZQZhaARBP zR>eE8w#*73>i!-xu3y%d6;kav37RvvkhWnYyR{en$pB-{uW)z^&h6SYu?fr`gm2!t z-83PE;%>NpG+Q=aWrxFczSm>_24HOIjJqhMav1>wNP!HlHjekID)BYa^PpWh6x%{VZyvL7r+D04Jo*K`!y z8LwZToN;4m={l&$dQNC^m(%#X=~ArJd)t$Zkj+;cN}!>tk*Vi+%1bh|>EK!$m#$ z54HA-tyqAgW%-0~HKBP>^-;w{`D9H4EfY-s+}@2lq;_x#Qf9SYPve^XdMni1&loi> zQC;2jE)SH;fuLN5PwYQ!qpD?cP`>dG_Q`gnvu8)TEm0p{dhoAqOB8|I65T=?rbnTh z72Uu-8F}YEEsqoy_Et-Wz{bHsL)J4ZLRG^&@>&^#LDoQs=J<4!ab^I|nC2o}kynmR zq7T#6I5Z5UI-Qxj{7cu$7;kv(movu$d_rc_JNgE=w_J}kp&tCT8hp+a6KL)@KZ(n& zFCm78(cr(;50x|t(Qs`?73tazdsq!m{;O*{vQ8T=FKZh#;9hx~{aXBY3t=(auTHd@@&89G-B0rkO((-_=SA{bGWkj`o@|t_9VD zK_s;G_4K$zHm~M$iF?yG-Tb3-a@5@W+&+^%$6Q^OuSZPDMi$=8!*b$@;P?keFcP-7 z{U!#yFr*&@!C6v^x7?^B(BewP`jJwdzqzHFeTHNkf~K z{%@u<7pT)4r8Hoe%ZaYZnmoS3J8jPpF4v0=43aD_IQA{ELArY;3TMy2v2j$#-UK~{^)pNMMZ2%@qCxyqVX2X@OA<4-UxHs1dX6?Eg zh+p;xhWWpS#nP2rE*`5Kf@ej!Ds>N20nYmIQq|pM@shHSh+f`^= zeTjPI$mJEWpTRV_`b(&=z;W3t_7!1c??F0%=e}^e5n}e)=Ekfg7xxk)QLk+4U04(1 zLv0B*$@SL>$(7evk~Mex=4_|$EgjCZa?8K&wcMqc7a$ztIoQ&RQ+T#(l7F0ygO!P+ zL`d+PUKt|SZgX3HA{ss_?|7s%q2neqK|)tRk;3}z0&LzJfL=Lj)tAi3yd^Yrw9a&O zcHijYYMb+un7z}d6<6|etSIS#i-X-x{9ZgTdd49?igCX7eE=N4Cc97r-$*W#rn0tpm*Ge9@q6I=zi<}?d2Q6L?kDoE)#D(8H8I;3>yC8))Q-Q za?Rd6xy#urd zBZAM$VzoT1Q++hA;RW}z+7!WMWN{xRZJg7jM*36)mI3ArMr0IkW+rNo`{|e#|!8!xC?^{EYt(m!M{Hj;3 zSro(lpNQGTgPC_v-`-#vO_!0A^NWL&7Q93H3oUM3G*m$P406F9)5FnGhF#LjrN4e< zy;Dl2(>{xtTv$*YY2@Ga6;7QF*DOvQa$MrSjmjn99uEIq+|sc`3+)E5(9TQx3k&T| zM&vU)=@U6Y#tn?hf&Agroy4n}Ey4MJAwsIWS?d#wc z10x%Wr56ur8IpeXRNrI8K|j=eNR^3;;}9%2EtY3=bk{8pbRSxT`#b+$*J<^ix=z(s z6kYt^bjoFP{^~SBt1RS%*4O7O%bMNexw}j+LvNo2Sr(kpLpy&j$!!dOg`+ciK8%|Dj`X34?5djksw?CP(Zjh$K%t%7?aA;wci0zu8( zG3vI1zBpRj)6+>dGwSP$+>##SC%mg4Z&KxEX1XaFkJivc6kFX+3@DNCKMdsGx_wR( zu}yNi;5-d|@=sfvOEy%oh#-Bk$^FGyn0eg!vrJhQ1 Dd<_?`EbHU^3YXJllX&&Y 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%0ALH$Ei}hL|ZTH421p=Q+dT)SF2qX7bXUo%Vqq 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 E1BgD+)Bpeg literal 0 HcmV?d00001 diff --git a/docs/ai/images/ui_prompts.png b/docs/ai/images/ui_prompts.png new file mode 100644 index 0000000000000000000000000000000000000000..2a5b2d5078447b42dbdcdf57018fe0fcebd94776 GIT binary patch literal 628403 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∾4rodkroGsg)!RP02+%9IXiDCkzmI@0U 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

      rTGKEn2LBg(ZypZy`p5qx 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 U83{kZ?EnA(07*qoM6N<$g2}IoW&i*H literal 0 HcmV?d00001 diff --git a/docs/ai/index.rst b/docs/ai/index.rst index 88134092fdf..a23c768bd26 100644 --- a/docs/ai/index.rst +++ b/docs/ai/index.rst @@ -1,267 +1,39 @@ .. _ref_ai_overview: -== -AI -== +====== +Gel AI +====== .. toctree:: :hidden: :maxdepth: 3 + quickstart_fastapi_ai + reference_extai + reference_http + reference_python javascript - python - reference + guide_edgeql + guide_python :edb-alt-title: Using Gel AI -|Gel| AI allows you to ship AI-enabled apps with practically no effort. It -automatically generates embeddings for your data. Works with OpenAI, Mistral -AI, Anthropic, and any other provider with a compatible API. +|Gel| AI is a set of tools designed to enable you to ship AI-enabled apps with +practically no effort. This is what comes in the box: +1. ``ext::ai``: this Gel extension automatically generates embeddings for your + data. Works with OpenAI, Mistral AI, Anthropic, and any other provider with a + compatible API. -Enable extension in your schema -=============================== +2. ``ext::vectorstore``: this extension is designed to replicate workflows that + might be familiar to you from vectorstore-style databases. Powered by + ``pgvector``, it allows you to store and search for embedding vectors, and + integrates with popular AI frameworks. -AI is a |Gel| extension. To enable it, you will need to add the extension -to your app's schema: +3. Python library: ``gel.ai``. Access all Gel AI features straight from your + Python application. -.. code-block:: sdl +4. JavaScript library: ``@gel/ai``. - using extension ai; -Extension configuration -======================= - -The AI extension may be configured via our UI or via EdgeQL. To use the -built-in UI, access it by running :gelcmd:`ui`. If you have the extension -enabled in your schema as shown above and have migrated that schema change, you -will see the "AI Admin" icon in the left-hand toolbar. - -.. image:: images/ui-ai.png - :alt: The Gel local development server UI highlighting the AI admin - icon in the left-hand toolbar. The icon is two stars, one larger and - one smaller, the smaller being a light pink color and the larger - being a light blue when selected. - :width: 100% - -The default tab "Playground" allows you to test queries against your data after -you first configure the model, prompt, and context query in the right sidebar. - -The "Prompts" tab allows you to configure prompts for use in the playground. -The "Providers" tab must be configured for the API you want to use for -embedding generation and querying. We currently support OpenAI, Mistral AI, and -Anthropic. - - -Configuring a provider ----------------------- - -To configure a provider, you will first need to obtain an API key for your -chosen provider, which you may do from their respective sites: - -* `OpenAI API keys `__ -* `Mistral API keys `__ -* `Anthropic API keys `__ - -With your API key, you may now configure in the UI by clickin the "Add -Provider" button, selecting the appropriate API, and pasting your key in the -"Secret" field. - -.. image:: images/ui-ai-add-provider.png - :alt: The "Add Provider" form of the Gel local development server UI. - On the left, the sidebar navigation for the view showing Playground, - Prompts, and Providers options, with Provider selected (indicated - with a purple border on the left). The main content area shows a - heading Providers with a form under it. The form contains a dropdown - to select the API. (Anthropic is currently selected.) The form - contains two fields: an optional Client ID and a Secret. The Secret - field is filled with your-api-key-here. Under the fields to the - right, the form has a gray button to cancel and a purple Add Provider - button. - :width: 100% - -You may alternatively configure a provider via EdgeQL: - -.. code-block:: edgeql - - configure current branch - insert ext::ai::OpenAIProviderConfig { - secret := 'sk-....', - }; - -This object has other properties as well, including ``client_id`` and -``api_url``, which can be set as strings to override the defaults for the -chosen provider. - -We have provider config types for each of the three supported APIs: - -* ``OpenAIProviderConfig`` -* ``MistralProviderConfig`` -* ``AnthropicProviderConfig`` - - -Usage -===== - -Using |Gel| AI requires some changes to your schema. - - -Add an index ------------- - -To start using |Gel| AI on a type, create an index: - -.. code-block:: sdl-diff - - module default { - type Astronomy { - content: str; - + deferred index ext::ai::index(embedding_model := 'text-embedding-3-small') - + on (.content); - } - }; - -In this example, we have added an AI index on the ``Astronomy`` type's -``content`` property using the ``text-embedding-3-small`` model. Once you have -the index in your schema, :ref:`create ` and -:ref:`apply ` your migration, and you're ready -to start running queries! - -.. note:: - - The particular embedding model we've chosen here - (``text-embedding-3-small``) is an OpenAI model, so it will require an - OpenAI provider to be configured as described above. - - You may use any of :ref:`our pre-configured embedding generation models - `. - -You may want to include multiple properties in your AI index. Fortunately, you -can define an AI index on an expression: - -.. code-block:: sdl - - module default { - type Astronomy { - climate: str; - atmosphere: str; - deferred index ext::ai::index(embedding_model := 'text-embedding-3-small') - on (.climate ++ ' ' ++ .atmosphere); - } - }; - -.. note:: When AI indexes aren't working… - - If you find your queries are not returning the expected results, try - inspecting your instance logs. On a |Gel| Cloud instance, use the "Logs" - tab in your instance dashboard. On local or :ref:`CLI-linked remote - instances `, use :gelcmd:`instance logs -I - `. You may find the problem there. - - Providers impose rate limits on their APIs which can often be the source of - AI index problems. If index creation hits a rate limit, |Gel| will wait - the ``indexer_naptime`` (see the docs on :ref:`ext::ai configuration - `) and resume index creation. - - If your indexed property contains values that exceed the token limit for a - single request, you may consider truncating the property value in your - index expression. You can do this with a string by slicing it: - - .. code-block:: sdl - - module default { - type Astronomy { - content: str; - deferred index ext::ai::index(embedding_model := 'text-embedding-3-small') - on (.content[0:10000]); - } - }; - - This example will slice the first 10,000 characters of the ``content`` - property for indexing. - - Tokens are not equivalent to characters. For OpenAI embedding generation, - you may test values via `OpenAI's web-based tokenizer - `__. You may alternatively download - the library OpenAI uses for tokenization from that same page if you prefer. - By testing, you can get an idea how much of your content can be sent for - indexing. - - -Run a semantic similarity query -------------------------------- - -Once your index has been migrated, running a query against the embeddings is -super simple: - -.. code-block:: edgeql - - select ext::ai::search(Astronomy, query) - -Simple, but you'll still need to generate embeddings from your query or pass in -existing embeddings. If your ultimate goal is retrieval-augmented generation -(i.e., RAG), we've got you covered. - -.. _ref_ai_overview_rag: - -Use RAG via HTTP ----------------- - -By making an HTTP request to -``https://:/branch//ai/rag``, you can generate -text via the generative AI API of your choice within the context of a type with -a deferred embedding index. - -.. note:: - - Making HTTP requests to |Gel| requires :ref:`authentication - `. - -.. code-block:: bash - - $ curl --json '{ - "query": "What color is the sky on Mars?", - "model": "gpt-4-turbo-preview", - "context": {"query":"select Astronomy"} - }' https://:/branch//ai/rag - {"response": "The sky on Mars is red."} - -Since LLMs are often slow, it may be useful to stream the response. To do this, -add ``"stream": true`` to your request JSON. - -.. note:: - - The particular text generation model we've chosen here - (``gpt-4-turbo-preview``) is an OpenAI model, so it will require an OpenAI - provider to be configured as described above. - - You may use any of our supported :ref:`text generation models - `. - - -Use RAG via JavaScript ----------------------- - -``@gel/ai`` offers a convenient wrapper around ``ext::ai``. Install it with -``npm install @gel/ai`` (or via your package manager of choice) and -implement it like this example: - -.. code-block:: typescript - - import { createClient } from "gel"; - import { createAI } from "@gel/ai"; - - const client = createClient(); - - const gpt4AI = createAI(client, { - model: "gpt-4-turbo-preview", - }); - - const blogAI = gpt4AI.withContext({ - query: "select Astronomy" - }); - - console.log(await blogAI.queryRag( - "What color is the sky on Mars?" - )); diff --git a/docs/ai/javascript.rst b/docs/ai/javascript.rst index e1822023cef..fc5e7f6305f 100644 --- a/docs/ai/javascript.rst +++ b/docs/ai/javascript.rst @@ -41,7 +41,7 @@ model): }); You may use any of the supported :ref:`text generation models -`. Add your query as context: +`. Add your query as context: .. code-block:: typescript diff --git a/docs/ai/quickstart_fastapi_ai.rst b/docs/ai/quickstart_fastapi_ai.rst new file mode 100644 index 00000000000..9708e1fc9ae --- /dev/null +++ b/docs/ai/quickstart_fastapi_ai.rst @@ -0,0 +1,346 @@ +.. _ref_quickstart_ai: + +====================== +Using the built-in RAG +====================== + +.. edb:split-section:: + + In this section we'll use |Gel|'s built-in vector search and + retrieval-augmented generation capabilities to decorate our flashcard app + with a couple AI features. We're going to create a ``/fetch_similar`` + endpoint that's going to look up flashcards similar to a text search query, + as well as a ``/fetch_rag`` endpoint that's going to enable us to talk to + an LLM about the content of our flashcard deck. + + We're going to start with the same schema we left off with in the primary + quickstart. + + + .. code-block:: sdl + :caption: dbschema/default.gel + + module default { + abstract type Timestamped { + required created_at: datetime { + default := datetime_of_statement(); + }; + required updated_at: datetime { + default := datetime_of_statement(); + }; + } + + type Deck extending Timestamped { + required name: str; + description: str; + cards := ( + select . configure current database + insert ext::ai::OpenAIProviderConfig { + secret := 'sk-....', + }; + + +.. edb:split-section:: + + Once last thing before we move on. Let's add some sample data to give the + embedding model something to work with. You can copy and run this command + in the terminal, or come up with your own sample data. + + + .. code-block:: edgeql + :class: collapsible + + $ cat << 'EOF' | gel query --file - + with deck := ( + insert Deck { + name := 'Smelly Cheeses', + description := 'To impress everyone with stinky cheese trivia.' + } + ) + for card_data in {( + 1, + 'Époisses de Bourgogne', + 'Known as the "king of cheeses", this French cheese is so pungent it\'s banned on public transport in France. Washed in brandy, it becomes increasingly funky as it ages. Orange-red rind, creamy interior.' + ), ( + 2, + 'Vieux-Boulogne', + 'Officially the smelliest cheese in the world according to scientific studies. This northern French cheese has a reddish-orange rind from being washed in beer. Smooth, creamy texture with a powerful aroma.' + ), ( + 3, + 'Durian Cheese', + 'This Malaysian creation combines durian fruit with cheese, creating what some consider the ultimate "challenging" dairy product. Combines the pungency of blue cheese with durian\'s notorious aroma.' + ), ( + 4, + 'Limburger', + 'German cheese famous for its intense smell, often compared to foot odor due to the same bacteria. Despite its reputation, has a surprisingly mild taste with notes of mushroom and grass.' + ), ( + 5, + 'Roquefort', + 'The "king of blue cheeses", aged in limestone caves in southern France. Contains Penicillium roqueforti mold. Strong, tangy, and salty with a crumbly texture. Legend says it was discovered when a shepherd left his lunch in a cave.' + ), ( + 6, + 'What makes washed-rind cheeses so smelly?', + 'The process of washing cheese rinds in brine, alcohol, or other solutions promotes the growth of Brevibacterium linens, the same bacteria responsible for human body odor. This bacteria contributes to both the orange color and distinctive aroma.' + ), ( + 7, + 'Stinking Bishop', + 'Named after the Stinking Bishop pear (not a religious figure). This English cheese is washed in perry made from these pears. Known for its powerful aroma and sticky, pink-orange rind. Gained fame after being featured in Wallace & Gromit.' + )} + union ( + insert Card { + deck := deck, + order := card_data.0, + front := card_data.1, + back := card_data.2 + } + ); + EOF + + +.. edb:split-section:: + + Now we can finally start producing embedding vectors. Since |Gel| is fully + aware of when your data gets inserted, updated and deleted, it's perfectly + equipped to handle all the tedious work of keeping those vectors up to + date. All that's left for us is to create a special ``deferred index`` on + the data we would like to perform similarity search on. + + + .. code-block:: sdl-diff + :caption: dbschema/default.gel + + using extension ai; + + module default { + abstract type Timestamped { + required created_at: datetime { + default := datetime_of_statement(); + }; + required updated_at: datetime { + default := datetime_of_statement(); + }; + } + + type Deck extending Timestamped { + required name: str; + description: str; + cards := ( + select .>$embedding_vector)", + + embedding_vector=embedding_vector, + + ) + + + return similar_cards + + +.. edb:split-section:: + + Let's test the endpoint to see that everything works the way we expect. + + + .. code-block:: bash + + $ curl -X 'GET' \ + 'http://localhost:8000/fetch_similar?query=the%20stinkiest%20cheese' \ + -H 'accept: application/json' + + +.. edb:split-section:: + + Finally, let's create the second endpoint we mentioned, called + ``/fetch_rag``. We'll be able to use this one to, for example, ask an LLM + to quiz us on the contents of our deck. + + The RAG feature is represented in the Python binding with the ``query_rag`` + method of the ``GelRAG`` class. To use it, we're going to instantiate the + class and call the method... And that's it! + + + .. code-block:: python-diff + :caption: main.py + + import gel + import gel.ai + + from fastapi import FastAPI + + + client = gel.create_async_client() + + app = FastAPI() + + + @app.get("/fetch_similar") + async def fetch_similar_cards(query: str): + rag = await gel.ai.create_async_rag_client(client, model="gpt-4-turbo-preview") + embedding_vector = await rag.generate_embeddings( + query, model="text-embedding-3-small" + ) + + similar_cards = await client.query( + "select ext::ai::search(Card, >$embedding_vector)", + embedding_vector=embedding_vector, + ) + + return similar_cards + + + + @app.get("/fetch_rag") + + async def fetch_rag_response(query: str): + + rag = await gel.ai.create_async_rag_client(client, model="gpt-4-turbo-preview") + + response = await rag.query_rag( + + message=query, + + context=gel.ai.QueryContext(query="select Card"), + + ) + + return response + + +.. edb:split-section:: + + Let's test the endpoint to see if it works: + + + .. code-block:: bash + + $ curl -X 'GET' \ + 'http://localhost:8000/fetch_rag?query=what%20cheese%20smells%20like%20feet' \ + -H 'accept: application/json' + + +.. edb:split-section:: + + Congratulations! We've now implemented AI features in our flashcards app. + Of course, there's more to learn when it comes to using the AI extension. + Make sure to check out the Reference manual, or build an LLM-powered search + bot from the ground up with the FastAPI Gel AI tutorial. diff --git a/docs/ai/reference.rst b/docs/ai/reference.rst deleted file mode 100644 index 85557ff33fb..00000000000 --- a/docs/ai/reference.rst +++ /dev/null @@ -1,671 +0,0 @@ -.. _ref_ai_reference: - -======= -ext::ai -======= - -To activate |Gel| AI functionality, you can use the :ref:`extension -` mechanism: - -.. code-block:: sdl - - using extension ai; - - -.. _ref_ai_reference_config: - -Configuration -============= - -Use the ``configure`` command to set configuration for the AI extension. Update -the values using the ``configure session`` or the ``configure current branch`` -command depending on the scope you prefer: - -.. code-block:: edgeql-repl - - db> configure current branch - ... set ext::ai::Config::indexer_naptime := '0:00:30'; - OK: CONFIGURE DATABASE - -The only property available currently is ``indexer_naptime`` which specifies -the minimum delay between deferred ``ext::ai::index`` indexer runs on any given -branch. - -Examine the ``extensions`` link of the ``cfg::Config`` object to check the -current config values: - -.. code-block:: edgeql-repl - - db> select cfg::Config.extensions[is ext::ai::Config]{*}; - { - ext::ai::Config { - id: 1a53f942-d7ce-5610-8be2-c013fbe704db, - indexer_naptime: '0:00:30' - } - } - -You may also restore the default config value using ``configure session -reset`` if you set it on the session or ``configure current branch reset`` -if you set it on the branch: - -.. code-block:: edgeql-repl - - db> configure current branch reset ext::ai::Config::indexer_naptime; - OK: CONFIGURE DATABASE - - -Providers ---------- - -Provider configs are required for AI indexes (for embedding generation) and for -RAG (for text generation). They may be added via :ref:`ref_cli_gel_ui` or by -via EdgeQL: - -.. code-block:: edgeql - - configure current branch - insert ext::ai::OpenAIProviderConfig { - secret := 'sk-....', - }; - -The extension makes available types for each provider and for a custom provider -compatible with one of the supported API styles. - -* ``ext::ai::OpenAIProviderConfig`` -* ``ext::ai::MistralProviderConfig`` -* ``ext::ai::AnthropicProviderConfig`` -* ``ext::ai::CustomProviderConfig`` - -All provider types require the ``secret`` property be set with a string -containing the secret provided by the AI vendor. Other properties may -optionally be set: - -* ``name``- A unique provider name -* ``display_name``- A human-friendly provider name -* ``api_url``- The provider's API URL -* ``client_id``- ID for the client provided by model API vendor - -In addition to the required ``secret`` property, -``ext::ai::CustomProviderConfig requires an ``api_style`` property be set. -Available values are ``ext::ai::ProviderAPIStyle.OpenAI`` and -``ext::ai::ProviderAPIStyle.Anthropic``. - -Prompts -------- - -You may add prompts either via :ref:`ref_cli_gel_ui` or via EdgeQL. Here's -an example of how you might add a prompt with a single message: - -.. code-block:: edgeql - - insert ext::ai::ChatPrompt { - name := 'test-prompt', - messages := ( - insert ext::ai::ChatPromptMessage { - participant_role := ext::ai::ChatParticipantRole.System, - content := "Your message content" - } - ) - }; - -``participant_role`` may be any of these values: - -* ``ext::ai::ChatParticipantRole.System`` -* ``ext::ai::ChatParticipantRole.User`` -* ``ext::ai::ChatParticipantRole.Assistant`` -* ``ext::ai::ChatParticipantRole.Tool`` - -``ext::ai::ChatPromptMessage`` also has a ``participant_name`` property which -is an optional ``str``. - - -.. _ref_guide_ai_reference_index: - -Index -===== - -The ``ext::ai::index`` creates a deferred semantic similarity index of an -expression on a type. - -.. code-block:: sdl-diff - - module default { - type Astronomy { - content: str; - + deferred index ext::ai::index(embedding_model := 'text-embedding-3-small') - + on (.content); - } - }; - -It can accept several named arguments: - -* ``embedding_model``- The name of the model to use for embedding generation as - a string. - - .. _ref_ai_reference_embedding_models: - - You may use any of these pre-configured embedding generation models: - - **OpenAI** - - * ``text-embedding-3-small`` - * ``text-embedding-3-large`` - * ``text-embedding-ada-002`` - - `Learn more about the OpenAI embedding models `__ - - **Mistral** - - * ``mistral-embed`` - - `Learn more about the Mistral embedding model `__ -* ``distance_function``- The function to use for determining semantic - similarity. Default: ``ext::ai::DistanceFunction.Cosine`` - - The distance function may be any of these: - - * ``ext::ai::DistanceFunction.Cosine`` - * ``ext::ai::DistanceFunction.InnerProduct`` - * ``ext::ai::DistanceFunction.L2`` -* ``index_type``- The type of index to create. Currently the only option is the - default: ``ext::ai::IndexType.HNSW``. -* ``index_parameters``- A named tuple of additional index parameters: - - * ``m``- The maximum number of edges of each node in the graph. Increasing - can increase the accuracy of searches at the cost of index size. Default: - ``32`` - * ``ef_construction``- Dictates the depth and width of the search when - building the index. Higher values can lead to better connections and more - accurate results at the cost of time and resource usage when building the - index. Default: ``100`` - - -When indexes aren't working… ----------------------------- - -If you find your queries are not returning the expected results, try -inspecting your instance logs. On a |Gel| Cloud instance, use the "Logs" -tab in your instance dashboard. On local or :ref:`CLI-linked remote -instances `, use :gelcmd:`instance logs -I -`. You may find the problem there. - -Providers impose rate limits on their APIs which can often be the source of -AI index problems. If index creation hits a rate limit, Gel will wait -the ``indexer_naptime`` (see the docs on :ref:`ext::ai configuration -`) and resume index creation. - -If your indexed property contains values that exceed the token limit for a -single request, you may consider truncating the property value in your -index expression. You can do this with a string by slicing it: - -.. code-block:: sdl - - module default { - type Astronomy { - content: str; - deferred index ext::ai::index(embedding_model := 'text-embedding-3-small') - on (.content[0:10000]); - } - }; - -This example will slice the first 10,000 characters of the ``content`` -property for indexing. - -Tokens are not equivalent to characters. For OpenAI embedding generation, -you may test values via `OpenAI's web-based tokenizer -`__. You may alternatively download -the library OpenAI uses for tokenization from that same page if you prefer. -By testing, you can get an idea how much of your content can be sent for -indexing. - - -Functions -========= - -.. list-table:: - :class: funcoptable - - * - :eql:func:`ext::ai::to_context` - - :eql:func-desc:`ext::ai::to_context` - - * - :eql:func:`ext::ai::search` - - :eql:func-desc:`ext::ai::search` - - ------------- - - -.. eql:function:: ext::ai::to_context(object: anyobject) -> str - - Evaluates the expression of an :ref:`ai::index - ` on the passed object and returns it. - - This can be useful for confirming the basis of embedding generation for a - particular object or type. - - Given this schema: - - .. code-block:: sdl - - module default { - type Astronomy { - topic: str; - content: str; - deferred index ext::ai::index(embedding_model := 'text-embedding-3-small') - on (.topic ++ ' ' ++ .content); - } - }; - - and with these inserts: - - .. code-block:: edgeql-repl - - db> insert Astronomy { - ... topic := 'Mars', - ... content := 'Skies on Mars are red.' - ... } - db> insert Astronomy { - ... topic := 'Earth', - ... content := 'Skies on Earth are blue.' - ... } - - ``to_context`` returns these results: - - .. code-block:: edgeql-repl - - db> select ext::ai::to_context(Astronomy); - {'Mars Skies on Mars are red.', 'Earth Skies on Earth are blue.'} - db> select ext::ai::to_context((select Astronomy limit 1)); - {'Mars Skies on Mars are red.'} - - ------------- - - -.. eql:function:: ext::ai::search( \ - object: anyobject, \ - query: array \ - ) -> optional tuple - - Search an object using its :ref:`ai::index ` - index. - - Returns objects that match the specified semantic query and the - similarity score. - - .. note:: - - The ``query`` argument should *not* be a textual query but the - embeddings generated *from* a textual query. To have |Gel| generate - the query for you along with a text response, try :ref:`our built-in - RAG `. - - .. code-block:: edgeql-repl - - db> with query := >$query - ... select ext::ai::search(Knowledge, query); - { - ( - object := default::Knowledge {id: 9af0d0e8-0880-11ef-9b6b-4335855251c4}, - distance := 0.20410746335983276 - ), - ( - object := default::Knowledge {id: eeacf638-07f6-11ef-b9e9-57078acfce39}, - distance := 0.7843298847773637 - ), - ( - object := default::Knowledge {id: f70863c6-07f6-11ef-b9e9-3708318e69ee}, - distance := 0.8560434728860855 - ), - } - - -HTTP endpoints -============== - -Use the AI extension's HTTP endpoints to perform retrieval-augmented generation -using your AI indexes or to generate embeddings against a model of your choice. - -.. note:: - - All |Gel| server HTTP endpoints require :ref:`authentication - `. By default, you may use `HTTP Basic Authentication - `_ - with your Gel username and password. - - -RAG ---- - -``POST``: ``https://:/branch//ai/rag`` - -Responds with text generated by the specified text generation model in response -to the provided query. - - -Request -^^^^^^^ - -Make a ``POST`` request to the endpoint with a JSON body. The body may have -these properties: - -* ``model`` (string, required): The name of the text generation model to use. - - .. _ref_ai_reference_text_generation_models: - - You may use any of these text generation models: - - **OpenAI** - - * ``gpt-3.5-turbo`` - * ``gpt-4-turbo-preview`` - - `Learn more about the OpenAI text generation models `__ - - **Mistral** - - * ``mistral-small-latest`` - * ``mistral-medium-latest`` - * ``mistral-large-latest`` - - `Learn more about the Mistral text generation models `__ - - **Anthropic** - - * ``claude-3-haiku-20240307`` - * ``claude-3-sonnet-20240229`` - * ``claude-3-opus-20240229`` - - `Learn more about the Athropic text generation models `__ - -* ``query`` (string, required): The query string use as the basis for text - generation. - -* ``context`` (object, required): Settings that define the context of the - query. - - * ``query`` (string, required): Specifies an expression to determine the - relevant objects and index to serve as context for text generation. You may - set this to any expression that produces a set of objects, even if it is - not a standalone query. - - * ``variables`` (object, optional): A dictionary of variables for use in the - context query. - - * ``globals`` (object, optional): A dictionary of globals for use in the - context query. - - * ``max_object_count`` (int, optional): Maximum number of objects to return; - default is 5. - -* ``stream`` (boolean, optional): Specifies whether the response should be - streamed. Defaults to false. - -* ``prompt`` (object, optional): Settings that define a prompt. Omit to use the - default prompt. - - You may specify an existing prompt by its ``name`` or ``id``, you may define - a custom prompt inline by sending an array of objects, or you may do both to - augment an existing prompt with additional custom messages. - - * ``name`` (string, optional) or ``id`` (string, optional): The ``name`` or - ``id`` of an existing custom prompt to use. Provide only one of these if - you want to use or start from an existing prompt. - - * ``custom`` (array of objects, optional): Custom prompt messages, each - containing a ``role`` and ``content``. If no ``name`` or ``id`` was - provided, the custom messages provided here become the prompt. If one of - those was provided, these messages will be added to that existing prompt. - -**Example request** - -.. code-block:: - - curl --user : --json '{ - "query": "What color is the sky on Mars?", - "model": "gpt-4-turbo-preview", - "context": {"query":"Knowledge"} - }' http://:/branch/main/ai/rag - - -Response -^^^^^^^^ - -**Example successful response** - -* **HTTP status**: 200 OK -* **Content-Type**: application/json -* **Body**: - - .. code-block:: json - - {"response": "The sky on Mars is red."} - -**Example error response** - -* **HTTP status**: 400 Bad Request -* **Content-Type**: application/json -* **Body**: - - .. code-block:: json - - { - "message": "missing required 'query' in request 'context' object", - "type": "BadRequestError" - } - - -Streaming response (SSE) -^^^^^^^^^^^^^^^^^^^^^^^^ - -When the ``stream`` parameter is set to ``true``, the server uses `Server-Sent -Events -`__ -(SSE) to stream responses. Here is a detailed breakdown of the typical -sequence and structure of events in a streaming response: - -* **HTTP Status**: 200 OK -* **Content-Type**: text/event-stream -* **Cache-Control**: no-cache - -The stream consists of a sequence of five events, each encapsulating part of -the response in a structured format: - -1. **Message start** - - * Event type: ``message_start`` - - * Data: Starts a message, specifying identifiers and roles. - - .. code-block:: json - - { - "type": "message_start", - "message": { - "id": "", - "role": "assistant", - "model": "" - } - } - -2. **Content block start** - - * Event type: ``content_block_start`` - - * Data: Marks the beginning of a new content block. - - .. code-block:: json - - { - "type": "content_block_start", - "index": 0, - "content_block": { - "type": "text", - "text": "" - } - } - -3. **Content block delta** - - * Event type: ``content_block_delta`` - - * Data: Incrementally updates the content, appending more text to the - message. - - .. code-block:: json - - { - "type": "content_block_delta", - "index": 0, - "delta": { - "type": "text_delta", - "text": "The" - } - } - - Subsequent ``content_block_delta`` events add more text to the message. - -4. **Content block stop** - - * Event type: ``content_block_stop`` - - * Data: Marks the end of a content block. - - .. code-block:: json - - { - "type": "content_block_stop", - "index": 0 - } - -5. **Message stop** - - * Event type: ``message_stop`` - - * Data: Marks the end of the message. - - .. code-block:: json - - {"type": "message_stop"} - -Each event is sent as a separate SSE message, formatted as shown above. The -connection is closed after all events are sent, signaling the end of the -stream. - -**Example SSE response** - -.. code-block:: - - event: message_start - data: {"type": "message_start", "message": {"id": "chatcmpl-9MzuQiF0SxUjFLRjIdT3mTVaMWwiv", "role": "assistant", "model": "gpt-4-0125-preview"}} - - event: content_block_start - data: {"type": "content_block_start","index":0,"content_block":{"type":"text","text":""}} - - event: content_block_delta - data: {"type": "content_block_delta","index":0,"delta":{"type": "text_delta", "text": "The"}} - - event: content_block_delta - data: {"type": "content_block_delta","index":0,"delta":{"type": "text_delta", "text": " skies"}} - - event: content_block_delta - data: {"type": "content_block_delta","index":0,"delta":{"type": "text_delta", "text": " on"}} - - event: content_block_delta - data: {"type": "content_block_delta","index":0,"delta":{"type": "text_delta", "text": " Mars"}} - - event: content_block_delta - data: {"type": "content_block_delta","index":0,"delta":{"type": "text_delta", "text": " are"}} - - event: content_block_delta - data: {"type": "content_block_delta","index":0,"delta":{"type": "text_delta", "text": " red"}} - - event: content_block_delta - data: {"type": "content_block_delta","index":0,"delta":{"type": "text_delta", "text": "."}} - - event: content_block_stop - data: {"type": "content_block_stop","index":0} - - event: message_delta - data: {"type": "message_delta", "delta": {"stop_reason": "stop"}} - - event: message_stop - data: {"type": "message_stop"} - - -Embeddings ----------- - -``POST``: ``https://:/branch//ai/embeddings`` - -Responds with embeddings generated by the specified embeddings model in -response to the provided input. - -Request -^^^^^^^ - -Make a ``POST`` request to the endpoint with a JSON body. The body may have -these properties: - -* ``input`` (array of strings or a single string, required): The text to use as - the basis for embeddings generation. - -* ``model`` (string, required): The name of the embedding model to use. You may - use any of the supported :ref:`embedding models - `. - -**Example request** - -.. code-block:: - - curl --user : --json '{ - "input": "What color is the sky on Mars?", - "model": "text-embedding-3-small" - }' http://localhost:10931/branch/main/ai/embeddings - - -Response -^^^^^^^^ - -**Example successful response** - -* **HTTP status**: 200 OK -* **Content-Type**: application/json -* **Body**: - - -.. code-block:: json - - { - "object": "list", - "data": [ - { - "object": "embedding", - "index": 0, - "embedding": [-0.009434271, 0.009137661] - } - ], - "model": "text-embedding-3-small", - "usage": { - "prompt_tokens": 8, - "total_tokens": 8 - } - } - -.. note:: - - The ``embedding`` property is shown here with only two values for brevity, - but an actual response would contain many more values. - -**Example error response** - -* **HTTP status**: 400 Bad Request -* **Content-Type**: application/json -* **Body**: - - .. code-block:: json - - { - "message": "missing or empty required \"model\" value in request", - "type": "BadRequestError" - } diff --git a/docs/ai/reference_extai.rst b/docs/ai/reference_extai.rst new file mode 100644 index 00000000000..69c0ab34453 --- /dev/null +++ b/docs/ai/reference_extai.rst @@ -0,0 +1,491 @@ +.. _ref_ai_extai_reference: + +============ +AI Extension +============ + +This reference documents the |Gel| AI extension's components, configuration +options, and APIs. + + +Enabling the Extension +====================== + +The AI extension can be enabled using the :ref:`extension ` mechanism: + +.. code-block:: sdl + + using extension ai; + +Configuration +============= + +The AI extension can be configured using ``configure session`` or ``configure current branch``: + +.. code-block:: edgeql + + configure current branch + set ext::ai::Config::indexer_naptime := 'PT30S'; + +Configuration Properties +------------------------ + +* ``indexer_naptime``: Duration + Specifies minimum delay between deferred ``ext::ai::index`` indexer runs. + +View current configuration: + +.. code-block:: edgeql + + select cfg::Config.extensions[is ext::ai::Config]{*}; + +Reset configuration: + +.. code-block:: edgeql + + configure current branch reset ext::ai::Config::indexer_naptime; + + +.. _ref_ai_extai_reference_ui: + +UI +== + +The AI section of the UI can be accessed via the sidebar after the extension +has been enabled in the schema. It provides ways to manage provider +configurations and RAG prompts, as well as try out different settings in the +playground. + +Playground tab +-------------- + +Provides an interactive environment for testing and configuring the built-in +RAG. + +.. image:: images/ui_playground.png + :alt: Screenshot of the Playground tab of the UI depicting an empty message window and three input fields set with default values. + :width: 100% + +Components: + +* Message window: Displays conversation history between the user and the LLM. +* Model: Dropdown menu for selecting the text generation model. +* Prompt: Dropdown menu for selecting the RAG prompt template. +* Context Query: Input field for entering an EdgeQL expression returning a set of objects with AI indexes. + + +Prompts tab +----------- + +Provides ways to manage system prompts used in the built-in RAG. + +.. image:: images/ui_prompts.png + :alt: Screenshot of the Prompts tab of the UI depicting an expanded prompt configuration menu. + :width: 100% + +Providers tab +------------- + +Enables management of API configurations for AI API providers. + +.. image:: images/ui_providers.png + :alt: Screenshot of the Providers tab of the UI depicting an expanded provider configuration menu. + :width: 100% + + +.. _ref_ai_extai_reference_index: + +Index +===== + +The ``ext::ai::index`` creates a deferred semantic similarity index of an +expression on a type. + +.. code-block:: sdl-diff + + module default { + type Astronomy { + content: str; + + deferred index ext::ai::index(embedding_model := 'text-embedding-3-small') + + on (.content); + } + }; + + +Parameters: + +* ``embedding_model``- The name of the model to use for embedding generation as + a string. +* ``distance_function``- The function to use for determining semantic + similarity. Default: ``ext::ai::DistanceFunction.Cosine`` +* ``index_type``- The type of index to create. Currently the only option is the + default: ``ext::ai::IndexType.HNSW``. +* ``index_parameters``- A named tuple of additional index parameters: + + * ``m``- The maximum number of edges of each node in the graph. Increasing + can increase the accuracy of searches at the cost of index size. Default: + ``32`` + * ``ef_construction``- Dictates the depth and width of the search when + building the index. Higher values can lead to better connections and more + accurate results at the cost of time and resource usage when building the + index. Default: ``100`` + +* ``dimensions``: int64 (Optional) - Embedding dimensions +* ``truncate_to_max``: bool (Default: False) + + +Built-in resources +================== + +.. _ref_ai_extai_reference_embedding_models: + +Embedding models +---------------- + +OpenAI (`documentation `__) + +* ``text-embedding-3-small`` +* ``text-embedding-3-large`` +* ``text-embedding-ada-002`` + +Mistral (`documentation `__) + +* ``mistral-embed`` + + +.. _ref_ai_extai_reference_text_generation_models: + +Text generation models +---------------------- + +OpenAI (`documentation `__) + +* ``gpt-3.5-turbo`` +* ``gpt-4-turbo-preview`` + +Mistral (`documentation `__) + +* ``mistral-small-latest`` +* ``mistral-medium-latest`` +* ``mistral-large-latest`` + +Anthropic (`documentation `__) + +* ``claude-3-haiku-20240307`` +* ``claude-3-sonnet-20240229`` +* ``claude-3-opus-20240229`` + + +Functions +========= + +.. list-table:: + :class: funcoptable + + * - :eql:func:`ext::ai::to_context` + - :eql:func-desc:`ext::ai::to_context` + + * - :eql:func:`ext::ai::search` + - :eql:func-desc:`ext::ai::search` + + +------------ + + +.. eql:function:: ext::ai::to_context(object: anyobject) -> str + + Returns the indexed expression value for an object with an ``ext::ai::index``. + + **Example**: + + Schema: + + .. code-block:: sdl + + module default { + type Astronomy { + topic: str; + content: str; + deferred index ext::ai::index(embedding_model := 'text-embedding-3-small') + on (.topic ++ ' ' ++ .content); + } + }; + + Data: + + .. code-block:: edgeql-repl + + db> insert Astronomy { + ... topic := 'Mars', + ... content := 'Skies on Mars are red.' + ... } + db> insert Astronomy { + ... topic := 'Earth', + ... content := 'Skies on Earth are blue.' + ... } + + Results of calling ``to_context``: + + .. code-block:: edgeql-repl + + db> select ext::ai::to_context(Astronomy); + + {'Mars Skies on Mars are red.', 'Earth Skies on Earth are blue.'} + + +------------ + + +.. eql:function:: ext::ai::search( \ + object: anyobject, \ + query: array \ + ) -> optional tuple + + Searches objects using their :ref:`ai::index + `. + + Returns tuples of (object, distance). + + .. note:: + + The ``query`` argument should *not* be a textual query but the + embeddings generated *from* a textual query. + + .. code-block:: edgeql-repl + + db> with query := >$query + ... select ext::ai::search(Knowledge, query); + + { + ( + object := default::Knowledge {id: 9af0d0e8-0880-11ef-9b6b-4335855251c4}, + distance := 0.20410746335983276 + ), + ( + object := default::Knowledge {id: eeacf638-07f6-11ef-b9e9-57078acfce39}, + distance := 0.7843298847773637 + ), + ( + object := default::Knowledge {id: f70863c6-07f6-11ef-b9e9-3708318e69ee}, + distance := 0.8560434728860855 + ), + } + + +Types +===== + +Provider Configuration Types +---------------------------- + +.. list-table:: + :class: funcoptable + + * - :eql:type:`ext::ai::ProviderAPIStyle` + - Enum defining supported API styles + + * - :eql:type:`ext::ai::ProviderConfig` + - Abstract base configuration for AI providers. + + +Provider configurations are required for AI indexes and RAG functionality. + +Example provider configuration: + +.. code-block:: edgeql + + configure current database + insert ext::ai::OpenAIProviderConfig { + secret := 'sk-....', + }; + +.. note:: + + All provider types require the ``secret`` property be set with a string + containing the secret provided by the AI vendor. + + +.. note:: + + ``ext::ai::CustomProviderConfig requires an ``api_style`` property be set. + + +--------- + + +.. eql:type:: ext::ai::ProviderAPIStyle + + Enum defining supported API styles: + + * ``OpenAI`` + * ``Anthropic`` + + +--------- + + +.. eql:type:: ext::ai::ProviderConfig + + Abstract base configuration for AI providers. + + Properties: + + * ``name``: str (Required) - Unique provider identifier + * ``display_name``: str (Required) - Human-readable name + * ``api_url``: str (Required) - Provider API endpoint + * ``client_id``: str (Optional) - Provider-supplied client ID + * ``secret``: str (Required) - Provider API secret + * ``api_style``: ProviderAPIStyle (Required) - Provider's API style + + Provider-specific types: + + * ``ext::ai::OpenAIProviderConfig`` + * ``ext::ai::MistralProviderConfig`` + * ``ext::ai::AnthropicProviderConfig`` + * ``ext::ai::CustomProviderConfig`` + + Each inherits from :eql:type:`ext::ai::ProviderConfig` with provider-specific defaults. + + +Model Types +----------- + +.. list-table:: + :class: funcoptable + + * - :eql:type:`ext::ai::Model` + - Abstract base type for AI models. + + * - :eql:type:`ext::ai::EmbeddingModel` + - Abstract type for embedding models. + + * - :eql:type:`ext::ai::TextGenerationModel` + - Abstract type for text generation models. + +--------- + +.. eql:type:: ext::ai::Model + + Abstract base type for AI models. + + Annotations: + * ``model_name`` - Model identifier + * ``model_provider`` - Provider identifier + +--------- + +.. eql:type:: ext::ai::EmbeddingModel + + Abstract type for embedding models. + + Annotations: + * ``embedding_model_max_input_tokens`` - Maximum tokens per input + * ``embedding_model_max_batch_tokens`` - Maximum tokens per batch + * ``embedding_model_max_output_dimensions`` - Maximum embedding dimensions + * ``embedding_model_supports_shortening`` - Input shortening support flag + + +--------- + +.. eql:type:: ext::ai::TextGenerationModel + + Abstract type for text generation models. + + Annotations: + * ``text_gen_model_context_window`` - Model's context window size + + +Indexing Types +-------------- + +.. list-table:: + :class: funcoptable + + * - :eql:type:`ext::ai::DistanceFunction` + - Enum for similarity metrics. + + * - :eql:type:`ext::ai::IndexType` + - Enum for index implementations. + +--------- + +.. eql:type:: ext::ai::DistanceFunction + + Enum for similarity metrics. + + * ``Cosine`` + * ``InnerProduct`` + * ``L2`` + +--------- + +.. eql:type:: ext::ai::IndexType + + Enum for index implementations. + + * ``HNSW`` + + + +Prompt Types +------------ + +.. list-table:: + :class: funcoptable + + * - :eql:type:`ext::ai::ChatParticipantRole` + - Enum for chat roles. + + * - :eql:type:`ext::ai::ChatPromptMessage` + - Type for chat prompt messages. + + * - :eql:type:`ext::ai::ChatPrompt` + - Type for chat prompt configuration. + +Example custom prompt configuration: + +.. code-block:: edgeql + + insert ext::ai::ChatPrompt { + name := 'test-prompt', + messages := ( + insert ext::ai::ChatPromptMessage { + participant_role := ext::ai::ChatParticipantRole.System, + content := "Your message content" + } + ) + }; + + +--------- + +.. eql:type:: ext::ai::ChatParticipantRole + + Enum for chat roles. + + * ``System`` + * ``User`` + * ``Assistant`` + * ``Tool`` + +--------- + +.. eql:type:: ext::ai::ChatPromptMessage + + Type for chat prompt messages. + + Properties: + * ``participant_role``: ChatParticipantRole (Required) + * ``participant_name``: str (Optional) + * ``content``: str (Required) + +--------- + +.. eql:type:: ext::ai::ChatPrompt + + Type for chat prompt configuration. + + Properties: + * ``name``: str (Required) + * ``messages``: set of ChatPromptMessage (Required) + diff --git a/docs/ai/reference_http.rst b/docs/ai/reference_http.rst new file mode 100644 index 00000000000..44d86a95bd4 --- /dev/null +++ b/docs/ai/reference_http.rst @@ -0,0 +1,382 @@ +.. _ref_ai_http_reference: + +===================== +AI HTTP API Reference +===================== + +:edb-alt-title: AI Extension HTTP API + +.. note:: + + All |Gel| server HTTP endpoints require :ref:`authentication + `, such as `HTTP Basic Authentication + `_ + with Gel username and password. + + +Embeddings +========== + +``POST``: ``https://:/branch//ai/embeddings`` + +Generates text embeddings using the specified embeddings model. + + +Request headers +--------------- + +* ``Content-Type: application/json`` (required) + + +Request body +------------ + +.. code-block:: json + + { + "model": string, // Required: Name of the embedding model + "inputs": string[], // Required: Array of texts to embed + "dimensions": number, // Optional: Number of dimensions to truncate to + "user": string // Optional: User identifier + } + +* ``input`` (array of strings or a single string, required): The text to use as + the basis for embeddings generation. + +* ``model`` (string, required): The name of the embedding model to use. You may + use any of the supported :ref:`embedding models + `. + + +Example request +--------------- + +.. code-block:: bash + + curl --user : --json '{ + "input": "What color is the sky on Mars?", + "model": "text-embedding-3-small" + }' http://localhost:10931/branch/main/ai/embeddings + + +Response +-------- + +* **HTTP status**: 200 OK +* **Content-Type**: application/json +* **Body**: + + +.. code-block:: json + + { + "object": "list", + "data": [ + { + "object": "embedding", + "index": 0, + "embedding": [-0.009434271, 0.009137661] + } + ], + "model": "text-embedding-3-small", + "usage": { + "prompt_tokens": 8, + "total_tokens": 8 + } + } + +.. note:: + + The ``embedding`` property is shown here with only two values for brevity, + but an actual response would contain many more values. + + +Error response +-------------- + +* **HTTP status**: 400 Bad Request +* **Content-Type**: application/json +* **Body**: + + .. code-block:: json + + { + "message": "missing or empty required \"model\" value in request", + "type": "BadRequestError" + } + +RAG +=== + +``POST``: ``https://:/branch//ai/rag`` + +Performs retrieval-augmented text generation using the specified model based on +the provided text query and the database content selected using similarity +search. + + +Request headers +--------------- + +* ``Content-Type: application/json`` (required) + + +Request body +------------ + +.. code-block:: json + + { + "context": { + "query": string, // Required: EdgeQL query for context retrieval + "variables": object, // Optional: Query variables + "globals": object, // Optional: Query globals + "max_object_count": number // Optional: Max objects to retrieve (default: 5) + }, + "model": string, // Required: Name of the generation model + "query": string, // Required: User query + "stream": boolean, // Optional: Enable streaming (default: false) + "prompt": { + "name": string, // Optional: Name of predefined prompt + "id": string, // Optional: ID of predefined prompt + "custom": [ // Optional: Custom prompt messages + { + "role": string, // "system"|"user"|"assistant"|"tool" + "content": string|object, + "tool_call_id": string, + "tool_calls": array + } + ] + }, + "temperature": number, // Optional: Sampling temperature + "top_p": number, // Optional: Nucleus sampling parameter + "max_tokens": number, // Optional: Maximum tokens to generate + "seed": number, // Optional: Random seed + "safe_prompt": boolean, // Optional: Enable safety features + "top_k": number, // Optional: Top-k sampling parameter + "logit_bias": object, // Optional: Token biasing + "logprobs": number, // Optional: Return token log probabilities + "user": string // Optional: User identifier + } + + +* ``model`` (string, required): The name of the text generation model to use. + + +* ``query`` (string, required): The query string use as the basis for text + generation. + +* ``context`` (object, required): Settings that define the context of the + query. + + * ``query`` (string, required): Specifies an expression to determine the + relevant objects and index to serve as context for text generation. You may + set this to any expression that produces a set of objects, even if it is + not a standalone query. + + * ``variables`` (object, optional): A dictionary of variables for use in the + context query. + + * ``globals`` (object, optional): A dictionary of globals for use in the + context query. + + * ``max_object_count`` (int, optional): Maximum number of objects to return; + default is 5. + +* ``stream`` (boolean, optional): Specifies whether the response should be + streamed. Defaults to false. + +* ``prompt`` (object, optional): Settings that define a prompt. Omit to use the + default prompt. + + You may specify an existing prompt by its ``name`` or ``id``, you may define + a custom prompt inline by sending an array of objects, or you may do both to + augment an existing prompt with additional custom messages. + + * ``name`` (string, optional) or ``id`` (string, optional): The ``name`` or + ``id`` of an existing custom prompt to use. Provide only one of these if + you want to use or start from an existing prompt. + + * ``custom`` (array of objects, optional): Custom prompt messages, each + containing a ``role`` and ``content``. If no ``name`` or ``id`` was + provided, the custom messages provided here become the prompt. If one of + those was provided, these messages will be added to that existing prompt. + + +Example request +--------------- + +.. code-block:: + + curl --user : --json '{ + "query": "What color is the sky on Mars?", + "model": "gpt-4-turbo-preview", + "context": {"query":"Knowledge"} + }' http://:/branch/main/ai/rag + + +Response +-------- + +* **HTTP status**: 200 OK +* **Content-Type**: application/json +* **Body**: + + .. code-block:: json + + {"response": "The sky on Mars is red."} + +Error response +-------------- + +* **HTTP status**: 400 Bad Request +* **Content-Type**: application/json +* **Body**: + + .. code-block:: json + + { + "message": "missing required 'query' in request 'context' object", + "type": "BadRequestError" + } + + +Streaming response (SSE) +------------------------ + +When the ``stream`` parameter is set to ``true``, the server uses `Server-Sent +Events +`__ +(SSE) to stream responses. Here is a detailed breakdown of the typical +sequence and structure of events in a streaming response: + +* **HTTP Status**: 200 OK +* **Content-Type**: text/event-stream +* **Cache-Control**: no-cache + +The stream consists of a sequence of five events, each encapsulating part of +the response in a structured format: + +1. **Message start** + + * Event type: ``message_start`` + + * Data: Starts a message, specifying identifiers and roles. + + .. code-block:: json + + { + "type": "message_start", + "message": { + "id": "", + "role": "assistant", + "model": "" + } + } + +2. **Content block start** + + * Event type: ``content_block_start`` + + * Data: Marks the beginning of a new content block. + + .. code-block:: json + + { + "type": "content_block_start", + "index": 0, + "content_block": { + "type": "text", + "text": "" + } + } + +3. **Content block delta** + + * Event type: ``content_block_delta`` + + * Data: Incrementally updates the content, appending more text to the + message. + + .. code-block:: json + + { + "type": "content_block_delta", + "index": 0, + "delta": { + "type": "text_delta", + "text": "The" + } + } + + Subsequent ``content_block_delta`` events add more text to the message. + +4. **Content block stop** + + * Event type: ``content_block_stop`` + + * Data: Marks the end of a content block. + + .. code-block:: json + + { + "type": "content_block_stop", + "index": 0 + } + +5. **Message stop** + + * Event type: ``message_stop`` + + * Data: Marks the end of the message. + + .. code-block:: json + + {"type": "message_stop"} + +Each event is sent as a separate SSE message, formatted as shown above. The +connection is closed after all events are sent, signaling the end of the +stream. + +**Example SSE response** + +.. code-block:: + :class: collapsible + + event: message_start + data: {"type": "message_start", "message": {"id": "chatcmpl-9MzuQiF0SxUjFLRjIdT3mTVaMWwiv", "role": "assistant", "model": "gpt-4-0125-preview"}} + + event: content_block_start + data: {"type": "content_block_start","index":0,"content_block":{"type":"text","text":""}} + + event: content_block_delta + data: {"type": "content_block_delta","index":0,"delta":{"type": "text_delta", "text": "The"}} + + event: content_block_delta + data: {"type": "content_block_delta","index":0,"delta":{"type": "text_delta", "text": " skies"}} + + event: content_block_delta + data: {"type": "content_block_delta","index":0,"delta":{"type": "text_delta", "text": " on"}} + + event: content_block_delta + data: {"type": "content_block_delta","index":0,"delta":{"type": "text_delta", "text": " Mars"}} + + event: content_block_delta + data: {"type": "content_block_delta","index":0,"delta":{"type": "text_delta", "text": " are"}} + + event: content_block_delta + data: {"type": "content_block_delta","index":0,"delta":{"type": "text_delta", "text": " red"}} + + event: content_block_delta + data: {"type": "content_block_delta","index":0,"delta":{"type": "text_delta", "text": "."}} + + event: content_block_stop + data: {"type": "content_block_stop","index":0} + + event: message_delta + data: {"type": "message_delta", "delta": {"stop_reason": "stop"}} + + event: message_stop + data: {"type": "message_stop"} + + diff --git a/docs/ai/python.rst b/docs/ai/reference_python.rst similarity index 84% rename from docs/ai/python.rst rename to docs/ai/reference_python.rst index 19d0af9a791..fc0b1cecb87 100644 --- a/docs/ai/python.rst +++ b/docs/ai/reference_python.rst @@ -1,87 +1,61 @@ -.. _ref_ai_python: +.. _ref_ai_python_reference: -====== -Python -====== +============= +AI Python API +============= -:edb-alt-title: Gel AI's Python package +:edb-alt-title: AI Extension Python API The ``gel.ai`` package is an optional binding of the AI extension in |Gel|. -To use the AI binding, you need to install ``gel`` Python package with the -``ai`` extra dependencies: .. code-block:: bash $ pip install 'gel[ai]' -Usage -===== +Blocking and async API +====================== -Start by importing ``gel`` and ``gel.ai``: +The AI binding is built on top of the regular |Gel| client objects, providing +both blocking and asynchronous versions of its API. + +**Blocking client example**: .. code-block:: python import gel import gel.ai - -Blocking --------- - -The AI binding is built on top of the regular |Gel| client objects, providing -both blocking and asynchronous versions of its API. For example, a blocking AI -client is initialized like this: - -.. code-block:: python - client = gel.create_client() - gpt4ai = gel.ai.create_ai( + gpt4ai = gel.ai.create_rag_client( client, model="gpt-4-turbo-preview" ) -Add your query as context: - -.. code-block:: python - astronomy_ai = gpt4ai.with_context( query="Astronomy" ) -The default text generation prompt will ask your selected provider to limit -answer to information provided in the context and will pass the queried -objects' AI index as context along with that prompt. - -Call your AI client's ``query_rag`` method, passing in a text query. - -.. code-block:: python - print( astronomy_ai.query_rag("What color is the sky on Mars?") ); -or stream back the results by using ``stream_rag`` instead: - -.. code-block:: python - for data in astronomy_ai.stream_rag("What color is the sky on Mars?"): print(data) -Async ------ - -To use an async client instead, do this: +**Async client example**: .. code-block:: python - import asyncio # alongside the Gel imports + import gel + import gel.ai + import asyncio client = gel.create_async_client() async def main(): - gpt4ai = await gel.ai.create_async_ai( + gpt4ai = await gel.ai.create_async_rag_client( client, model="gpt-4-turbo-preview" ) @@ -100,12 +74,12 @@ To use an async client instead, do this: asyncio.run(main()) -API reference -============= +Factory functions +================= -.. py:function:: create_ai(client, **kwargs) -> GelAI +.. py:function:: create_rag_client(client, **kwargs) -> RAGClient - Creates an instance of ``GelAI`` with the specified client and options. + Creates an instance of ``RAGClient`` with the specified client and options. This function ensures that the client is connected before initializing the AI with the specified options. @@ -114,7 +88,7 @@ API reference A |Gel| client instance. :param kwargs: - Keyword arguments that are passed to the ``AIOptions`` data class to + Keyword arguments that are passed to the ``RAGOptions`` data class to configure AI-specific options. These options are: * ``model``: The name of the model to be used. (required) @@ -122,9 +96,9 @@ API reference ``None`` will result in the client using the default prompt. (default: ``None``) -.. py:function:: create_async_ai(client, **kwargs) -> AsyncGelAI +.. py:function:: create_async_rag_client(client, **kwargs) -> AsyncRAGClient - Creates an instance of ``AsyncGelAI`` w/ the specified client & options. + Creates an instance of ``AsyncRAGClient`` w/ the specified client & options. This function ensures that the client is connected asynchronously before initializing the AI with the specified options. @@ -133,21 +107,17 @@ API reference An asynchronous |Gel| client instance. :param kwargs: - Keyword arguments that are passed to the ``AIOptions`` data class to + Keyword arguments that are passed to the ``RAGOptions`` data class to configure AI-specific options. These options are: * ``model``: The name of the model to be used. (required) * ``prompt``: An optional prompt to guide the model's behavior. (default: None) -AI client classes ------------------ - +Core classes +============ -BaseGelAI -^^^^^^^^^ - -.. py:class:: BaseGelAI +.. py:class:: BaseRAGClient The base class for |Gel| AI clients. @@ -158,7 +128,7 @@ BaseGelAI these methods are available on an AI client of either type. :ivar options: - An instance of :py:class:`AIOptions`, storing the AI options. + An instance of :py:class:`RAGOptions`, storing the RAG options. :ivar context: An instance of :py:class:`QueryContext`, storing the context for AI @@ -210,10 +180,7 @@ BaseGelAI objects returned by the query. -GelAI -^^^^^ - -.. py:class:: GelAI +.. py:class:: RAGClient A synchronous class for creating |Gel| AI clients. @@ -253,11 +220,17 @@ GelAI the query. If not provided, uses the default context of this AI client instance. +.. py:method:: generate_embeddings(*inputs: str, model: str) -> list[float] + + Generates embeddings for input texts. + + :param inputs: + Input texts. + :param model: + The embedding model to use -AsyncGelAI -^^^^^^^^^^ -.. py:class:: AsyncGelAI +.. py:class:: AsyncRAGClient An asynchronous class for creating |Gel| AI clients. @@ -301,9 +274,19 @@ AsyncGelAI the query. If not provided, uses the default context of this AI client instance. +.. py:method:: generate_embeddings(*inputs: str, model: str) -> list[float] + :noindex: -Other classes -------------- + Generates embeddings for input texts. + + :param inputs: + Input texts. + :param model: + The embedding model to use + + +Configuration classes +===================== .. py:class:: ChatParticipantRole @@ -343,9 +326,9 @@ Other classes role-specific content within the prompt. -.. py:class:: AIOptions +.. py:class:: RAGOptions - A data class for AI options, specifying model and prompt settings. + A data class for RAG options, specifying model and prompt settings. :ivar model: The name of the AI model. @@ -354,8 +337,8 @@ Other classes the model. :method derive(kwargs): - Creates a new instance of :py:class:`AIOptions` by merging existing options - with provided keyword arguments. Returns a new :py:class:`AIOptions` + Creates a new instance of :py:class:`RAGOptions` by merging existing options + with provided keyword arguments. Returns a new :py:class:`RAGOptions` instance with updated attributes. :param kwargs: @@ -414,3 +397,4 @@ Other classes :method to_httpx_request(): Converts the RAGRequest into a dictionary suitable for making an HTTP request using the httpx library. + diff --git a/docs/datamodel/extensions.rst b/docs/datamodel/extensions.rst index 1d6a1f5b308..dc93c132ffe 100644 --- a/docs/datamodel/extensions.rst +++ b/docs/datamodel/extensions.rst @@ -22,7 +22,7 @@ There are a few built-in extensions available: - ``edgeql_http``: enables :ref:`EdgeQL over HTTP `, - ``graphql``: enables :ref:`GraphQL `, - ``auth``: enables :ref:`Gel Auth `, -- ``ai``: enables :ref:`ext::ai module `, +- ``ai``: enables :ref:`ext::ai module `, - ``pg_trgm``: enables ``ext::pg_trgm``, which re-exports `pgtrgm `__, From ef4553762f553a1f627ef1348e95969535da1e1e Mon Sep 17 00:00:00 2001 From: Andrey Buzin Date: Thu, 20 Feb 2025 02:33:03 +0700 Subject: [PATCH 23/23] Upload the tutorial for the FastAPI search bot (#8314) --- docs/ai/fastapi_gelai_searchbot.rst | 1716 +++++++++++++++++++++++++++ 1 file changed, 1716 insertions(+) create mode 100644 docs/ai/fastapi_gelai_searchbot.rst diff --git a/docs/ai/fastapi_gelai_searchbot.rst b/docs/ai/fastapi_gelai_searchbot.rst new file mode 100644 index 00000000000..673648a04a7 --- /dev/null +++ b/docs/ai/fastapi_gelai_searchbot.rst @@ -0,0 +1,1716 @@ +.. _ref_guide_fastapi_gelai_searchbot: + +=================== +FastAPI (Searchbot) +=================== + +:edb-alt-title: Building a search bot with memory using FastAPI and Gel AI + +In this tutorial we're going to walk you through building a chat bot with search +capabilities using Gel and `FastAPI `_. + +FastAPI is a framework designed to help you build web apps *fast*. Gel is a +data layer designed to help you figure out storage in your application - also +*fast*. By the end of this tutorial, you will have tried out different aspects +of using those two together. + +We will start by creating an app with FastAPI, adding web search capabilities, +and then putting search results through a language model to get a +human-friendly answer. After that, we'll use Gel to implement chat history so +that the bot remembers previous interactions with the user. We'll finish it off +with semantic search-based cross-chat memory. + +The end result is going to look something like this: + +.. image:: + /docs/tutorials/placeholder.png + :alt: Placeholder + :width: 100% + +1. Initialize the project +========================= + +.. edb:split-section:: + + We're going to start by installing `uv `_ - a Python + package manager that's going to simplify environment management for us. You can + follow their `installation instructions + `_ or simply run: + + .. code-block:: bash + + $ curl -LsSf https://astral.sh/uv/install.sh | sh + +.. edb:split-section:: + + Once that is done, we can use uv to create scaffolding for our project following + the `documentation `_: + + .. code-block:: bash + + $ uv init searchbot \ + && cd searchbot + +.. edb:split-section:: + + For now, we know we're going to need Gel and FastAPI, so let's add those + following uv's instructions on `managing dependencies + `_, + as well as FastAPI's `installation docs + `_. Running ``uv sync`` after + that will create our virtual environment in a ``.venv`` directory and ensure + it's ready. As the last step, we'll activate the environment and get started. + + .. note:: + + Every time you open a new terminal session, you should source the + environment before running ``python``, ``gel`` or ``fastapi`` commands. + + .. code-block:: bash + + $ uv add "fastapi[standard]" \ + && uv add gel \ + && uv sync \ + && source .venv/bin/activate + + +2. Get started with FastAPI +=========================== + +.. edb:split-section:: + + At this stage we need to follow FastAPI's `tutorial + `_ to create the foundation of our app. + + We're going to make a minimal web API with one endpoint that takes in a user + query as an input and echoes it as an output. First, let's make a directory + called ``app`` in our project root, and put an empty ``__init__.py`` there. + + .. code-block:: bash + + $ mkdir app && touch app/__init__.py + +.. edb:split-section:: + + Now let's create a file called ``main.py`` inside the ``app`` directory and put + the "Hello World" example in it: + + .. code-block:: python + :caption: app/main.py + + from fastapi import FastAPI + + app = FastAPI() + + + @app.get("/") + async def root(): + return {"message": "Hello World"} + + +.. edb:split-section:: + + To start the server, we'll run: + + .. code-block:: bash + + $ fastapi dev app/main.py + + +.. edb:split-section:: + + Once the server gets up and running, we can make sure it works using FastAPI's + built-in UI at _, or manually with ``curl``: + + .. code-block:: bash + + $ curl -X 'GET' \ + 'http://127.0.0.1:8000/' \ + -H 'accept: application/json' + + {"message":"Hello World"} + + +.. edb:split-section:: + + Now, to create the search endpoint we mentioned earlier, we need to pass our + query as a parameter to it. We'd prefer to have it in the request's body + since user messages can be long. + + In FastAPI land, this is done by creating a Pydantic schema and making it the + type of the input parameter. `Pydantic `_ is + a data validation library for Python. It has many features, but we don't + actually need to know about them for now. All we need to know is that FastAPI + uses Pydantic types to automatically figure out schemas for `input + `_, as well as `output + `_. + + Let's add the following to our ``main.py``: + + .. code-block:: python + :caption: app/main.py + + from pydantic import BaseModel + + + class SearchTerms(BaseModel): + query: str + + class SearchResult(BaseModel): + response: str | None = None + + +.. edb:split-section:: + + Now, we can define our endpoint. We'll set the two classes we just created as + the new endpoint's argument and return type. + + .. code-block:: python + :caption: app/main.py + + @app.post("/search") + async def search(search_terms: SearchTerms) -> SearchResult: + return SearchResult(response=search_terms.query) + + +.. edb:split-section:: + + Same as before, we can test the endpoint using the UI, or by sending a request + with ``curl``: + + .. code-block:: bash + + $ curl -X 'POST' \ + 'http://127.0.0.1:8000/search' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ "query": "string" }' + + { + "response": "string", + } + +3. Implement web search +======================= + +Now that we have our web app infrastructure in place, let's add some substance +to it by implementing web search capabilities. + +.. edb:split-section:: + + There're many powerful feature-rich products for LLM-driven web search. But + in this tutorial we're going to use a much more reliable source of real-world + information that is comment threads on `Hacker News + `_. Their `web API + `_ is free of charge and doesn't require an + account. Below is a simple function that requests a full-text search for a + string query and extracts a nice sampling of comment threads from each of the + stories that came up in the result. + + We are not going to cover this code sample in too much depth. Feel free to grab + it save it to ``app/web.py``, or make your own. + + Notice that we've created another Pydantic type called ``WebSource`` to store + our web search results. There's no framework-related reason for that, it's just + nicer than passing dictionaries around. + + .. code-block:: python + :caption: app/web.py + :class: collapsible + + import requests + from pydantic import BaseModel + from datetime import datetime + import html + + + class WebSource(BaseModel): + """Type that stores search results.""" + + url: str | None = None + title: str | None = None + text: str | None = None + + + def extract_comment_thread( + comment: dict, + max_depth: int = 3, + current_depth: int = 0, + max_children=3, + ) -> list[str]: + """ + Recursively extract comments from a thread up to max_depth. + Returns a list of formatted comment strings. + """ + if not comment or current_depth > max_depth: + return [] + + results = [] + + # Get timestamp, author and the body of the comment, + # then pad it with spaces so that it's offset appropriately for its depth + + if comment["text"]: + timestamp = datetime.fromisoformat(comment["created_at"].replace("Z", "+00:00")) + author = comment["author"] + text = html.unescape(comment["text"]) + formatted_comment = f"[{timestamp.strftime('%Y-%m-%d %H:%M')}] {author}: {text}" + results.append((" " * current_depth) + formatted_comment) + + # If there're children comments, we are going to extract them too, + # and add them to the list. + + if comment.get("children"): + for child in comment["children"][:max_children]: + child_comments = extract_comment_thread(child, max_depth, current_depth + 1) + results.extend(child_comments) + + return results + + + def fetch_web_sources(query: str, limit: int = 5) -> list[WebSource]: + """ + For a given query perform a full-text search for stories on Hacker News. + From each of the matched stories extract the comment thread and format it into a single string. + For each story return its title, url and comment thread. + """ + search_url = "http://hn.algolia.com/api/v1/search_by_date?numericFilters=num_comments>0" + + # Search for stories + response = requests.get( + search_url, + params={ + "query": query, + "tags": "story", + "hitsPerPage": limit, + "page": 0, + }, + ) + + response.raise_for_status() + search_result = response.json() + + # For each search hit fetch and process the story + web_sources = [] + for hit in search_result.get("hits", []): + item_url = f"https://hn.algolia.com/api/v1/items/{hit['story_id']}" + response = requests.get(item_url) + response.raise_for_status() + item_result = response.json() + + site_url = f"https://news.ycombinator.com/item?id={hit['story_id']}" + title = hit["title"] + comments = extract_comment_thread(item_result) + text = "\n".join(comments) if len(comments) > 0 else None + web_sources.append( + WebSource(url=site_url, title=title, text=text) + ) + + return web_sources + + + if __name__ == "__main__": + web_sources = fetch_web_sources("edgedb", limit=5) + + for source in web_sources: + print(source.url) + print(source.title) + print(source.text) + + +.. edb:split-section:: + + One more note: this snippet comes with an extra dependency called ``requests``, + which is a library for making HTTP requests. Let's add it by running: + + .. code-block:: bash + + $ uv add requests + + +.. edb:split-section:: + + Now, we can test our web search on its own by running it like this: + + .. code-block:: bash + + $ python3 app/web.py + + +.. edb:split-section:: + + It's time to reflect the new capabilities in our web app. + + .. code-block:: python + :caption: app/main.py + + from .web import fetch_web_sources, WebSource + + async def search_web(query: str) -> list[WebSource]: + raw_sources = fetch_web_sources(query, limit=5) + return [s for s in raw_sources if s.text is not None] + + +.. edb:split-section:: + + Now we can update the ``/search`` endpoint as follows: + + .. code-block:: python-diff + :caption: app/main.py + + class SearchResult(BaseModel): + response: str | None = None + + sources: list[WebSource] | None = None + + + @app.post("/search") + async def search(search_terms: SearchTerms) -> SearchResult: + + web_sources = await search_web(search_terms.query) + - return SearchResult(response=search_terms.query) + + return SearchResult( + + response=search_terms.query, sources=web_sources + + ) + + +4. Connect to the LLM +===================== + +Now that we're capable of scraping text from search results, we can forward +those results to the LLM to get a nice-looking summary. + +.. edb:split-section:: + + There's a million different LLMs accessible via a web API (`one + `_, `two + `_, `three + `_, `four `_ to name + a few), feel free to choose whichever you prefer. In this tutorial we will + roll with OpenAI, primarily for how ubiquitous it is. To keep things somewhat + provider-agnostic, we're going to get completions via raw HTTP requests. + Let's grab API descriptions from OpenAI's `API documentation + `_, and set up + LLM generation like this: + + .. code-block:: python + :caption: app/main.py + + import requests + from dotenv import load_dotenv + + _ = load_dotenv() + + + def get_llm_completion(system_prompt: str, messages: list[dict[str, str]]) -> str: + api_key = os.getenv("OPENAI_API_KEY") + url = "https://api.openai.com/v1/chat/completions" + headers = {"Content-Type": "application/json", "Authorization": f"Bearer {api_key}"} + + response = requests.post( + url, + headers=headers, + json={ + "model": "gpt-4o-mini", + "messages": [ + {"role": "developer", "content": system_prompt}, + *messages, + ], + }, + ) + response.raise_for_status() + result = response.json() + return result["choices"][0]["message"]["content"] + + +.. edb:split-section:: + + Note that this cloud LLM API (and many others) requires a secret key to be + set as an environment variable. A common way to manage those is to use the + ``python-dotenv`` library in combinations with a ``.env`` file. Feel free to + browse `the readme + `_, + to learn more. Create a file called ``.env`` in the root directory and put + your api key in there: + + .. code-block:: .env + :caption: .env + + OPENAI_API_KEY="sk-..." + + +.. edb:split-section:: + + Don't forget to add the new dependency to the environment: + + .. code-block:: bash + + uv add python-dotenv + + +.. edb:split-section:: + + And now we can integrate this LLM-related code with the rest of the app. First, + let's set up a function that prepares LLM inputs: + + + .. code-block:: python + :caption: app/main.py + + async def generate_answer( + query: str, + web_sources: list[WebSource], + ) -> SearchResult: + system_prompt = ( + "You are a helpful assistant that answers user's questions" + + " by finding relevant information in Hacker News threads." + + " When answering the question, describe conversations that people have around the subject," + + " provided to you as a context, or say i don't know if they are completely irrelevant." + ) + + prompt = f"User search query: {query}\n\nWeb search results:\n" + + for i, source in enumerate(web_sources): + prompt += f"Result {i} (URL: {source.url}):\n" + prompt += f"{source.text}\n\n" + + messages = [{"role": "user", "content": prompt}] + + llm_response = get_llm_completion( + system_prompt=system_prompt, + messages=messages, + ) + + search_result = SearchResult( + response=llm_response, + sources=web_sources, + ) + + return search_result + + +.. edb:split-section:: + + Then we can plug that function into the ``/search`` endpoint: + + .. code-block:: python-diff + :caption: app/main.py + + @app.post("/search") + async def search(search_terms: SearchTerms) -> SearchResult: + web_sources = await search_web(search_terms.query) + + search_result = await generate_answer(search_terms.query, web_sources) + + return search_result + - return SearchResult( + - response=search_terms.query, sources=web_sources + - ) + + +.. edb:split-section:: + + And now we can test the result as usual. + + .. code-block:: bash + + $ curl -X 'POST' \ + 'http://127.0.0.1:8000/search' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ "query": "gel" }' + + +5. Use Gel to implement chat history +==================================== + +So far we've built an application that can take in a query, fetch some Hacker +News threads for it, sift through them using an LLM, and generate a nice +summary. + +However, right now it's hardly user-friendly since you have to speak in +keywords and basically start over every time you want to refine the query. To +enable a more organic multi-turn interaction, we need to add chat history and +infer the query from the context of the entire conversation. + +Now's a good time to introduce Gel. + +.. edb:split-section:: + + In case you need installation instructions, take a look at the :ref:`Quickstart + `. Once Gel CLI is present in your system, initialize the + project like this: + + .. code-block:: bash + + $ gel project init --non-interactive + + +This command is going to put some project scaffolding inside our app, spin up a +local instace of Gel, and then link the two together. From now on, all +Gel-related things that happen inside our project directory are going to be +automatically run on the correct database instance, no need to worry about +connection incantations. + + +Defining the schema +------------------- + +The database :ref:`schema ` in Gel is defined +declaratively. The :ref:`gel project init ` +command has created a file called ``dbchema/default.esdl``, which we're going to +use to define our types. + +.. edb:split-section:: + + We obviously want to keep track of the messages, so we need to represent + those in the schema. By convention established in the LLM space, each message + is going to have a role in addition to the message content itself. We can + also get Gel to automatically keep track of message's creation time by adding + a property callled ``timestamp`` and setting its :ref:`default value + ` to the output of the :ref:`datetime_current() + ` function. Finally, LLM messages in our search bot have + source URLs associated with them. Let's keep track of those too, by adding a + :ref:`multi-property `. + + .. code-block:: sdl + :caption: dbschema/default.esdl + + type Message { + role: str; + body: str; + timestamp: datetime { + default := datetime_current(); + } + multi sources: str; + } + + +.. edb:split-section:: + + Messages are grouped together into a chat, so let's add that entity to our + schema too. + + .. code-block:: sdl + :caption: dbschema/default.esdl + + type Chat { + multi messages: Message; + } + + +.. edb:split-section:: + + And chats all belong to a certain user, making up their chat history. One other + thing we'd like to keep track of about our users is their username, and it would + make sense for us to make sure that it's unique by using an ``excusive`` + :ref:`constraint `. + + .. code-block:: sdl + :caption: dbschema/default.esdl + + type User { + name: str { + constraint exclusive; + } + multi chats: Chat; + } + + +.. edb:split-section:: + + We're going to keep our schema super simple. One cool thing about Gel is that + it will enable us to easily implement advanced features such as authentication + or AI down the road, but we're gonna come back to that later. + + For now, this is the entire schema we came up with: + + .. code-block:: sdl + :caption: dbschema/default.esdl + + module default { + type Message { + role: str; + body: str; + timestamp: datetime { + default := datetime_current(); + } + multi sources: str; + } + + type Chat { + multi messages: Message; + } + + type User { + name: str { + constraint exclusive; + } + multi chats: Chat; + } + } + + +.. edb:split-section:: + + Let's use the :ref:`gel migration create ` CLI + command, followed by :ref:`gel migrate ` in order to + migrate to our new schema and proceed to writing some queries. + + .. code-block:: bash + + $ gel migration create + $ gel migrate + + +.. edb:split-section:: + + Now that our schema is applied, let's quickly populate the database with some + fake data in order to be able to test the queries. We're going to explore + writing queries in a bit, but for now you can just run the following command in + the shell: + + .. code-block:: bash + :class: collapsible + + $ mkdir app/sample_data && cat << 'EOF' > app/sample_data/inserts.edgeql + # Create users first + insert User { + name := 'alice', + }; + insert User { + name := 'bob', + }; + # Insert chat histories for Alice + update User + filter .name = 'alice' + set { + chats := { + (insert Chat { + messages := { + (insert Message { + role := 'user', + body := 'What are the main differences between GPT-3 and GPT-4?', + timestamp := '2024-01-07T10:00:00Z', + sources := {'arxiv:2303.08774', 'openai.com/research/gpt-4'} + }), + (insert Message { + role := 'assistant', + body := 'The key differences include improved reasoning capabilities, better context understanding, and enhanced safety features...', + timestamp := '2024-01-07T10:00:05Z', + sources := {'openai.com/blog/gpt-4-details', 'arxiv:2303.08774'} + }) + } + }), + (insert Chat { + messages := { + (insert Message { + role := 'user', + body := 'Can you explain what policy gradient methods are in RL?', + timestamp := '2024-01-08T14:30:00Z', + sources := {'Sutton-Barto-RL-Book-Ch13', 'arxiv:1904.12901'} + }), + (insert Message { + role := 'assistant', + body := 'Policy gradient methods are a class of reinforcement learning algorithms that directly optimize the policy...', + timestamp := '2024-01-08T14:30:10Z', + sources := {'Sutton-Barto-RL-Book-Ch13', 'spinning-up.openai.com'} + }) + } + }) + } + }; + # Insert chat histories for Bob + update User + filter .name = 'bob' + set { + chats := { + (insert Chat { + messages := { + (insert Message { + role := 'user', + body := 'What are the pros and cons of different sharding strategies?', + timestamp := '2024-01-05T16:15:00Z', + sources := {'martin-kleppmann-ddia-ch6', 'aws.amazon.com/sharding-patterns'} + }), + (insert Message { + role := 'assistant', + body := 'The main sharding strategies include range-based, hash-based, and directory-based sharding...', + timestamp := '2024-01-05T16:15:08Z', + sources := {'martin-kleppmann-ddia-ch6', 'mongodb.com/docs/sharding'} + }), + (insert Message { + role := 'user', + body := 'Could you elaborate on hash-based sharding?', + timestamp := '2024-01-05T16:16:00Z', + sources := {'mongodb.com/docs/sharding'} + }) + } + }) + } + }; + EOF + + +.. edb:split-section:: + + This created the ``app/sample_data/inserts.edgeql`` file, which we can now execute + using the CLI like this: + + .. code-block:: bash + + $ gel query -f app/sample_data/inserts.edgeql + + {"id": "862de904-de39-11ef-9713-4fab09220c4a"} + {"id": "862e400c-de39-11ef-9713-2f81f2b67013"} + {"id": "862de904-de39-11ef-9713-4fab09220c4a"} + {"id": "862e400c-de39-11ef-9713-2f81f2b67013"} + + +.. edb:split-section:: + + The :ref:`gel query ` command is one of many ways we can + execute a query in Gel. Now that we've done it, there's stuff in the database. + Let's verify it by running: + + .. code-block:: bash + + $ gel query "select User { name };" + + {"name": "alice"} + {"name": "bob"} + + +Writing queries +--------------- + +With schema in place, it's time to focus on getting the data in and out of the +database. + +In this tutorial we're going to write queries using :ref:`EdgeQL +` and then use :ref:`codegen ` to +generate typesafe function that we can plug directly into out Python code. If +you are completely unfamiliar with EdgeQL, now is a good time to check out the +basics before proceeding. + + +.. edb:split-section:: + + Let's move on. First, we'll create a directory inside ``app`` called + ``queries``. This is where we're going to put all of the EdgeQL-related stuff. + + We're going to start by writing a query that fetches all of the users. In + ``queries`` create a file named ``get_users.edgeql`` and put the following query + in there: + + .. code-block:: edgeql + :caption: app/queries/get_users.edgeql + + select User { name }; + + +.. edb:split-section:: + + Now run the code generator from the shell: + + .. code-block:: bash + + $ gel-py + + +.. edb:split-section:: + + It's going to automatically locate the ``.edgeql`` file and generate types for + it. We can inspect generated code in ``app.queries/get_users_async_edgeql.py``. + Once that is done, let's use those types to create the endpoint in ``main.py``: + + .. code-block:: python + :caption: app/main.py + + from edgedb import create_async_client + from .queries.get_users_async_edgeql import get_users as get_users_query, GetUsersResult + + + gel_client = create_async_client() + + @app.get("/users") + async def get_users() -> list[GetUsersResult]: + return await get_users_query(gel_client) + + +.. edb:split-section:: + + Let's verify it that works as expected: + + .. code-block:: bash + + $ curl -X 'GET' \ + 'http://127.0.0.1:8000/users' \ + -H 'accept: application/json' + + [ + { + "id": "862de904-de39-11ef-9713-4fab09220c4a", + "name": "alice" + }, + { + "id": "862e400c-de39-11ef-9713-2f81f2b67013", + "name": "bob" + } + ] + + +.. edb:split-section:: + + While we're at it, let's also implement the option to fetch a user by their + username. In order to do that, we need to write a new query in a separate file + ``app/queries/get_user_by_name.edgeql``: + + .. code-block:: edgeql + :caption: app/queries/get_user_by_name.edgeql + + select User { name } + filter .name = $name; + + +.. edb:split-section:: + + After that, we will run the code generator again by calling ``gel-py``. In the + app, we are going to reuse the same endpoint that fetches the list of all users. + From now on, if the user calls it without any arguments (e.g. + ``http://127.0.0.1/users``), they are going to receive the list of all users, + same as before. But if they pass a username as a query argument like this: + ``http://127.0.0.1/users?username=bob``, the system will attempt to fetch a user + named ``bob``. + + In order to achieve this, we're going to need to add a ``Query``-type argument + to our endpoint function. You can learn more about how to configure this type of + arguments in `FastAPI's docs + `_. It's default value is + going to be ``None``, which will enable us to implement our conditional logic: + + .. code-block:: python + :caption: app/main.py + + from fastapi import Query, HTTPException + from http import HTTPStatus + from .queries.get_user_by_name_async_edgeql import ( + get_user_by_name as get_user_by_name_query, + GetUserByNameResult, + ) + + + @app.get("/users") + async def get_users( + username: str = Query(None), + ) -> list[GetUsersResult] | GetUserByNameResult: + """List all users or get a user by their username""" + if username: + user = await get_user_by_name_query(gel_client, name=username) + if not user: + raise HTTPException( + HTTPStatus.NOT_FOUND, + detail={"error": f"Error: user {username} does not exist."}, + ) + return user + else: + return await get_users_query(gel_client) + + +.. edb:split-section:: + + And once again, let's verify that everything works: + + .. code-block:: bash + + $ curl -X 'GET' \ + 'http://127.0.0.1:8000/users?username=alice' \ + -H 'accept: application/json' + + { + "id": "862de904-de39-11ef-9713-4fab09220c4a", + "name": "alice" + } + + +.. edb:split-section:: + + Finally, let's also implement the option to add a new user. For this, just as + before, we'll create a new file ``app/queries/create_user.edgeql``, add a query + to it and run code generation. + + Note that in this query we've wrapped the ``insert`` in a ``select`` statement. + This is a common pattern in EdgeQL, that can be used whenever you would like to + get something other than object ID when you just inserted it. + + .. code-block:: edgeql + :caption: app/queries/create_user.edgeql + + select( + insert User { + name := $username + } + ) { + name + } + + + +.. edb:split-section:: + + In order to integrate this query into our app, we're going to add a new + endpoint. Note that this one has the same name ``/users``, but is for the POST + HTTP method. + + .. code-block:: python + :caption: app/main.py + + from gel import ConstraintViolationError + from .queries.create_user_async_edgeql import ( + create_user as create_user_query, + CreateUserResult, + ) + + @app.post("/users", status_code=HTTPStatus.CREATED) + async def post_user(username: str = Query()) -> CreateUserResult: + try: + return await create_user_query(gel_client, username=username) + except ConstraintViolationError: + raise HTTPException( + status_code=HTTPStatus.BAD_REQUEST, + detail={"error": f"Username '{username}' already exists."}, + ) + + +.. edb:split-section:: + + Once more, let's verify that the new endpoint works as expected: + + .. code-block:: bash + + $ curl -X 'POST' \ + 'http://127.0.0.1:8000/users?username=charlie' \ + -H 'accept: application/json' \ + -d '' + + { + "id": "20372a1a-ded5-11ef-9a08-b329b578c45c", + "name": "charlie" + } + + +.. edb:split-section:: + + This wraps things up for our user-related functionality. Of course, we now need + to deal with Chats and Messages, too. We're not going to go in depth for those, + since the process would be quite similar to what we've just done. Instead, feel + free to implement those endpoints yourself as an exercise, or copy the code + below if you are in rush. + + .. code-block:: bash + :class: collapsible + + $ echo 'select Chat { + messages: { role, body, sources }, + user := .$username;' > app/queries/get_chats.edgeql && echo 'select Chat { + messages: { role, body, sources }, + user := .$username and .id = $chat_id;' > app/queries/get_chat_by_id.edgeql && echo 'with new_chat := (insert Chat) + select ( + update User filter .name = $username + set { + chats := assert_distinct(.chats union new_chat) + } + ) { + new_chat_id := new_chat.id + }' > app/queries/create_chat.edgeql && echo 'with + user := (select User filter .name = $username), + chat := ( + select Chat filter .$chat_id + ) + select Message { + role, + body, + sources, + chat := . app/queries/get_messages.edgeql && echo 'with + user := (select User filter .name = $username), + update Chat + filter .id = $chat_id and .$message_role, + body := $message_body, + sources := array_unpack(>$sources) + } + )) + }' > app/queries/add_message.edgeql + + +.. edb:split-section:: + + And these are the endpoint definitions, provided in bulk. + + .. code-block:: python + :caption: app/main.py + :class: collapsible + + from .queries.get_chats_async_edgeql import get_chats as get_chats_query, GetChatsResult + from .queries.get_chat_by_id_async_edgeql import ( + get_chat_by_id as get_chat_by_id_query, + GetChatByIdResult, + ) + from .queries.get_messages_async_edgeql import ( + get_messages as get_messages_query, + GetMessagesResult, + ) + from .queries.create_chat_async_edgeql import ( + create_chat as create_chat_query, + CreateChatResult, + ) + from .queries.add_message_async_edgeql import ( + add_message as add_message_query, + ) + + + @app.get("/chats") + async def get_chats( + username: str = Query(), chat_id: str = Query(None) + ) -> list[GetChatsResult] | GetChatByIdResult: + """List user's chats or get a chat by username and id""" + if chat_id: + chat = await get_chat_by_id_query( + gel_client, username=username, chat_id=chat_id + ) + if not chat: + raise HTTPException( + HTTPStatus.NOT_FOUND, + detail={"error": f"Chat {chat_id} for user {username} does not exist."}, + ) + return chat + else: + return await get_chats_query(gel_client, username=username) + + + @app.post("/chats", status_code=HTTPStatus.CREATED) + async def post_chat(username: str) -> CreateChatResult: + return await create_chat_query(gel_client, username=username) + + + @app.get("/messages") + async def get_messages( + username: str = Query(), chat_id: str = Query() + ) -> list[GetMessagesResult]: + """Fetch all messages from a chat""" + return await get_messages_query(gel_client, username=username, chat_id=chat_id) + + +.. edb:split-section:: + + For the ``post_messages`` function we're going to do something a little bit + different though. Since this is now the primary way for the user to add their + queries to the system, it functionally superceeds the ``/search`` endpoint we + made before. To this end, this function is where we're going to handle saving + messages, retrieving chat history, invoking web search and generating the + answer. + + .. code-block:: python-diff + :caption: app/main.py + + - @app.post("/search") + - async def search(search_terms: SearchTerms) -> SearchResult: + - web_sources = await search_web(search_terms.query) + - search_result = await generate_answer(search_terms.query, web_sources) + - return search_result + + + @app.post("/messages", status_code=HTTPStatus.CREATED) + + async def post_messages( + + search_terms: SearchTerms, + + username: str = Query(), + + chat_id: str = Query(), + + ) -> SearchResult: + + chat_history = await get_messages_query( + + gel_client, username=username, chat_id=chat_id + + ) + + + _ = await add_message_query( + + gel_client, + + username=username, + + message_role="user", + + message_body=search_terms.query, + + sources=[], + + chat_id=chat_id, + + ) + + + search_query = search_terms.query + + web_sources = await search_web(search_query) + + + search_result = await generate_answer( + + search_terms.query, chat_history, web_sources + + ) + + + _ = await add_message_query( + + gel_client, + + username=username, + + message_role="assistant", + + message_body=search_result.response, + + sources=search_result.sources, + + chat_id=chat_id, + + ) + + + return search_result + + +.. edb:split-section:: + + Let's not forget to modify the ``generate_answer`` function, so it can also be + history-aware. + + .. code-block:: python-diff + :caption: app/main.py + + async def generate_answer( + query: str, + + chat_history: list[GetMessagesResult], + web_sources: list[WebSource], + ) -> SearchResult: + system_prompt = ( + "You are a helpful assistant that answers user's questions" + + " by finding relevant information in HackerNews threads." + + " When answering the question, describe conversations that people have around the subject," + + " provided to you as a context, or say i don't know if they are completely irrelevant." + ) + + prompt = f"User search query: {query}\n\nWeb search results:\n" + + for i, source in enumerate(web_sources): + prompt += f"Result {i} (URL: {source.url}):\n" + prompt += f"{source.text}\n\n" + + - messages = [{"role": "user", "content": prompt}] + + messages = [ + + {"role": message.role, "content": message.body} for message in chat_history + + ] + + messages.append({"role": "user", "content": prompt}) + + llm_response = get_llm_completion( + system_prompt=system_prompt, + messages=messages, + ) + + search_result = SearchResult( + response=llm_response, + sources=web_sources, + ) + + return search_result + + +.. edb:split-section:: + + Ok, this should be it for setting up the chat history. Let's test it. First, we + are going to start a new chat for our user: + + .. code-block:: bash + + $ curl -X 'POST' \ + 'http://127.0.0.1:8000/chats?username=charlie' \ + -H 'accept: application/json' \ + -d '' + + { + "id": "20372a1a-ded5-11ef-9a08-b329b578c45c", + "new_chat_id": "544ef3f2-ded8-11ef-ba16-f7f254b95e36" + } + + +.. edb:split-section:: + + Next, let's add a couple messages and wait for the bot to respond: + + .. code-block:: bash + + $ curl -X 'POST' \ + 'http://127.0.0.1:8000/messages?username=charlie&chat_id=544ef3f2-ded8-11ef-ba16-f7f254b95e36' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "query": "best database in existence" + }' + + $ curl -X 'POST' \ + 'http://127.0.0.1:8000/messages?username=charlie&chat_id=544ef3f2-ded8-11ef-ba16-f7f254b95e36' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "query": "gel" + }' + + +.. edb:split-section:: + + Finally, let's check that the messages we saw are in fact stored in the chat + history: + + .. code-block:: bash + + $ curl -X 'GET' \ + 'http://127.0.0.1:8000/messages?username=charlie&chat_id=544ef3f2-ded8-11ef-ba16-f7f254b95e36' \ + -H 'accept: application/json' + + +In reality this workflow would've been handled by the frontend, providing the +user with a nice inteface to interact with. But even without one our chatbot is +almost functional by now. + +Generating a Google search query +-------------------------------- + +Congratulations! We just got done implementing multi-turn conversations for our +search bot. + +However, there's still one crucial piece missing. Right now we're simply +forwarding the users message straight to the full-text search. But what happens +if their message is a followup that cannot be used as a standalone search +query? + +Ideally what we should do is we should infer the search query from the entire +conversation, and use that to perform the search. + +Let's implement an extra step in which the LLM is going to produce a query for +us based on the entire chat history. That way we can be sure we're progressively +working on our query rather than rewriting it from scratch every time. + + +.. edb:split-section:: + + This is what we need to do: every time the user submits a message, we need to + fetch the chat history, extract a search query from it using the LLM, and the + other steps are going to the the same as before. Let's make the follwing + modifications to the ``main.py``: first we need to create a function that + prepares LLM inputs for the search query inference. + + + .. code-block:: python + :caption: app/main.py + + async def generate_search_query( + query: str, message_history: list[GetMessagesResult] + ) -> str: + system_prompt = ( + "You are a helpful assistant." + + " Your job is to extract a keyword search query" + + " from a chat between an AI and a human." + + " Make sure it's a single most relevant keyword to maximize matching." + + " Only provide the query itself as your response." + ) + + formatted_history = "\n---\n".join( + [ + f"{message.role}: {message.body} (sources: {message.sources})" + for message in message_history + ] + ) + prompt = f"Chat history: {formatted_history}\n\nUser message: {query} \n\n" + + llm_response = get_llm_completion( + system_prompt=system_prompt, messages=[{"role": "user", "content": prompt}] + ) + + return llm_response + + +.. edb:split-section:: + + And now we can use this function in ``post_messages`` in order to get our + search query: + + + .. code-block:: python-diff + :caption: app/main.py + + class SearchResult(BaseModel): + response: str | None = None + + search_query: str | None = None + sources: list[WebSource] | None = None + + + @app.post("/messages", status_code=HTTPStatus.CREATED) + async def post_messages( + search_terms: SearchTerms, + username: str = Query(), + chat_id: str = Query(), + ) -> SearchResult: + # 1. Fetch chat history + chat_history = await get_messages_query( + gel_client, username=username, chat_id=chat_id + ) + + # 2. Add incoming message to Gel + _ = await add_message_query( + gel_client, + username=username, + message_role="user", + message_body=search_terms.query, + sources=[], + chat_id=chat_id, + ) + + # 3. Generate a query and perform googling + - search_query = search_terms.query + + search_query = await generate_search_query(search_terms.query, chat_history) + + web_sources = await search_web(search_query) + + + # 5. Generate answer + search_result = await generate_answer( + search_terms.query, + chat_history, + web_sources, + ) + + search_result.search_query = search_query # add search query to the output + + # to see what the bot is searching for + # 6. Add LLM response to Gel + _ = await add_message_query( + gel_client, + username=username, + message_role="assistant", + message_body=search_result.response, + sources=[s.url for s in search_result.sources], + chat_id=chat_id, + ) + + # 7. Send result back to the client + return search_result + + +.. edb:split-section:: + + Done! We've now fully integrated the chat history into out app and enabled + natural language conversations. As before, let's quickly test out the + improvements before moving on: + + + .. code-block:: bash + + $ curl -X 'POST' \ + 'http://localhost:8000/messages?username=alice&chat_id=d4eed420-e903-11ef-b8a7-8718abdafbe1' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "query": "what are people saying about gel" + }' + + $ curl -X 'POST' \ + 'http://localhost:8000/messages?username=alice&chat_id=d4eed420-e903-11ef-b8a7-8718abdafbe1' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "query": "do they like it or not" + }' + + +6. Use Gel's advanced features to create a RAG +============================================== + +At this point we have a decent search bot that can refine a search query over +multiple turns of a conversation. + +It's time to add the final touch: we can make the bot remember previous similar +interactions with the user using retrieval-augmented generation (RAG). + +To achieve this we need to implement similarity search across message history: +we're going to create a vector embedding for every message in the database using +a neural network. Every time we generate a Google search query, we're also going +to use it to search for similar messages in user's message history, and inject +the corresponding chat into the prompt. That way the search bot will be able to +quickly "remember" similar interactions with the user and use them to understand +what they are looking for. + +Gel enables us to implement such a system with only minor modifications to the +schema. + + +.. edb:split-section:: + + We begin by enabling the ``ai`` extension by adding the following like on top of + the ``dbschema/default.esdl``: + + .. code-block:: sdl-diff + :caption: dbschema/default.esdl + + + using extension ai; + + +.. edb:split-section:: + + ... and do the migration: + + + .. code-block:: bash + + $ gel migration create + $ gel migrate + + +.. edb:split-section:: + + Next, we need to configure the API key in Gel for whatever embedding provider + we're going to be using. As per documentation, let's open up the CLI by typing + ``gel`` and run the following command (assuming we're using OpenAI): + + .. code-block:: edgeql-repl + + searchbot:main> configure current database + insert ext::ai::OpenAIProviderConfig { + secret := 'sk-....', + }; + + OK: CONFIGURE DATABASE + + +.. edb:split-section:: + + In order to get Gel to automatically keep track of creating and updating + message embeddings, all we need to do is create a deferred index like this. + Don't forget to run a migration one more time! + + .. code-block:: sdl-diff + + type Message { + role: str; + body: str; + timestamp: datetime { + default := datetime_current(); + } + multi sources: str; + + + deferred index ext::ai::index(embedding_model := 'text-embedding-3-small') + + on (.body); + } + + +.. edb:split-section:: + + And we're done! Gel is going to cook in the background for a while and generate + embedding vectors for our queries. To make sure nothing broke we can follow + Gel's AI documentation and take a look at instance logs: + + .. code-block:: bash + + $ gel instance logs -I searchbot | grep api.openai.com + + INFO 50121 searchbot 2025-01-30T14:39:53.364 httpx: HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK" + + +.. edb:split-section:: + + It's time to create the second half of the similarity search - the search query. + The query needs to fetch ``k`` chats in which there're messages that are most + similar to our current message. This can be a little difficult to visualize in + your head, so here's the query itself: + + .. code-block:: edgeql + :caption: app/queries/search_chats.edgeql + + with + user := (select User filter .name = $username), + chats := ( + select Chat + filter .$current_chat_id + ) + + select chats { + distance := min( + ext::ai::search( + .messages, + >$embedding, + ).distance, + ), + messages: { + role, body, sources + } + } + + order by .distance + limit $limit; + + +.. edb:split-section:: + + .. note:: + + Before we can integrate this query into our Python app, we also need to add a + new dependency for the Python binding: ``httpx-sse``. It's enables streaming + outputs, which we're not going to use right now, but we won't be able to + create the AI client without it. + + Let's place in in ``app/queries/search_chats.edgeql``, run the codegen and modify + our ``post_messages`` endpoint to keep track of those similar chats. + + .. code-block:: python-diff + :caption: app.main.py + + + from edgedb.ai import create_async_ai, AsyncEdgeDBAI + + from .queries.search_chats_async_edgeql import ( + + search_chats as search_chats_query, + + ) + + class SearchResult(BaseModel): + response: str | None = None + search_query: str | None = None + sources: list[WebSource] | None = None + + similar_chats: list[str] | None = None + + + @app.post("/messages", status_code=HTTPStatus.CREATED) + async def post_messages( + search_terms: SearchTerms, + username: str = Query(), + chat_id: str = Query(), + ) -> SearchResult: + # 1. Fetch chat history + chat_history = await get_messages_query( + gel_client, username=username, chat_id=chat_id + ) + + # 2. Add incoming message to Gel + _ = await add_message_query( + gel_client, + username=username, + message_role="user", + message_body=search_terms.query, + sources=[], + chat_id=chat_id, + ) + + # 3. Generate a query and perform googling + search_query = await generate_search_query(search_terms.query, chat_history) + web_sources = await search_web(search_query) + + + # 4. Fetch similar chats + + db_ai: AsyncEdgeDBAI = await create_async_ai(gel_client, model="gpt-4o-mini") + + embedding = await db_ai.generate_embeddings( + + search_query, model="text-embedding-3-small" + + ) + + similar_chats = await search_chats_query( + + gel_client, + + username=username, + + current_chat_id=chat_id, + + embedding=embedding, + + limit=1, + + ) + + # 5. Generate answer + search_result = await generate_answer( + search_terms.query, + chat_history, + web_sources, + + similar_chats, + ) + search_result.search_query = search_query # add search query to the output + # to see what the bot is searching for + # 6. Add LLM response to Gel + _ = await add_message_query( + gel_client, + username=username, + message_role="assistant", + message_body=search_result.response, + sources=[s.url for s in search_result.sources], + chat_id=chat_id, + ) + + # 7. Send result back to the client + return search_result + + +.. edb:split-section:: + + Finally, the answer generator needs to get updated one more time, since we need + to inject the additional messages into the prompt. + + .. code-block:: python-diff + :caption: app/main.py + + async def generate_answer( + query: str, + chat_history: list[GetMessagesResult], + web_sources: list[WebSource], + + similar_chats: list[list[GetMessagesResult]], + ) -> SearchResult: + system_prompt = ( + "You are a helpful assistant that answers user's questions" + + " by finding relevant information in HackerNews threads." + + " When answering the question, describe conversations that people have around the subject, provided to you as a context, or say i don't know if they are completely irrelevant." + + + " You can reference previous conversation with the user that" + + + " are provided to you, if they are relevant, by explicitly referring" + + + " to them by saying as we discussed in the past." + ) + + prompt = f"User search query: {query}\n\nWeb search results:\n" + + for i, source in enumerate(web_sources): + prompt += f"Result {i} (URL: {source.url}):\n" + prompt += f"{source.text}\n\n" + + + prompt += "Similar chats with the same user:\n" + + + formatted_chats = [] + + for i, chat in enumerate(similar_chats): + + formatted_chat = f"Chat {i}: \n" + + for message in chat.messages: + + formatted_chat += f"{message.role}: {message.body}\n" + + formatted_chats.append(formatted_chat) + + + prompt += "\n".join(formatted_chats) + + messages = [ + {"role": message.role, "content": message.body} for message in chat_history + ] + messages.append({"role": "user", "content": prompt}) + + llm_response = get_llm_completion( + system_prompt=system_prompt, + messages=messages, + ) + + search_result = SearchResult( + response=llm_response, + sources=web_sources, + + similar_chats=formatted_chats, + ) + + return search_result + + +.. edb:split-section:: + + And one last time, let's check to make sure everything works: + + .. code-block:: bash + + $ curl -X 'POST' \ + 'http://localhost:8000/messages?username=alice&chat_id=d4eed420-e903-11ef-b8a7-8718abdafbe1' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "query": "remember that cool db i was talking to you about?" + }' + + +Keep going! +=========== + +This tutorial is over, but this app surely could use way more features! + +Basic functionality like deleting messages, a user interface or real web +search, sure. But also authentication or access policies -- Gel will let you +set those up in minutes. + +Thanks! + + + + + + +

      wkU*)nR^qdTApOPzTWUDkM#3!{B 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%0AOM3nSZ8lDmLOAqq3z0u>%-I`npr{yL>+ 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