Как вы декодируете GraphQL :: Schema :: UniqueWithinType в Postgres? - PullRequest
0 голосов
/ 02 октября 2019

Скажите, что кто-то злой хранил закодированный идентификатор в вашей базе данных, и вам нужно было его использовать. Пример:

Ruby:

GraphQL::Schema::UniqueWithinType.default_id_separator = '|'
relay_id = GraphQL::Schema::UniqueWithinType.encode('User', '123')
# "VXNlcnwxMjM="

Как мне получить 123 из VXNlcnwxMjM= в Postgres?

1 Ответ

0 голосов
/ 02 октября 2019

Ruby:

GraphQL::Schema::UniqueWithinType.default_id_separator = '|'
relay_id = GraphQL::Schema::UniqueWithinType.encode('User', '123')
# "VXNlcnwxMjM="
Base64.decode64(relay_id)
# "User|123"

Чтобы получить "123" из "VXNlcnwxMjM =" в Postgres SQL, вы можете сделать это ужасное шоу

select  
    substring(
        (decode('VXNlcnwxMjM=', 'base64')::text)
        from (char_length('User|') + 1)
        for (char_length(decode('VXNlcnwxMjM=', 'base64')::text) - char_length('User|'))
    )::int

Редактировать: поиграть с этим. ... на Postgres 9.6.5 вышеперечисленное работает ... но наш промежуточный сервер 10.5, и мне пришлось сделать это вместо этого (который также работает на 9.6.5)

select  
    substring(
        convert_from(decode('VXNlcnwxMjM=', 'base64'), 'UTF-8')
        from (char_length('User|') + 1)
        for (char_length(convert_from(decode('VXNlcnwxMjM=', 'base64'), 'UTF-8')) - char_length('User|'))
    )::int
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...