RUID
SYSDBA (обсуждение | вклад) (→Присвоение RUID объекту) |
SYSDBA (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
| − | RUID (Record Unique Identifier) — уникальный идентификатор записи | + | '''RUID (Record Unique Identifier)''' — уникальный идентификатор записи для всех существующих в природе баз данных системы [[Гедымин]]. |
| − | В пределах файла базы данных все объекты имеют уникальный целочисленный идентификатор благодаря использованию одного генератора [[gd_g_dbid]]. Каждая база данных имеет свой уникальный целочисленный идентификатор [[DBID]], который хранится в генераторе [[gd_g_dbid]]. RUID объекта — это два целых числа: идентификатор объекта | + | В пределах файла базы данных все объекты имеют уникальный целочисленный идентификатор благодаря использованию одного на все таблицы генератора [[gd_g_dbid]]. Каждая база данных имеет свой уникальный целочисленный идентификатор [[DBID]], который хранится в генераторе [[gd_g_dbid]]. RUID объекта — это два целых числа: |
| + | |||
| + | # XID — идентификатор объекта на момент его создания. | ||
| + | # DBID — идентификатор базы данных, в которой этот объект был создан. | ||
==== Строковое представление ==== | ==== Строковое представление ==== | ||
| − | В строковом представлении RUID имеет следующий вид: " | + | В строковом представлении RUID имеет следующий вид: '''"xid_dbid"'''. Обычно, РУИД в строковом представлении используется при вызове функции '''gdcBaseManager.GetIDByRUIDString'''. Например: |
gdcBaseManager.GetIDByRUIDString("147012468_486813904") | gdcBaseManager.GetIDByRUIDString("147012468_486813904") | ||
| Строка 20: | Строка 23: | ||
* В момент открытия [[Окно Свойста Объекта|диалогового окна Свойства объекта]]. | * В момент открытия [[Окно Свойста Объекта|диалогового окна Свойства объекта]]. | ||
* В процессе [[Бизнес-объект. Сериализация данных|сохранения объекта в поток]]. | * В процессе [[Бизнес-объект. Сериализация данных|сохранения объекта в поток]]. | ||
| + | |||
| + | Присвоить РУИДы всем записям в базе можно с помощью следующего запроса: | ||
| + | |||
| + | <syntaxhighlight lang="SQL" | ||
| + | EXECUTE BLOCK | ||
| + | AS | ||
| + | DECLARE VARIABLE RN VARCHAR(31); | ||
| + | DECLARE VARIABLE EK INTEGER; | ||
| + | BEGIN | ||
| + | SELECT FIRST 1 contactkey | ||
| + | FROM gd_user u | ||
| + | WHERE u.ibname = CURRENT_USER | ||
| + | INTO :EK; | ||
| + | |||
| + | FOR | ||
| + | SELECT rf.rdb$relation_name | ||
| + | FROM rdb$relation_fields rf JOIN rdb$fields f | ||
| + | ON rf.rdb$field_source = f.rdb$field_name | ||
| + | WHERE rf.rdb$field_name = 'ID' AND f.rdb$field_name = 'DINTKEY' | ||
| + | /* | ||
| + | укажите здесь условие, если в обработку необходимо | ||
| + | включить только некоторые таблицы | ||
| + | |||
| + | AND rf.rdb$relation_name IN (...) | ||
| + | */ | ||
| + | INTO :RN | ||
| + | DO BEGIN | ||
| + | EXECUTE STATEMENT | ||
| + | 'MERGE INTO gd_ruid r ' || | ||
| + | ' USING (SELECT id FROM ' || :RN || ' WHERE id >= 147000000) i ' || | ||
| + | ' ON (i.id = r.id) ' || | ||
| + | ' WHEN NOT MATCHED THEN ' || | ||
| + | ' INSERT (id, xid, dbid, modified, editorkey) ' || | ||
| + | ' VALUES (i.id, i.id, GEN_ID(gd_g_dbid, 0), CURRENT_TIMESTAMP, ' || :EK || ') '; | ||
| + | END | ||
| + | END | ||
| + | </syntaxhighlight> | ||
==== См. также ==== | ==== См. также ==== | ||
| Строка 26: | Строка 66: | ||
[[Category:База данных]] | [[Category:База данных]] | ||
| + | [[Category:Руководство разработчика]] | ||
Версия 19:03, 12 апреля 2012
RUID (Record Unique Identifier) — уникальный идентификатор записи для всех существующих в природе баз данных системы Гедымин.
В пределах файла базы данных все объекты имеют уникальный целочисленный идентификатор благодаря использованию одного на все таблицы генератора gd_g_dbid. Каждая база данных имеет свой уникальный целочисленный идентификатор DBID, который хранится в генераторе gd_g_dbid. RUID объекта — это два целых числа:
- XID — идентификатор объекта на момент его создания.
- DBID — идентификатор базы данных, в которой этот объект был создан.
Содержание |
Строковое представление
В строковом представлении RUID имеет следующий вид: "xid_dbid". Обычно, РУИД в строковом представлении используется при вызове функции gdcBaseManager.GetIDByRUIDString. Например:
gdcBaseManager.GetIDByRUIDString("147012468_486813904")
Хранение RUID в базе данных
Связи между идентификатором записи в текущей базе данных и ее РУИДом хранятся в таблице GD_RUID.
Присвоение RUID объекту
RUID присваивается объекту в следующих случаях:
- При сохранении объекта в базе данных (метод Post), если работа осуществляется под учетной записью Administrator.
- В момент открытия диалогового окна Свойства объекта.
- В процессе сохранения объекта в поток.
Присвоить РУИДы всем записям в базе можно с помощью следующего запроса:
= 147000000) i ' || ' ON (i.id = r.id) ' || ' WHEN NOT MATCHED THEN ' || ' INSERT (id, xid, dbid, modified, editorkey) ' || ' VALUES (i.id, i.id, GEN_ID(gd_g_dbid, 0), CURRENT_TIMESTAMP, ' || :EK || ') '; END END