|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Delphi + FireDAC + Postgres
Всем привет!
Возникла проблема с использованием запросов в TFDQuery. Когда имя таблицы содержит два символа '$', то TFDQuery не отображает список параметров в запросе. Вот пример (таблица vdata."wares$rules$link"). Если использовать макросы по подмене текста, то работает. Но не хочется такие элементарные вещи оборачивать через макросы. Код:
with tjWLL as (select wrl.fldidxwarerule as fldidxwarerule, json_agg(wll.*) as "WARESRULESLINKS" from vdata."wares$rules" wrl inner join vdata."wares$rules$link" wll on (wrl.fldidxwarerule = wll.fldidxwarerule) where (wll.fldidxwarerule = any(:fldidxwarerule) or (case when :fldidxwarerule = '{}' then True else False end)) and :IsWLL group by wrl.fldidxwarerule ), tjWRL as (select wrl.*, wll."WARESRULESLINKS" from vdata."wares$rules" wrl left join tjWLL wll on (wrl.fldidxwarerule = wll.fldidxwarerule) where wrl.fldidxwarerule = any(:fldidxwarerule) or case when :fldidxwarerule = '{}' then True else False end ) select json_build_object('WARESRULES', to_json(tjWRL)) as "WARESRULES" from tjWRL P.S. Переименовывать таблицы - уже поздно, живой проект. |
#2
|
|||
|
|||
Видимо, какая-то специфика парсинга запроса.
Варианты обхода: 1. Создать параметры "руками". 2. Создать вью, а уже из нее селектить с параметрами. |
#3
|
|||
|
|||
Цитата:
1. Даже при ручном создании - ругается 2. Ой как не люблю вьюшки, но наверное придется. Спасибо! P.S. Может кто-то еще предложит варианты |
#4
|
|||
|
|||
А проверь-ка на простом запросе, что такая реакция именно на 2 и более символов '$' в имени таблицы. А то есть еще подозрение, что тут скорее на использование одного и того же параметра несколько раз.
ЗЫ. Ну и сами запросы, как мне кажется, можно упростить. Для начала, можно избавиться от case'ов. Они, как мне кажется, просто не нужны. Код:
case when :value = '{}' then true else false end Код:
:value = '{}' Код:
any(:value) Если только ты не пихаешь в параметр запрос в текстовом виде, но такое тоже не должно работать. |