Регистрация  |  Вход

Тонкая грань между обычным и динамическим соклом

Постоянно сталкиваюсь с такой задачей - нужно написать SOQL в котором в WHERE будет один или несколько фильтров по полям.
К примеру
[SELECT Id, Name FROM Contact WHERE AccountId = :accId]
Пока все выглядит просто!
Но задача услажнаяется - данный фильтр "AccountId = :accId" должен быть только в случае если accId не пустой. Если accId = NULL или accId = '' то запрос должен работать как
[SELECT Id, Name FROM Contact]
Сразу на ум приходит динамический SOQL, но тогда теряется вся прелесть компилятора так как запрос становится простой строкой которую потом скармливаем Database.query(q). Перестает работать автодополнение в IDE, компилятор не видит ошибок на этапе сохранения. Все падает в рантайме. Ну и еще много плюшек пропадает.

Может я что-то упускаю и есть простое решение в таких случаях?
Постоянно сталкиваюсь с такой задачей - нужно написать SOQL в котором в WHERE будет один или несколько фильтров по полям.
К примеру
[code][SELECT Id, Name FROM Contact WHERE AccountId = :accId][/code]
Пока все выглядит просто!
Но задача услажнаяется - данный фильтр "AccountId = :accId" должен быть только в случае если accId не пустой. Если accId = NULL или accId = '' то запрос должен работать как 
[code][SELECT Id, Name FROM Contact][/code]
Сразу на ум приходит динамический SOQL, но тогда теряется вся прелесть компилятора так как запрос становится простой строкой которую потом скармливаем Database.query(q). Перестает работать автодополнение в IDE, компилятор не видит ошибок на этапе сохранения. Все падает в рантайме. Ну и еще много плюшек пропадает.  

Может я что-то упускаю и есть простое решение в таких случаях?
Pattern Builder тебе в помощь, да это просто строка.
Pattern Builder тебе в помощь, да это просто строка.