powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / SET GENERATOR в FB 3 - DDL или DML
8 сообщений из 8, страница 1 из 1
SET GENERATOR в FB 3 - DDL или DML
    #39085792
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В dsql/DdlNodes.epp я вижу следующий коммент:
Код: plaintext
1.
2.
3.
4.
5.
// The only need for this code is that for the sake of backward compatibility
// SET GENERATOR is still described as isc_info_sql_stmt_set_generator and ISQL
// treats it as DML thus executing it in a separate transaction. So we need to ensure
// that the generator created in another transaction can be found here. This is done
// using MET_lookup_generator() which works in the system transaction.


Однако, когда я выполняю SET GENERATOR в isql, он подчиняется правилам "autoddl" и
автоматически коммитится.

Коммент врёт, а этот кусок кода больше не нужен или я чего-то недопонимаю как обычно?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SET GENERATOR в FB 3 - DDL или DML
    #39086416
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Перефразируя вас, "SET GENERATOR" в isql выполняется в той же DDL транзакции, что и "CREATE GENERATOR"?

TOTAL workaround:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SET TERM ^;
CREATE OR ALTER PROCEDURE "SET_GENERATOR"
  (
    "name"  VARCHAR(32) NOT NULL,
    "value" BIGINT
  )
AS
  DECLARE VARIABLE vIncrement BIGINT DEFAULT NULL;
BEGIN
  EXECUTE STATEMENT
      'SELECT GEN_ID("' || :"name" || '", 0) FROM RDB$DATABASE'
    INTO: vIncrement;
  vIncrement = :"value" - vIncrement;
  EXECUTE STATEMENT
      'SELECT GEN_ID("' || :"name" || '", ' || :vIncrement
          || ') FROM RDB$DATABASE'
    INTO: vIncrement;
END^
SET TERM ;^
COMMIT WORK;
...
Рейтинг: 0 / 0
SET GENERATOR в FB 3 - DDL или DML
    #39086423
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

видимо, кто-то изменил ISQL после этого комментария. Ибо в 2.5 ISQL так себя не ведет.
...
Рейтинг: 0 / 0
SET GENERATOR в FB 3 - DDL или DML
    #39086439
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а разве SET GENERATOR это не DDL? Это же сейчас легаси аналог оператора ALTER SEQUENCE
...
Рейтинг: 0 / 0
SET GENERATOR в FB 3 - DDL или DML
    #39086779
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
API его всегда описывало отдельным тэгом и раньше он был не совсем DDL (ибо выполнялся сразу, а не при коммите), хоть и был запрещен внутри PSQL. В 3-ке его поведение изменилось и он стал почти настоящим DDL. ALTER SEQUENCE описывается через isc_info_sql_stmt_ddl. Но легаси-синтаксис SET GENERATOR по прежнему описывается через isc_info_sql_stmt_set_generator - для совместимости.
...
Рейтинг: 0 / 0
SET GENERATOR в FB 3 - DDL или DML
    #39086837
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так вопрос в том нужно ли убрать код из DdlNodes (поскольку он имеет один побочный
эффект) или вернуть код в isql.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SET GENERATOR в FB 3 - DDL или DML
    #39086886
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

разберусь на неделе
...
Рейтинг: 0 / 0
SET GENERATOR в FB 3 - DDL или DML
    #39086926
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrразберусь на неделе
Забей. Это, скорее всего, оставлено для тех, кто будет с FB 3 работать из isql 2.5.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / SET GENERATOR в FB 3 - DDL или DML
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]