RUID

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(См. также)
 
(не показаны 12 промежуточных версий 2 участников)
Строка 8: Строка 8:
 
==== Строковое представление ====
 
==== Строковое представление ====
  
В строковом представлении RUID имеет следующий вид: '''"xid_dbid"'''. Обычно, РУИД в строковом представлении используется при вызове функции '''gdcBaseManager.GetIDByRUIDString'''. Например:
+
В строковом представлении RUID имеет следующий вид: '''"xid_dbid"'''. Обычно, РУИД в строковом представлении используется при вызове функции [[GdcBase.TgdcBaseManager.GetIDByRUIDString|gdcBaseManager.GetIDByRUIDString]]. Например:
  
 
   gdcBaseManager.GetIDByRUIDString("147012468_486813904")
 
   gdcBaseManager.GetIDByRUIDString("147012468_486813904")
 +
 +
Строка РУИДа должна соответствовать следующему формату:
 +
 +
<syntaxhighlight lang="SQL">
 +
  SIMILAR TO '([[:DIGIT:]]{9,10}\_[[:DIGIT:]]+)|([[:DIGIT:]]+\_17)' ESCAPE '\'
 +
</syntaxhighlight>
  
 
==== Хранение RUID в базе данных ====
 
==== Хранение RUID в базе данных ====
Строка 21: Строка 27:
  
 
* При сохранении объекта в базе данных (метод [[gdcBase.TgdcBase.Post|Post]]), если работа осуществляется под учетной записью [[Administrator]].
 
* При сохранении объекта в базе данных (метод [[gdcBase.TgdcBase.Post|Post]]), если работа осуществляется под учетной записью [[Administrator]].
* В момент открытия [[Окно Свойста Объекта|диалогового окна Свойства объекта]].
+
* В момент открытия [[Окно Свойста Объекта|диалогового окна Свойства объекта]], если окно закрыто по кнопке OK.
 
* В процессе [[Бизнес-объект. Сериализация данных|сохранения объекта в поток]].
 
* В процессе [[Бизнес-объект. Сериализация данных|сохранения объекта в поток]].
  
Присвоить РУИДы всем записям в базе можно с помощью следующего запроса:
+
Присвоить РУИДы всем записям из одной таблицы можно с помощью следующего запроса:
 +
 
 +
<syntaxhighlight lang="SQL">
 +
MERGE INTO gd_ruid r
 +
  USING (SELECT id FROM gd_contact 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, 650002)
 +
</syntaxhighlight>
 +
 
 +
Для примера мы использовали таблицу [[GD_CONTACT]].
 +
 
 +
Присвоить РУИДы записям из всех таблиц в базе можно с помощью следующего запроса:
  
 
<syntaxhighlight lang="SQL">
 
<syntaxhighlight lang="SQL">
Строка 60: Строка 79:
 
END
 
END
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
==== Изменение РУИД для существующего объекта ====
 +
 +
Команда изменения РУИДа для существующего объекта находится на панели инструментов в окне Редактора SQL. Подробная информация находится [[GdcBase.TgdcBaseManager.ChangeRUID|здесь]].
 +
 +
==== Использование RUID в запросах ====
 +
 +
При помощи [[Метапеременные в SQL запросах|метапеременной]] RUID в SQL запросах можно получить идентификатор записи в текущей базе данных по ее РУИДу.
 +
 +
Синтаксис:
 +
<RUID XID="xid_number" DBID ="dbid_number"/>
  
 
==== См. также ====
 
==== См. также ====
  
 
* [[ID і RUID]]
 
* [[ID і RUID]]
 +
* [[Удаление из GD_RUID записей для несуществующих объектов]]
 +
* [[Поиск записи по заданному RUID]]
  
 
[[Category:База данных]]
 
[[Category:База данных]]

Текущая версия на 10:35, 27 ноября 2024

RUID (Record Unique Identifier) — уникальный идентификатор записи для всех существующих в природе баз данных системы Гедымин.

В пределах файла базы данных все объекты имеют уникальный целочисленный идентификатор благодаря использованию одного на все таблицы генератора gd_g_dbid. Каждая база данных имеет свой уникальный целочисленный идентификатор DBID, который хранится в генераторе gd_g_dbid. RUID объекта — это два целых числа:

  1. XID — идентификатор объекта на момент его создания.
  2. DBID — идентификатор базы данных, в которой этот объект был создан.

[править] Строковое представление

В строковом представлении RUID имеет следующий вид: "xid_dbid". Обычно, РУИД в строковом представлении используется при вызове функции gdcBaseManager.GetIDByRUIDString. Например:

 gdcBaseManager.GetIDByRUIDString("147012468_486813904")

Строка РУИДа должна соответствовать следующему формату:

  SIMILAR TO '([[:DIGIT:]]{9,10}\_[[:DIGIT:]]+)|([[:DIGIT:]]+\_17)' ESCAPE '\'

[править] Хранение RUID в базе данных

Связи между идентификатором записи в текущей базе данных и ее РУИДом хранятся в таблице GD_RUID.

[править] Присвоение RUID объекту

RUID присваивается объекту в следующих случаях:

Присвоить РУИДы всем записям из одной таблицы можно с помощью следующего запроса:

MERGE INTO gd_ruid r
  USING (SELECT id FROM gd_contact 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, 650002)

Для примера мы использовали таблицу GD_CONTACT.

Присвоить РУИДы записям из всех таблиц в базе можно с помощью следующего запроса:

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

[править] Изменение РУИД для существующего объекта

Команда изменения РУИДа для существующего объекта находится на панели инструментов в окне Редактора SQL. Подробная информация находится здесь.

[править] Использование RUID в запросах

При помощи метапеременной RUID в SQL запросах можно получить идентификатор записи в текущей базе данных по ее РУИДу.

Синтаксис:

<RUID XID="xid_number" DBID ="dbid_number"/>

[править] См. также

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты