Уважаемые разработчики, я хотел уточнить о поведении "identity
column". В релиз-ноте заявлено, что оно эмулирует поведение MySQL
"auto_increment" или PostgreSQL "serial".


   Где-где заявлено ? Какие-такие релиз ноты ? :)

   Вот тут не вижу слов "MySQL", "PostgreSQL"...

http://firebird.svn.sourceforge.net/viewvc/firebird/firebird/trunk/doc/sql.extensions/README.identity_columns.txt?revision=47721&view=markup&pathrev=47721

   Мы ориентируемся в первую очередь на стандарт, а не на непойми что :)

Пусть мы имеем:
create table objects (
 id integer generated by default as identity primary key,
 name varchar(15)
);
COMMIT;

insert into objects (name) values ('Table');
insert into objects (name) values ('Book');
insert into objects (id, name) values (10, 'Computer');
COMMIT;

select * from objects;
         ID NAME
============ ===============
          1 Table
          2 Book
         10 Computer


Вопрос, если мы выполним еще один INSERT, то каким будут значения
генератора INDENTITY  ?

   3

а) insert into objects (name) values ('SomeObject'); после выполнения
домен ID получит значение 11 ?

   Домены не получают значений :) Поле ID получит следующее значение от 
генератора.

б) insert into objects (id, name) values (20, 'Computer'); после
выполнения домен ID получит значение 20, а при вставке следующей
записи insert into objects (name) values ('SomeObject'); домен ID уже
получит значение 21 ?

   Нет.

   Реализация ведь полностью описана, что там не понятно в описании ?

--
Хорсун Влад

PS IIRC, в стандарте есть варианты предложения GENERATED :

   GENERATED BY DEFAULT AS IDENTITY - реализовано в FB3
   GENERATED ALWAYS AS IDENTITY - не реализовано в FB3


Ответить