Mercurial > dedupe
view TestSQLGenerator.cpp @ 76:8136057988bc
Fixes to automatic report generating system.
A lot of new unittests.
| author | Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no> |
|---|---|
| date | Sat, 16 Feb 2013 15:32:20 +0100 |
| parents | |
| children | 9744ec195be3 |
line wrap: on
line source
#include "SQLGenerator.hpp" #include "TestFramework.hpp" #include "TestDataBase.hpp" #include "Exception/SQLException.hpp" BOOST_AUTO_TEST_CASE( CreateInsertAndRetrieveQString ) { TestDatabase tdb; QSqlDatabase db = tdb.getDatabase(); QSqlQuery query(db); QString tableName = "test"; QString fieldCreateString1 = SQLGenerator<QString>::createFields("value1"); QString fieldCreateString2 = SQLGenerator<QString>::createFields("value2"); QString createQuery = QString("CREATE TABLE %1(%2, %3);") .arg(tableName) .arg(fieldCreateString1) .arg(fieldCreateString2); BOOST_REQUIRE(query.exec(createQuery)); QString queryString = QString("INSERT into %1 (%2, %3) VALUES(%4, %5);") .arg(tableName) .arg(SQLGenerator<QString>::fieldName("value1")) .arg(SQLGenerator<QString>::fieldName("value2")) .arg(SQLGenerator<QString>::valueString("value1")) .arg(SQLGenerator<QString>::valueString("value2")); QSqlQuery insertQuery = QSqlQuery(db); BOOST_REQUIRE(insertQuery.prepare(queryString)); QList<QString> valueList1, valueList2; for (int i = 1; i <= 3; ++i) { valueList1 << QString("a%1").arg(i); valueList2 << QString("b%1").arg(i); } SQLGenerator<QString>::bindValues(insertQuery, valueList1, "value1"); SQLGenerator<QString>::bindValues(insertQuery, valueList2, "value2"); BOOST_REQUIRE(insertQuery.execBatch()); insertQuery.finish(); QString fieldValueString1 = SQLGenerator<QString>::fieldName("value1"); QString fieldValueString2 = SQLGenerator<QString>::fieldName("value2"); QString selectQuery = QString("SELECT %1, %2 FROM %3;") .arg(fieldValueString1).arg(fieldValueString2).arg(tableName); BOOST_REQUIRE(query.exec(selectQuery)); while (query.next()) { QString value1 = *SQLGenerator<QString>::extract(query, "value1"); QString value2 = *SQLGenerator<QString>::extract(query, "value2"); BOOST_REQUIRE(valueList1.contains(value1)); BOOST_REQUIRE(valueList2.contains(value2)); valueList1.removeAt(valueList1.indexOf(value1)); valueList2.removeAt(valueList2.indexOf(value2)); } boost::optional<QString> empty1 = SQLGenerator<QString>::extract(query, "value1"); boost::optional<QString> empty2 = SQLGenerator<QString>::extract(query, "value2"); BOOST_REQUIRE(!empty1); BOOST_REQUIRE(!empty2); BOOST_REQUIRE(valueList1.empty()); BOOST_REQUIRE(valueList2.empty()); query.finish(); } BOOST_AUTO_TEST_CASE( CreateInsertAndRetrieveUniqueString ) { TestDatabase tdb; QSqlDatabase db = tdb.getDatabase(); QSqlQuery query(db); QString tableName = "test"; QString fieldCreateString1 = SQLGenerator<UniqueString>::createFields("value1"); QString fieldCreateString2 = SQLGenerator<UniqueString>::createFields("value2"); QString createQuery = QString("CREATE TABLE %1(%2, %3);") .arg(tableName) .arg(fieldCreateString1) .arg(fieldCreateString2); BOOST_REQUIRE(query.exec(createQuery)); QString queryString = QString("INSERT into %1 (%2, %3) VALUES(%4, %5);") .arg(tableName) .arg(SQLGenerator<UniqueString>::fieldName("value1")) .arg(SQLGenerator<UniqueString>::fieldName("value2")) .arg(SQLGenerator<UniqueString>::valueString("value1")) .arg(SQLGenerator<UniqueString>::valueString("value2")); QSqlQuery insertQuery = QSqlQuery(db); BOOST_REQUIRE(insertQuery.prepare(queryString)); QList<UniqueString> valueList1, valueList2; for (int i = 1; i <= 3; ++i) { valueList1 << QString("a%1").arg(i); valueList2 << QString("b%1").arg(i); } SQLGenerator<UniqueString>::bindValues(insertQuery, valueList1, "value1"); SQLGenerator<UniqueString>::bindValues(insertQuery, valueList2, "value2"); BOOST_REQUIRE(insertQuery.execBatch()); insertQuery.finish(); QString fieldValueString1 = SQLGenerator<UniqueString>::fieldName("value1"); QString fieldValueString2 = SQLGenerator<UniqueString>::fieldName("value2"); QString selectQuery = QString("SELECT %1, %2 FROM %3;") .arg(fieldValueString1).arg(fieldValueString2).arg(tableName); BOOST_REQUIRE(query.exec(selectQuery)); while (query.next()) { UniqueString value1 = *SQLGenerator<UniqueString>::extract(query, "value1"); UniqueString value2 = *SQLGenerator<UniqueString>::extract(query, "value2"); BOOST_REQUIRE(valueList1.contains(value1)); BOOST_REQUIRE(valueList2.contains(value2)); valueList1.removeAt(valueList1.indexOf(value1)); valueList2.removeAt(valueList2.indexOf(value2)); } boost::optional<UniqueString> empty1 = SQLGenerator<UniqueString>::extract(query, "value1"); boost::optional<UniqueString> empty2 = SQLGenerator<UniqueString>::extract(query, "value2"); BOOST_REQUIRE(!empty1); BOOST_REQUIRE(!empty2); BOOST_REQUIRE(valueList1.empty()); BOOST_REQUIRE(valueList2.empty()); query.finish(); } BOOST_AUTO_TEST_CASE( CreateInsertAndRetrieveInt ) { TestDatabase tdb; QSqlDatabase db = tdb.getDatabase(); QSqlQuery query(db); QString tableName = "test"; QString fieldCreateString1 = SQLGenerator<int>::createFields("value1"); QString fieldCreateString2 = SQLGenerator<int>::createFields("value2"); QString createQuery = QString("CREATE TABLE %1(%2, %3);") .arg(tableName) .arg(fieldCreateString1) .arg(fieldCreateString2); BOOST_REQUIRE(query.exec(createQuery)); QString queryString = QString("INSERT into %1 (%2, %3) VALUES(%4, %5);") .arg(tableName) .arg(SQLGenerator<int>::fieldName("value1")) .arg(SQLGenerator<int>::fieldName("value2")) .arg(SQLGenerator<int>::valueString("value1")) .arg(SQLGenerator<int>::valueString("value2")); QSqlQuery insertQuery = QSqlQuery(db); BOOST_REQUIRE(insertQuery.prepare(queryString)); QList<int> valueList1, valueList2; int p1 = 2; int p2 = 3; int v1 = p1; int v2 = p2; for (int i = 1; i <= 3; ++i) { valueList1 << v1; valueList2 << v2; v1 *= p1; v2 *= p2; } SQLGenerator<int>::bindValues(insertQuery, valueList1, "value1"); SQLGenerator<int>::bindValues(insertQuery, valueList2, "value2"); BOOST_REQUIRE(insertQuery.execBatch()); insertQuery.finish(); QString fieldValueString1 = SQLGenerator<int>::fieldName("value1"); QString fieldValueString2 = SQLGenerator<int>::fieldName("value2"); QString selectQuery = QString("SELECT %1, %2 FROM %3;") .arg(fieldValueString1).arg(fieldValueString2).arg(tableName); BOOST_REQUIRE(query.exec(selectQuery)); while (query.next()) { int value1 = *SQLGenerator<int>::extract(query, "value1"); int value2 = *SQLGenerator<int>::extract(query, "value2"); BOOST_REQUIRE(valueList1.contains(value1)); BOOST_REQUIRE(valueList2.contains(value2)); valueList1.removeAt(valueList1.indexOf(value1)); valueList2.removeAt(valueList2.indexOf(value2)); } boost::optional<int> empty1 = SQLGenerator<int>::extract(query, "value1"); boost::optional<int> empty2 = SQLGenerator<int>::extract(query, "value2"); BOOST_REQUIRE(!empty1); BOOST_REQUIRE(!empty2); BOOST_REQUIRE(valueList1.empty()); BOOST_REQUIRE(valueList2.empty()); } BOOST_AUTO_TEST_CASE( CreateInsertAndRetrieveOrderedPair ) { TestDatabase tdb; QSqlDatabase db = tdb.getDatabase(); QSqlQuery query(db); QString tableName = "test"; QString fieldCreateString1 = SQLGenerator<OrderedPair<int> >::createFields("value1"); QString fieldCreateString2 = SQLGenerator<OrderedPair<int> >::createFields("value2"); QString createQuery = QString("CREATE TABLE %1(%2, %3);") .arg(tableName) .arg(fieldCreateString1) .arg(fieldCreateString2); BOOST_REQUIRE(query.exec(createQuery)); QString queryString = QString("INSERT into %1 (%2, %3) VALUES(%4, %5);") .arg(tableName) .arg(SQLGenerator<OrderedPair<int> >::fieldName("value1")) .arg(SQLGenerator<OrderedPair<int> >::fieldName("value2")) .arg(SQLGenerator<OrderedPair<int> >::valueString("value1")) .arg(SQLGenerator<OrderedPair<int> >::valueString("value2")); QSqlQuery insertQuery = QSqlQuery(db); BOOST_REQUIRE(insertQuery.prepare(queryString)); QList<OrderedPair<int> > valueList1, valueList2; int p [] = { 2, 3, 5, 7}; int v [] = { 2, 3, 5, 7}; for (int i = 1; i <= 3; ++i) { valueList1 << OrderedPair<int>(v[0], v[1]); valueList2 << OrderedPair<int>(v[2], v[3]); for (int i = 0; i < 4; ++i) v[i] *= p[i]; } SQLGenerator<OrderedPair<int> >::bindValues(insertQuery, valueList1, "value1"); SQLGenerator<OrderedPair<int> >::bindValues(insertQuery, valueList2, "value2"); BOOST_REQUIRE(insertQuery.execBatch()); insertQuery.finish(); QString fieldValueString1 = SQLGenerator<OrderedPair<int> >::fieldName("value1"); QString fieldValueString2 = SQLGenerator<OrderedPair<int> >::fieldName("value2"); QString selectQuery = QString("SELECT %1, %2 FROM %3;") .arg(fieldValueString1).arg(fieldValueString2).arg(tableName); BOOST_REQUIRE(query.exec(selectQuery)); while (query.next()) { OrderedPair<int> value1 = *SQLGenerator<OrderedPair<int> >::extract(query, "value1"); OrderedPair<int> value2 = *SQLGenerator<OrderedPair<int> >::extract(query, "value2"); BOOST_REQUIRE(valueList1.contains(value1)); BOOST_REQUIRE(valueList2.contains(value2)); valueList1.removeAt(valueList1.indexOf(value1)); valueList2.removeAt(valueList2.indexOf(value2)); } boost::optional<OrderedPair<int> > empty1 = SQLGenerator<OrderedPair<int> >::extract(query, "value1"); boost::optional<OrderedPair<int> > empty2 = SQLGenerator<OrderedPair<int> >::extract(query, "value2"); BOOST_REQUIRE(!empty1); BOOST_REQUIRE(!empty2); BOOST_REQUIRE(valueList1.empty()); BOOST_REQUIRE(valueList2.empty()); query.finish(); }
