# HG changeset patch # User Tom Fredrik Blenning Klaussen # Date 1347574806 -7200 # Node ID 74be5a2f49dba73f6897c38fa87fc65d90ff3440 # Parent 7b7e84356b39295df031acd2cf7c2666a4bbcc1e Separate SQLGenerator into a separate header. diff -r 7b7e84356b39 -r 74be5a2f49db DBCache.hpp --- a/DBCache.hpp Fri Sep 14 00:04:24 2012 +0200 +++ b/DBCache.hpp Fri Sep 14 00:20:06 2012 +0200 @@ -2,6 +2,7 @@ #define DBCACHE_HPP #include "OrderedPair.hpp" +#include "SQLGenerator.hpp" #include "ThreadSafeLookup.hpp" #include "UniqueString.hpp" @@ -27,224 +28,6 @@ static void next() {} }; -template -struct SQLGenerator -{ -}; - -template<> -struct SQLGenerator -{ - static QString fieldName(const QString &prefix = QString()) - { - return QString("%1_Int").arg(prefix); - } - - static QString createFields(const QString &prefix = QString()) - { - return QString("%1 INTEGER").arg(fieldName(prefix)); - } - - static QString valueString(const QString &prefix = QString()) - { - return QString(":") + fieldName(prefix); - } - - static void bindValue(QSqlQuery& query, int value, const QString& prefix = QString()) - { - query.bindValue(valueString(prefix), value); - } - - static void bindValues(QSqlQuery& query, const QVariantList& values, const QString& prefix = QString()) - { - query.bindValue(valueString(prefix), values); - } - - static void bindValues(QSqlQuery& query, const QList& values, const QString& prefix = QString()) - { - QVariantList list; - foreach(int value, values) { - list << value; - } - bindValues(query, list, prefix); - } - - static boost::optional extract(QSqlQuery& query, const QString& prefix = QString()) - { - int fieldNo = query.record().indexOf(fieldName(prefix)); - if (query.at() >= 0) - return query.value(fieldNo).toInt(); - else - return boost::optional(); - } - -}; - -template<> -struct SQLGenerator -{ - static QString fieldName(const QString &prefix = QString()) - { - return QString("%1_QString").arg(prefix); - } - - static QString createFields(const QString &prefix = QString()) - { - return QString("%1 TEXT").arg(fieldName(prefix)); - } - - static QString valueString(const QString &prefix = QString()) - { - return QString(":") + fieldName(prefix); - } - - static QString restrict(const QString &prefix = QString()) - { - return QString("%1 = %2").arg(fieldName(prefix)).arg(valueString(prefix)); - } - - static void bindValue(QSqlQuery& query, const QString& value, const QString& prefix = QString()) - { - query.bindValue(valueString(prefix), value); - } - - static void bindValues(QSqlQuery& query, const QVariantList& value, const QString& prefix = QString()) - { - query.bindValue(valueString(prefix), value); - } - - static void bindValues(QSqlQuery& query, const QList& values, const QString& prefix = QString()) - { - QVariantList list; - foreach(const QString& value, values) { - list << value; - } - bindValues(query, list, prefix); - } - - static boost::optional extract(QSqlQuery& query, const QString& prefix = QString()) - { - int fieldNo = query.record().indexOf(fieldName(prefix)); - if (query.at() >= 0) - return query.value(fieldNo).toString(); - else - return boost::optional(); - } - - -}; - -template<> -struct SQLGenerator -{ - static QString fieldName(const QString &prefix = QString()) - { - return QString("%1_QString").arg(prefix); - } - - static QString createFields(const QString &prefix = QString()) - { - return QString("%1 TEXT").arg(fieldName(prefix)); - } - - static QString valueString(const QString &prefix = QString()) - { - return QString(":") + fieldName(prefix); - } - - static QString restrict(const QString &prefix = QString()) - { - return QString("%1 = %2").arg(fieldName(prefix)).arg(valueString(prefix)); - } - - static void bindValue(QSqlQuery& query, const QString& value, const QString& prefix = QString()) - { - query.bindValue(valueString(prefix), value); - } - - static void bindValues(QSqlQuery& query, const QVariantList& values, const QString& prefix = QString()) - { - query.bindValue(valueString(prefix), values); - } - - static void bindValues(QSqlQuery& query, const QList& values, const QString& prefix = QString()) - { - QVariantList list; - foreach(const UniqueString& value, values) { - list << static_cast(value); - } - bindValues(query, list, prefix); - } - - static boost::optional extract(QSqlQuery& query, const QString& prefix = QString()) - { - int fieldNo = query.record().indexOf(fieldName(prefix)); - if (query.at() >= 0) - return query.value(fieldNo).toString(); - else - return boost::optional(); - } - - -}; - -template -struct SQLGenerator > -{ - static QString fieldName(const QString &prefix = QString()) - { - return SQLGenerator::fieldName(prefix + "_1") + ", " + - SQLGenerator::fieldName(prefix + "_2"); - } - - static QString createFields(const QString &prefix = QString()) - { - return SQLGenerator::createFields(prefix + "_1") + ", " + - SQLGenerator::createFields(prefix + "_2"); - } - - static QString restriction(const QString& prefix = QString()) - { - return SQLGenerator::restrict(prefix + "_1") + " AND " + - SQLGenerator::restrict(prefix + "_2"); - } - - static QString valueString(const QString &prefix = QString()) - { - return SQLGenerator::valueString(prefix + "_1") + ", " + - SQLGenerator::valueString(prefix + "_2"); - } - - static void bindValue(QSqlQuery& query, const OrderedPair& value, const QString& prefix = QString()) - { - SQLGenerator::bindValue(query, value.first, prefix + "_1"); - SQLGenerator::bindValue(query, value.second, prefix + "_2"); - } - - static void bindValues(QSqlQuery& query, const QList >& values, const QString& prefix = QString()) - { - QList first; - QList second; - foreach(OrderedPair value, values) { - first << value.first; - second << value.second; - } - SQLGenerator::bindValues(query, first, prefix + "_1"); - SQLGenerator::bindValues(query, second, prefix + "_2"); - } - - static boost::optional > extract(QSqlQuery& query, const QString& prefix = QString()) - { - if (query.at() >= 0) - return OrderedPair (*SQLGenerator::extract(query, prefix + "_1"), - *SQLGenerator::extract(query, prefix + "_2")); - else - return boost::optional >(); - } - - -}; - template class DBCache { diff -r 7b7e84356b39 -r 74be5a2f49db SQLGenerator.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SQLGenerator.hpp Fri Sep 14 00:20:06 2012 +0200 @@ -0,0 +1,267 @@ +#ifndef SQLGENERATOR_HPP +#define SQLGENERATOR_HPP + +#include "OrderedPair.hpp" +#include "ThreadSafeLookup.hpp" +#include "UniqueString.hpp" + +#include "Exception/IOException.hpp" +#include "Exception/SQLException.hpp" + +#include +#include + +#include +#include +#include +#include + +#include + +#include + +template +struct SQLGenerator +{ +}; + +template<> +struct SQLGenerator +{ + static QString fieldName(const QString &prefix = QString()) + { + return QString("%1_Int").arg(prefix); + } + + static QString createFields(const QString &prefix = QString()) + { + return QString("%1 INTEGER").arg(fieldName(prefix)); + } + + static QString valueString(const QString &prefix = QString()) + { + return QString(":") + fieldName(prefix); + } + + static void bindValue(QSqlQuery& query, + int value, + const QString& prefix = QString()) + { + query.bindValue(valueString(prefix), value); + } + + static void bindValues(QSqlQuery& query, + const QVariantList& values, + const QString& prefix = QString()) + { + query.bindValue(valueString(prefix), values); + } + + static void bindValues(QSqlQuery& query, + const QList& values, + const QString& prefix = QString()) + { + QVariantList list; + foreach(int value, values) { + list << value; + } + bindValues(query, list, prefix); + } + + static boost::optional extract(QSqlQuery& query, + const QString& prefix = QString()) + { + int fieldNo = query.record().indexOf(fieldName(prefix)); + if (query.at() >= 0) + return query.value(fieldNo).toInt(); + else + return boost::optional(); + } + +}; + +template<> +struct SQLGenerator +{ + static QString fieldName(const QString &prefix = QString()) + { + return QString("%1_QString").arg(prefix); + } + + static QString createFields(const QString &prefix = QString()) + { + return QString("%1 TEXT").arg(fieldName(prefix)); + } + + static QString valueString(const QString &prefix = QString()) + { + return QString(":") + fieldName(prefix); + } + + static QString restrict(const QString &prefix = QString()) + { + return QString("%1 = %2").arg(fieldName(prefix)).arg(valueString(prefix)); + } + + static void bindValue(QSqlQuery& query, + const QString& value, + const QString& prefix = QString()) + { + query.bindValue(valueString(prefix), value); + } + + static void bindValues(QSqlQuery& query, + const QVariantList& value, + const QString& prefix = QString()) + { + query.bindValue(valueString(prefix), value); + } + + static void bindValues(QSqlQuery& query, + const QList& values, + const QString& prefix = QString()) + { + QVariantList list; + foreach(const QString& value, values) { + list << value; + } + bindValues(query, list, prefix); + } + + static boost::optional extract(QSqlQuery& query, + const QString& prefix = QString()) + { + int fieldNo = query.record().indexOf(fieldName(prefix)); + if (query.at() >= 0) + return query.value(fieldNo).toString(); + else + return boost::optional(); + } + + +}; + +template<> +struct SQLGenerator +{ + static QString fieldName(const QString &prefix = QString()) + { + return QString("%1_QString").arg(prefix); + } + + static QString createFields(const QString &prefix = QString()) + { + return QString("%1 TEXT").arg(fieldName(prefix)); + } + + static QString valueString(const QString &prefix = QString()) + { + return QString(":") + fieldName(prefix); + } + + static QString restrict(const QString &prefix = QString()) + { + return QString("%1 = %2").arg(fieldName(prefix)).arg(valueString(prefix)); + } + + static void bindValue(QSqlQuery& query, + const QString& value, + const QString& prefix = QString()) + { + query.bindValue(valueString(prefix), value); + } + + static void bindValues(QSqlQuery& query, + const QVariantList& values, + const QString& prefix = QString()) + { + query.bindValue(valueString(prefix), values); + } + + static void bindValues(QSqlQuery& query, + const QList& values, + const QString& prefix = QString()) + { + QVariantList list; + foreach(const UniqueString& value, values) { + list << static_cast(value); + } + bindValues(query, list, prefix); + } + + static boost::optional extract(QSqlQuery& query, + const QString& prefix = QString()) + { + int fieldNo = query.record().indexOf(fieldName(prefix)); + if (query.at() >= 0) + return query.value(fieldNo).toString(); + else + return boost::optional(); + } + + +}; + +template +struct SQLGenerator > +{ + static QString fieldName(const QString &prefix = QString()) + { + return SQLGenerator::fieldName(prefix + "_1") + ", " + + SQLGenerator::fieldName(prefix + "_2"); + } + + static QString createFields(const QString &prefix = QString()) + { + return SQLGenerator::createFields(prefix + "_1") + ", " + + SQLGenerator::createFields(prefix + "_2"); + } + + static QString restriction(const QString& prefix = QString()) + { + return SQLGenerator::restrict(prefix + "_1") + " AND " + + SQLGenerator::restrict(prefix + "_2"); + } + + static QString valueString(const QString &prefix = QString()) + { + return SQLGenerator::valueString(prefix + "_1") + ", " + + SQLGenerator::valueString(prefix + "_2"); + } + + static void bindValue(QSqlQuery& query, + const OrderedPair& value, + const QString& prefix = QString()) + { + SQLGenerator::bindValue(query, value.first, prefix + "_1"); + SQLGenerator::bindValue(query, value.second, prefix + "_2"); + } + + static void bindValues(QSqlQuery& query, + const QList >& values, + const QString& prefix = QString()) + { + QList first; + QList second; + foreach(OrderedPair value, values) { + first << value.first; + second << value.second; + } + SQLGenerator::bindValues(query, first, prefix + "_1"); + SQLGenerator::bindValues(query, second, prefix + "_2"); + } + + static boost::optional > + extract(QSqlQuery& query, + const QString& prefix = QString()) + { + if (query.at() >= 0) + return OrderedPair (*SQLGenerator::extract(query, prefix + "_1"), + *SQLGenerator::extract(query, prefix + "_2")); + else + return boost::optional >(); + } +}; + + +#endif //SQLGENERATOR_HPP