Страница 1 из 1

exim и формат condition в разделе router

Добавлено: 2010-09-29 10:32:15
skeletor
Собственно сам router:

Код: Выделить всё

ditch_hdrmailer:
  driver = redirect
  allow_fail
  data = :blackhole:
  condition = ${if eq {${lookup mysql{select count(*) from blocklists,users,domains \
                        where blocklists.blockhdr = 'x-mailer' \
                        and blocklists.blockval = '${quote_mysql:$h_x-mailer:}' \
                        and users.localpart = '${quote_mysql:$local_part}' \
                        and domains.domain = '${quote_mysql:$domain}' \
                        and domains.domain_id=blocklists.domain_id \
                        and users.user_id=blocklists.user_id}}}{1} {yes}{no}}
  local_part_suffix = -*
  local_part_suffix_optional
  retry_use_local_part
Хочу немного изменить условие

Код: Выделить всё

and blocklists.blockval = '${quote_mysql:$h_x-mailer:}'
вместо равно поставить что-то наподобие like из mysql (типа совпадение по подстроке). Как это правильно сделать? Да и вообще какие операции, кроме равно можно использовать в это куске?

Re: exim и формат condition в разделе router

Добавлено: 2010-09-29 11:59:01
Laa
дык у тебя и так sql запрос, в нем и делай like.

Re: exim и формат condition в разделе router

Добавлено: 2010-09-29 12:36:16
skeletor
Спасибо. Заработало вот так:

Код: Выделить всё

'${quote_mysql:$h_x-mailer:}' like concat('%',blocklists.blockval,'%')

Re: exim и формат condition в разделе router

Добавлено: 2010-09-29 12:56:36
skeletor
Ну и ещё один вариант

Код: Выделить всё

blocklists.blockval RLIKE REPLACE('${quote_mysql:$h_x-mailer:}'," ","|")
Правда первый мне кажется будет выполняться быстрее, так как во втором регулярные выражения и ещё оператор replace. Второй вариант пригоден только для сравнения строк с пробелами.