Как можно полноценно работать с БД без JOIN'ов? :)
И не очень понял, как в библиотеке обстоят дела с HAVING, с IN (на который сейчас куда больше похож ваш BETWEEN), выборками через временные таблицы, функциями типа GROUP_CONCAT да и вообще различными агрегирующими функциями? С базо-специфичными моментами типа TOP/LIMIT?
Ну и может я слишком олдскул/ретроград, но на мой взгляд чистый SQL куда читаемее, логичнее и понятнее. И проектировался как раз, чтобы быть простым и похожим на обычный английский язык.
> Как можно полноценно работать с БД без JOIN'ов? :)
Например, вызовом VIEW или PROCEDURE, где все это есть. :)
Вообще, да. С помощью QST полноценно с БД работать куда сложнее. Правда, мне пока нигде не понадобились JOIN'ы, IN'ы и HAVING'и (с GROUP BY'ями), поэтому их поддержки в библиотечке и нет. Но IN добавить элементарно, и, наверно, я внесу это в список самых ближайших изменений. Правильно, надо всего лишь в конструктор SqlField(QString, SqlValue, SqlValue, SqlFieldPurposes), отвечающий за BETWEEN, внести небольшие изменения, а именно еще один параметр между SqlValue и SqlFieldPurposes. И, разумеется, добавить новые функции в генератор. Получится что-то вроде этого:
А страшные слова, как GROUP_CONCAT, TOP/LIMIT пока в библиотечке не ожидаются. Хотя, пожалуй, TOP/LIMIT сделать несложно.
> Ну и может я слишком олдскул/ретроград, но на мой взгляд чистый SQL куда читаемее, логичнее и понятнее. И проектировался как раз, чтобы быть простым и похожим на обычный английский язык.
Хм, да нет, достоинств SQL я не отрицаю. Вот только не место чистому SQL в C++ коде. Я как-то насмотрелся на такое у себя на работе, и у меня теперь к подобному физическое отвращение. QST — она пока маленькая.
Надо сказать, что оптимизацией я еще не занимался, равно как и вылизыванием алгоритмов. Обязательно подумаю, как можно использовать statements вместо | вместе с имеющимися алгоритмами.
Вообще-то, понравился. Вещь нужная и полезная. Только он не умеет всего того, что умеет QST, я думаю. QSqlQuery::bindValue можно использовать лишь локально, для выполнения конкретной задачи. QST — это куда более высокая абстракция, и задачи у нее обширнее.
QST: QsT SQL Tools, инструментарий для Qt