Новости платформы Курс. В Celesta добавлена поддержка последовательностей (Sequences).

4 views
Skip to first unread message

Ivan Golovko

unread,
Dec 29, 2017, 9:01:22 AM12/29/17
to curs-...@googlegroups.com
Уважаемые пользователи платформы Курс.

Теперь  Celesta поддерживает возможность работы с последовательностями. 
Из нововведений стоит отметить:
1. Поддержку конструкции CREATE SEQUENCE в CelestaSql. Подробное описание на официальной wiki-странице платформы.
2. Возможность работы с классами доступа Sequence. Подробное описание на официальной wiki-странице платформы.
3. Возможность автоинкремента полей типа int при помощи выражения DEFAULT NEXTVAL(sequenceName). Подробное описание на официальной wiki-странице платформы.

Указанный функционал уже сейчас доступен в  dev ветке платформы и войдет в ближайший  snapshot/stable релиз платформы.

Ниже приводится пример использования данного функционала.


1. Конструкция CREATE SEQUENCE - пример использования в CelestaSql.

    Имеется следующая гранула (В остальных примерах будет использована она и тот же sequence). 
CREATE GRAIN sequences version '1.0';

CREATE SEQUENCE idNumerator START WITH 3;
    После запуска Celesta в БД будет создан sequence с именем idNumerator. 

  Обратите внимание на особенности конструкции CREATE SEQUENCE:
  1. Не поддерживается в версиях MSSQL ниже 2011. 
    2. Если не указано значение MINVALUE, то оно автоматически выставляется равным значению START WITH (по умолчанию 1).
    3. Если не указано значение MAXVALUE, то оно автоматически выставляется равным значению java.lang.Long.MAX_VALUE.
    4. Значение START WITH не обновляется для созданных ранее последовательностей, даже если было изменено в файле гранулы (связано с тем, что oracle разрешает данную операцию только через удаление и пересоздание последовательности, а идеология celesta не предусматривает удаление statefull объектов из БД).
    5. Если в грануле присутствует таблица с именем, например, A, то является недопустимым создание последовательности с именем A_seq, так как это имя зарезервировано системой.

2. Класс доступа Sequence.

    Данный класс имеет всего один метод доступа к данным - nextValue.
    Ниже приведен пример кода на языке python.
from sequences._sequences_orm import idNumeratorSequence

idNumerator = idNumeratorSequence(context)
id = idNumerator.nextValue()
    
3. Автоинкремент полей типа INT при помощи выражения DEFAULT NEXTVALUE(sequenceName).

   Допустим, имеется таблица (для данного примера оставим в ней единственное поле id).
CREATE TABLE customTable (
  id int DEFAULT NEXTVAL(idNumerator) not null,
CONSTRAINT pk_customTable PRIMARY KEY (id) );
  Таким образом, по умолчанию, значение колонки id будет находиться под управлением последовательности idNumerator.

  Обратите внимание на особенности выражения DEFAULT NEXTVALUE(sequenceName):

1. Можно использовать только последовательности, объявленные в той же грануле, что и таблица, к которой принадлежит колонка.

С уважением, разработчики платформы Курс
Reply all
Reply to author
Forward
0 new messages