linq2db/linq2db — pull request #116 by jack128 (2014-08-20 07:43:20+00:00)
Title: Firebird sql optimizer fix

Сори, что по русски пишу, но по английски я это описалово не осилю.

Проблема:
Для запросов типа такого:
db.GetTable().Any(x => x.Field == param);

должен генерится такой sql
```
select case
when exists(exists(select * from mytable t where t.Field = @param)) then 1
else 0
end from rdb$database
```
проблема в том, что Firebird sql optimizer инлайнит параметр. Для строк/чисел - это не проблема, но вот если мы хотим искать по блобу, то тут проблема есть, блобы же не могут быть литералами в sql.

Вообще логически обязательно нужно инлайнить только параметры между select и from, но НЕ в where/join и тд, так это требование самого FB(запросы типа select @param from rdb$database он не переваривает).
Фикс именно это и делает.

ЗЫ Any - по блобу - это не надуманная задача. в FB принято хранить гуиды в таком типе CHAR(16) CHARACTER SET OCTETS COLLATE OCTETS
чарсет OCTETS означает, что данные сервером воспринимают чисто как поток байт и программе эту колонку вообще говоря нужно как DataType.Blob помечать. Так что по факту это поиск не по блобу, а по гуиду.
ЗЫ2 Все тесты естественно проходят.