Псевдонимы в RPC

Проблема

Существует таблица в которой есть ссылка на другую таблицу:

Table1: cd_userinroutes
Columns:
fn_user: integer,
fn_route: text

Table2: cd_routes
Columns:
id: uuid
fn_type: number

На примере видно, что таблица cd_userinroutes имеет ссылку на cd_routes при помощи колонки fn_route. Требуется достать все записи cd_routes у которых указан пользователь fn_user. В обычном sql это можно сделать при помощи JOIN, но в текущей реализации простого ___ (тройного подчеркивания) недостаточно.

Для решения данной проблемы создан механизм alias. Он позволяет создать следующий запрос:

Решение

[{
"action": "cd_userinroutes",
"method": "Query",
"data": [{
"alias":"cd_routes", // (1)
"select": "fn_route___fn_type as fn_type" // (2)
}],
"type": "rpc",
"tid": 1
}]

Создается RPC запрос в базу данных для получения информации по таблице cd_userinroutes (но мы помним, что нам нужно таблица cd_routes). Далее в массиве data создается элемент в котором одно из свойств называется alias (1). В котором и требуется указать нужную нам таблицу. Далее в select указываем список полей (2) которые нам нужно достать используя правило. В конце поля добавляем наименование колонки которое должно быть в cd_routes.

Результат запроса

[
{
...
"result": {
"records": [
{
"fn_type": 1 // (1)
}
],
"total": 1
},
...
"method": "Query",
"action": "cd_routes", // (2)
"rpcTime": 17
}
]

В результате мы видим, что колонка fn_type доступна в результате запроса (1) и имя action заменено на cd_routes.

Print Friendly, PDF & Email