В нашем текущем проекте нам нужен высокоуровневый DBI для разных баз данных.Он должен обеспечивать следующие функции:
- в кэш-памяти - DBI должен иметь возможность кэшировать все чтения и обновлять кэш при записи вызовов (приложение, на котором мы кодируем)является многопоточным и требует быстрого доступа к текущим данным все время).Кэш памяти будет основан на
boost::multi_index
- автоматическом построении sql - Мы не хотим анализировать оператор sql для поиска в кэше памяти
Поскольку нам нужно предоставить функции для: определения макета таблицы, выбора, вставки, обновления, объединения, ..., интерфейс станет очень сложным.
Нам нужен хороший способ вызватьинтерфейсная функция.
Существует множество стилей, но мы не смогли найти ни одного полезного для нашего использования.
Вот несколько примеров:
SOCI
sql << "select name, salary from persons where id = " << id, into(name), into(salary);
Нам не нужны некоторые операторы SQL, поэтому нам придется определять what
и from
по-другому.
pqxx
Conn.prepare("select_salary",
"select name, salary from persons where id = $1")
((string)"integer",prepare::treat_direct);
Интенсивное использование перегруженного operator()
просто уродливо, но оно может работать и у нас.
Есть предложения, как проектировать интерфейс?