Расширение Uref, обобщённый ссылочный тип

Тип данных uref используется в расширении Qbim как ссылочный тип на различные экземпляры объектов.

В настоящей реализации тип uref используется в поле r_object таблицы action, но также может использоваться в ссылочных полях объектов.


Структура типа uref

Тип данных uref состоит из двух частей:

  • идентификатора объекта, представленного типом bigint (obj.id),
  • идентификатора экземпляра объекта, представленного типом bigint или uuid (соответственно "локальным" или "глобальным").

Методы для работы с типом uref

Расширение Uref предоставляет семейство функций для работы с типом uref.

НазначениеМетодАргументыПример вызоваРезультат
Конструктор с локальным идентификатором экземпляраbigint, bigint'1:34'::uref1:34
uref_localbigint, biginturef_local(1,34)1:34
urefbigint, biginturef(1,34)1:34
Конструктор с глобальным идентификатором экземпляраbigint, uuid'1:463404eb-ee5d-4597-b9a9-e3b69e29d18a'::uuid1:463404eb-ee5d-4597-b9a9-e3b69e29d18a
uref_globalbigint, uuiduref_global(1,'463404eb-ee5d-4597-b9a9-e3b69e29d18a'::uuid)1:463404eb-ee5d-4597-b9a9-e3b69e29d18a
urefbigint, uuiduref(1,'463404eb-ee5d-4597-b9a9-e3b69e29d18a'::uuid)1:463404eb-ee5d-4597-b9a9-e3b69e29d18a
Проверка, что идентификатор локальныйuref_is_id_localurefuref_is_id_local('1:34'::uref)true
uref_is_id_local('1:463404eb-ee5d-4597-b9a9-e3b69e29d18a'::uref)false
Проверка, что идентификатор глобальныйuref_is_id_globalurefuref_is_id_global('1:34'::uref)false
uref_is_id_global('1:463404eb-ee5d-4597-b9a9-e3b69e29d18a'::uref)true
Получение идентификатора объектаuref_objurefuref_obj('1:34'::uref)1
uref_obj('1:463404eb-ee5d-4597-b9a9-e3b69e29d18a'::uref)1
Получение идентификатора экземпляра объектаuref_id_localurefuref_id_local('1:34'::uref)34
uref_id_globalurefuref_id_global('1:463404eb-ee5d-4597-b9a9-e3b69e29d18a'::uref)463404eb-ee5d-4597-b9a9-e3b69e29d18a

Индексирование полей типа uref

Поля типа uref могут использоваться в индексах btree. Для этого в расширении Uref созданы необходимые операторы и классы операторов.