Недавно в голове появились мысли, собрать в кучу все (хоть и небольшие) знания по SOQL и написать API для построения запросов на основе объектной модели (на подобии LINQ в .net), как вдруг - наткнулся на ссылку http://code.google.com/p/apex-lang/. Оказывается некий Richard уже давно всё придумал и реализовал (2010 год). Только посмотрите:
всем привычный SOQL
SELECT name FROM account WHERE employees < 10
SOQL Builder
new al.SoqlBuilder()
.selectx('name')
.fromx('account')
.wherex(new al.FieldCondition('employees').lessThan(10))
.toSoql();
по моему это прекрасно)
Пусть для небольших запросов это накладно, но для запросов с динамическими условиям это просто чудо (можно динамически строить сколь угодно сложные условия и не сидеть часами в отладке по причине забытой скобки, кавычки, экранизации и др.)
Вот ссылка на статью блога автора, где он показывает достоинства SOQL Builder http://richardvanhook.com/2010/04/11/soql-builder/.
Ко всему прочему его "библиотека" содержит кучу полезных классов по работе с массивами, стандартными типами данных, email, json, page, url и др. Автор предлагает свой вариант пагинации данных http://richardvanhook.com/2009/08/03/visualforce-pagination-with-apex-lang/
ссылка на последнюю версию http://apex-lang.googlecode.com/files/apex-lang-1.18.zip
Может кто-нибудь уже пользовался его наработками, делитесь впечатлениями.
Интересно.
я думал, что LINQ со своим SQL-подобным декларативным синтаксисом тем и хорош, что позволяет кверить объекты как SQL.
Был рад, когда увидел синтаксис SOQL.
а теперь выясняется, то более традиционный синтаксис с последовательным вызовом методов дает большие преимущества...
нужно будет более внимательно это изучить.
Если вы говорите об этом, значит никогда не пользовались workbench )
Ну а само решение оччень полезное)
Присоединяюсь! Очень интересная информация. Неприменно воспользуюсь в работе!
Спасибо!
Был один проект, который использовал эту библиотеку. Лично мне эта библиотека не очень понравилась. Включает эта библиотека более 30 классов. И если вам в проекте нужно делать только простые селекты или селект в селекте это уж больно громоздко. Но каждый выбирает сам. Да и не делает эта библиотека ровным счетом ничего не возможного, что я не могу сделать руками.