Files
tryton/trytond/doc/ref/backend.rst
T

363 lines
10 KiB
ReStructuredText
Raw Normal View History

2022-09-08 13:05:06 +02:00
.. _ref-backend:
.. module:: trytond.backend
=======
Backend
=======
The backend manages the database connection and schema manipulation.
.. contents::
:local:
:backlinks: entry
:depth: 1
2022-09-08 13:05:06 +02:00
.. attribute:: name
The name of the backend configured.
Database
========
2022-09-08 13:05:06 +02:00
.. class:: Database(name)
Manage the connection to the named database.
.. method:: Database.connect()
Connect to the database and return the instance.
.. method:: Database.get_connection([autocommit[, readonly]])
2023-02-04 21:02:37 +01:00
Retrieve a connection object as defined by :pep:`249#connection`.
2022-09-08 13:05:06 +02:00
If autocommit is set, the connection is committed after each statement.
If readonly is set, the connection is read only.
.. method:: Database.put_connection(connection[, close])
Release the connection.
If close is set, the connection is discarded.
.. method:: Database.close()
Close all connections.
.. classmethod:: Database.create(connection, database_name)
Create the named database using the connection.
.. classmethod:: Database.drop(connection, database_name)
Drop the named database using the connection.
.. method:: Database.list([hostname])
Return a list of Tryton database names.
``hostname`` filters the databases with the same configured hostname.
.. method:: Database.init()
Initialize the database schema.
.. method:: Database.test([hostname])
Return if the database is a Tryton database.
If ``hostname`` is set, it checks also if it has the same configured
hostname.
2023-04-22 11:05:23 +02:00
.. method:: Database.nextid(connection, table[, count])
2022-09-08 13:05:06 +02:00
2023-04-22 11:05:23 +02:00
Return the next ``count`` IDs for the ``table`` using the ``connection``.
2022-09-08 13:05:06 +02:00
.. note:: It may return ``None`` for some database.
.. method:: Database.setnextid(connection, table, value)
Set the ``value`` as current ID to the ``table`` using the ``connection``.
.. method:: Database.currid(connection, table)
Return the current ID of the ``table`` using the ``connection``.
.. classmethod:: Database.lock(connection, table)
Lock the ``table`` using the ``connection``.
.. method:: Database.lock_id(id[, timeout])
Return the SQL expression to lock the ``id``.
Set ``timeout`` to wait for the lock.
.. method:: Database.has_constraint(constraint)
Return if the database handle the ``constraint``.
.. method:: Database.has_returning()
Return if the database supports ``RETURNING`` in ``INSERT`` and ``UPDATE``.
.. method:: Database.has_multirow_insert()
Return if the database supports ``INSERT`` of multi-rows.
.. method:: Database.has_select_for()
Return if the database supports ``FOR UPDATE`` and ``FOR SHARE`` in
``SELECT``.
.. method:: Database.get_select_for_skip_locked()
Return For class with skip locked.
.. method:: Database.has_window_functions()
Return if the database supports window functions.
.. method:: Database.has_unaccent()
Return if the database suppport unaccentuated function.
.. method:: Database.has_unaccent_indexable()
Return if the database suppport unaccentuated function in index.
2022-09-08 13:05:06 +02:00
.. method:: Database.unaccent(value)
Return the SQL expression of unaccentuated ``value``.
.. method:: Database.has_similarity()
Return if the database suppports similarity function.
.. method:: Database.similarity(column, value)
Return the SQL expression that compare the similarity of ``column`` and
``value``.
.. method:: Database.has_search_full_text()
Return if the database suppports full text search.
.. method:: Database.format_full_text(\*documents[, language])
Return the SQL expression that format the ``documents`` into text search
vectors for the ``language``.
The order of ``documents`` define the weight for proximity ranking.
.. method:: Database.format_full_text_query(query[, language])
Convert the ``query`` expression into full text query.
.. method:: Database.search_full_text(document, query)
Return the SQL expression for searching ``document`` with the ``query``.
.. method:: Database.rank_full_text(document, query[, normalize])
Return the SQL expression to rank ``document`` with the ``query``.
.. classmethod:: Database.has_sequence()
Return if the database supports sequence querying and assignation.
.. method:: Database.sequence_exist(connection, name)
Return if the named sequence exists using the ``connection``.
.. method:: Database.sequence_create(connection, name[, number_increment[, start_value]])
Create a named sequence incremented by ``number_increment`` or ``1`` and
starting at ``start_value`` or ``1`` using the ``connection``.
.. method:: Database.sequence_update(connection, name[, number_increment[, start_value]])
2023-02-04 21:02:37 +01:00
Modify the named sequence with ``number_increment`` and ``start_value``
using the ``connection``.
2022-09-08 13:05:06 +02:00
.. method:: Database.sequence_rename(connection, old_name, new_name)
Rename the sequece from ``old_name`` to ``new_name`` using the
``connection``.
.. method:: Database.sequence_delete(connection, name)
Delete the named sequence using the ``connection``.
.. method:: Database.sequence_next_number(connection, name)
Return the next number fo the named sequence using the ``connection``.
.. method:: Database.has_channel(connection, name)
Return if the database supports ``LISTEN`` and ``NOTIFY`` on channel.
.. method:: Database.sql_type(type_)
Return the namedtuple('SQLType', 'base type') corresponding to the SQL
``type_``.
.. method:: Database.sql_format(type_, value)
Return the ``value`` casted for the SQL ``type_``.
.. method:: Database.json_get(column[, key])
Return the JSON value of the JSON ``key`` from the ``column``.
.. method:: Database.json_key_exists(column, key)
Return the SQL expression to test if ``key`` exists in the JSON ``column``.
.. method:: Database.json_any_keys_exist(column, keys)
Return the SQL expression to test if any ``keys`` exist in the JSON
``column``.
.. method:: Database.json_all_keys_exist(column, keys)
Return the SQL expression to test if all ``keys`` exist in the JSON
``column``.
.. method:: Database.json_contains(column, json)
Rteurn the SQL expression to test if the JSON ``column`` contains ``json``.
TableHandler
============
2022-09-08 13:05:06 +02:00
.. class:: TableHandler(model[, history])
Handle table for the ``model``.
If ``history`` is set, the table is the one storing the history.
.. attribute:: TableHandler.namedatalen
The maximing length of named data for the database.
.. attribute:: TableHandler.index_translators
Contain the :class:`IndexTranslator` for the database.
2022-09-08 13:05:06 +02:00
.. classmethod:: TableHandler.table_exist(table_name)
Return if the named table exists.
.. classmethod:: TableHandler.table_rename(old_name, new_name)
Rename the table from ``old_name`` to ``new_name``.
.. method:: TableHandler.column_exist(column_name)
Return if the named column exists.
.. method:: TableHandler.column_rename(old_name, new_name)
Rename the column from ``old_name`` to ``new_name``.
.. method:: TableHandler.alter_size(column_name, column_type)
Modify the size of the named column using the column type.
.. method:: TableHandler.alter_type(column_name, column_type)
Modify the type of the named column.
.. method:: TableHandler.column_is_type(column_name, type_[, size])
Return if the column is of type ``type_``.
If ``type`` is ``VARCHAR``, ``size`` is also compared except if the value if
negative.
.. method:: TableHandler.db_default(column_name, value)
Set the default ``value`` on the named column.
.. method:: TableHandler.add_column(column_name, abstract_type[, default[, comment]])
Add the named column of abstract type.
The ``default`` is a method that return the value to fill the new column.
``comment`` set as comment for the column.
.. method:: TableHandler.add_fk(column_name, reference[, on_delete])
Add a foreign key constraint on the named column to target the ``reference``
table name.
``on_delete`` defines the method to use when foreign record is deleted.
.. method:: TableHandler.drop_fk(column_name[, table])
Drop the foreign key constrant on the named column.
``table`` can be used to alter another table.
.. method:: TableHandler.not_null_action(column_name[, action])
Add or remove ``NOT NULL`` on the named column.
.. method:: TableHandler.add_constraint(ident, constraint)
Add the SQL expression ``constraint`` as constraint named ``ident`` on the
table.
.. method:: TableHandler.drop_constraint(ident[, table])
Drop the named ``ident`` constraint.
``table`` can be used to alter another table.
.. method:: TableHandler.set_indexes(indexes)
Create the :class:`indexes <trytond.model.Index>` if possible and drop
others having ``idx_`` as prefix or ``_index`` as suffix.
2022-09-08 13:05:06 +02:00
.. method:: TableHandler.drop_column(column_name)
Drop the named column.
.. classmethod:: TableHandler.drop_table(model, table[, cascade])
Drop the named ``table`` and clean ``ir.model.data`` from the given
``model``.
Set ``cascade`` to drop objects that depend on the table.
.. classmethod:: TableHandler.convert_name(name[, reserved])
2022-09-08 13:05:06 +02:00
Convert the data name to be lower than namedatalen minus reserved.
.. method:: Database.index_translator_for(index)
Return the best :class:`IndexTranslator` for the given index.
IndexTranslator
===============
.. class:: IndexTranslator
Convert an :class:`~trytond.model.Index` into a concrete index.
.. classmethod:: IndexTranslator.definition(index)
Return the name, SQL query and parameters to create the :class:`index
<trytond.model.Index>`.
.. classmethod:: IndexTranslator.score(index)
Return a score related to the fitness of using this translator for the
:class:`index <trytond.model.Index>`.
A score of ``0`` means that the translator is unsuited for the requested
usage.
Exceptions
==========
2022-09-08 13:05:06 +02:00
.. exception:: DatabaseIntegrityError
Exception raised when the relational integrity of the database is affected.
.. exception:: DatabaseDataError
Exception raised for errors that are due to problems with the processed data.
.. exception:: DatabaseOperationalError
Exception raised for errors that are related to the database’s operation.