Расширение Uref, обобщённый ссылочный тип
Тип данных uref используется в расширении Qbim как ссылочный тип на различные экземпляры объектов.
В настоящей реализации тип uref используется в поле r_object таблицы action, но также может использоваться в ссылочных полях объектов.
Структура типа uref
Тип данных uref состоит из двух частей:
- идентификатора объекта, представленного типом bigint (obj.id),
- идентификатора экземпляра объекта, представленного типом bigint или uuid (соответственно "локальным" или "глобальным").
Методы для работы с типом uref
Расширение Uref предоставляет семейство функций для работы с типом uref.
Назначение | Метод | Аргументы | Пример вызова | Результат |
---|---|---|---|---|
Конструктор с локальным идентификатором экземпляра | bigint, bigint | '1:34'::uref | 1:34 | |
uref_local | bigint, bigint | uref_local(1,34) | 1:34 | |
uref | bigint, bigint | uref(1,34) | 1:34 | |
Конструктор с глобальным идентификатором экземпляра | bigint, uuid | '1:463404eb-ee5d-4597-b9a9-e3b69e29d18a'::uuid | 1:463404eb-ee5d-4597-b9a9-e3b69e29d18a | |
uref_global | bigint, uuid | uref_global(1,'463404eb-ee5d-4597-b9a9-e3b69e29d18a'::uuid) | 1:463404eb-ee5d-4597-b9a9-e3b69e29d18a | |
uref | bigint, uuid | uref(1,'463404eb-ee5d-4597-b9a9-e3b69e29d18a'::uuid) | 1:463404eb-ee5d-4597-b9a9-e3b69e29d18a | |
Проверка, что идентификатор локальный | uref_is_id_local | uref | uref_is_id_local('1:34'::uref) | true |
uref_is_id_local('1:463404eb-ee5d-4597-b9a9-e3b69e29d18a'::uref) | false | |||
Проверка, что идентификатор глобальный | uref_is_id_global | uref | uref_is_id_global('1:34'::uref) | false |
uref_is_id_global('1:463404eb-ee5d-4597-b9a9-e3b69e29d18a'::uref) | true | |||
Получение идентификатора объекта | uref_obj | uref | uref_obj('1:34'::uref) | 1 |
uref_obj('1:463404eb-ee5d-4597-b9a9-e3b69e29d18a'::uref) | 1 | |||
Получение идентификатора экземпляра объекта | uref_id_local | uref | uref_id_local('1:34'::uref) | 34 |
uref_id_global | uref | uref_id_global('1:463404eb-ee5d-4597-b9a9-e3b69e29d18a'::uref) | 463404eb-ee5d-4597-b9a9-e3b69e29d18a |
Индексирование полей типа uref
Поля типа uref могут использоваться в индексах btree. Для этого в расширении Uref созданы необходимые операторы и классы операторов.