Уважаемые разработчики, я хотел уточнить о поведении "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