// // ODBCPostgreSQLTest.cpp // // $Id: //poco/Main/Data/ODBC/testsuite/src/ODBCPostgreSQLTest.cpp#3 $ // // Copyright (c) 2006, Applied Informatics Software Engineering GmbH. // and Contributors. // // Permission is hereby granted, free of charge, to any person or organization // obtaining a copy of the software and accompanying documentation covered by // this license (the "Software") to use, reproduce, display, distribute, // execute, and transmit the Software, and to prepare derivative works of the // Software, and to permit third-parties to whom the Software is furnished to // do so, all subject to the following: // // The copyright notices in the Software and this entire statement, including // the above license grant, this restriction and the following disclaimer, // must be included in all copies of the Software, in whole or in part, and // all derivative works of the Software, unless such copies or derivative // works are solely in the form of machine-executable object code generated by // a source language processor. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. // #include "ODBCPostgreSQLTest.h" #include "CppUnit/TestCaller.h" #include "CppUnit/TestSuite.h" #include "Poco/String.h" #include "Poco/Format.h" #include "Poco/Exception.h" #include "Poco/Data/Common.h" #include "Poco/Data/BLOB.h" #include "Poco/Data/StatementImpl.h" #include "Poco/Data/ODBC/Connector.h" #include "Poco/Data/ODBC/Utility.h" #include "Poco/Data/ODBC/Diagnostics.h" #include "Poco/Data/ODBC/ODBCException.h" #include "Poco/Data/ODBC/ODBCStatementImpl.h" #include #include using namespace Poco::Data; using Poco::Data::ODBC::Utility; using Poco::Data::ODBC::ConnectionException; using Poco::Data::ODBC::StatementException; using Poco::Data::ODBC::StatementDiagnostics; using Poco::format; using Poco::NotFoundException; const bool ODBCPostgreSQLTest::bindValues[8] = {true, true, true, false, false, true, false, false}; Poco::SharedPtr ODBCPostgreSQLTest::_pSession = 0; Poco::SharedPtr ODBCPostgreSQLTest::_pExecutor = 0; std::string ODBCPostgreSQLTest::_dbConnString; Poco::Data::ODBC::Utility::DriverMap ODBCPostgreSQLTest::_drivers; ODBCPostgreSQLTest::ODBCPostgreSQLTest(const std::string& name): CppUnit::TestCase(name) { } ODBCPostgreSQLTest::~ODBCPostgreSQLTest() { } void ODBCPostgreSQLTest::testBareboneODBC() { if (!_pSession) fail ("Test not available."); std::string tableCreateString = "CREATE TABLE Test " "(First VARCHAR(30)," "Second VARCHAR(30)," "Third BYTEA," "Fourth INTEGER," "Fifth FLOAT)"; _pExecutor->bareboneODBCTest(_dbConnString, tableCreateString, SQLExecutor::PB_IMMEDIATE, SQLExecutor::DE_MANUAL); _pExecutor->bareboneODBCTest(_dbConnString, tableCreateString, SQLExecutor::PB_IMMEDIATE, SQLExecutor::DE_BOUND); _pExecutor->bareboneODBCTest(_dbConnString, tableCreateString, SQLExecutor::PB_AT_EXEC, SQLExecutor::DE_MANUAL); _pExecutor->bareboneODBCTest(_dbConnString, tableCreateString, SQLExecutor::PB_AT_EXEC, SQLExecutor::DE_BOUND); } void ODBCPostgreSQLTest::testSimpleAccess() { if (!_pSession) fail ("Test not available."); std::string tableName("Person"); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->simpleAccess(); i += 2; } } void ODBCPostgreSQLTest::testComplexType() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->complexType(); i += 2; } } void ODBCPostgreSQLTest::testSimpleAccessVector() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->simpleAccessVector(); i += 2; } } void ODBCPostgreSQLTest::testComplexTypeVector() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->complexTypeVector(); i += 2; } } void ODBCPostgreSQLTest::testInsertVector() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreateStringsTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->insertVector(); i += 2; } } void ODBCPostgreSQLTest::testInsertEmptyVector() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreateStringsTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->insertEmptyVector(); i += 2; } } void ODBCPostgreSQLTest::testInsertSingleBulk() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreateIntsTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->insertSingleBulk(); i += 2; } } void ODBCPostgreSQLTest::testInsertSingleBulkVec() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreateIntsTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->insertSingleBulkVec(); i += 2; } } void ODBCPostgreSQLTest::testLimit() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreateIntsTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->limits(); i += 2; } } void ODBCPostgreSQLTest::testLimitZero() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreateIntsTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->limitZero(); i += 2; } } void ODBCPostgreSQLTest::testLimitOnce() { if (!_pSession) fail ("Test not available."); recreateIntsTable(); _pExecutor->limitOnce(); } void ODBCPostgreSQLTest::testLimitPrepare() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreateIntsTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->limitPrepare(); i += 2; } } void ODBCPostgreSQLTest::testPrepare() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreateIntsTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->prepare(); i += 2; } } void ODBCPostgreSQLTest::testSetSimple() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->setSimple(); i += 2; } } void ODBCPostgreSQLTest::testSetComplex() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->setComplex(); i += 2; } } void ODBCPostgreSQLTest::testSetComplexUnique() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->setComplexUnique(); i += 2; } } void ODBCPostgreSQLTest::testMultiSetSimple() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->multiSetSimple(); i += 2; } } void ODBCPostgreSQLTest::testMultiSetComplex() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->multiSetComplex(); i += 2; } } void ODBCPostgreSQLTest::testMapComplex() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->mapComplex(); i += 2; } } void ODBCPostgreSQLTest::testMapComplexUnique() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->mapComplexUnique(); i += 2; } } void ODBCPostgreSQLTest::testMultiMapComplex() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->multiMapComplex(); i += 2; } } void ODBCPostgreSQLTest::testSelectIntoSingle() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->selectIntoSingle(); i += 2; } } void ODBCPostgreSQLTest::testSelectIntoSingleStep() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->selectIntoSingleStep(); i += 2; } } void ODBCPostgreSQLTest::testSelectIntoSingleFail() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->selectIntoSingleFail(); i += 2; } } void ODBCPostgreSQLTest::testLowerLimitOk() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->lowerLimitOk(); i += 2; } } void ODBCPostgreSQLTest::testSingleSelect() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->singleSelect(); i += 2; } } void ODBCPostgreSQLTest::testLowerLimitFail() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->lowerLimitFail(); i += 2; } } void ODBCPostgreSQLTest::testCombinedLimits() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->combinedLimits(); i += 2; } } void ODBCPostgreSQLTest::testRange() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->ranges(); i += 2; } } void ODBCPostgreSQLTest::testCombinedIllegalLimits() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->combinedIllegalLimits(); i += 2; } } void ODBCPostgreSQLTest::testIllegalRange() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->illegalRange(); i += 2; } } void ODBCPostgreSQLTest::testEmptyDB() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->emptyDB(); i += 2; } } void ODBCPostgreSQLTest::testBLOB() { if (!_pSession) fail ("Test not available."); const std::size_t maxFldSize = 1000000; _pSession->setProperty("maxFieldSize", Poco::Any(maxFldSize-1)); recreatePersonBLOBTable(); try { _pExecutor->blob(maxFldSize); fail ("must fail"); } catch (DataException&) { _pSession->setProperty("maxFieldSize", Poco::Any(maxFldSize)); } for (int i = 0; i < 8;) { recreatePersonBLOBTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->blob(1000000); i += 2; } } void ODBCPostgreSQLTest::testBLOBStmt() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreatePersonBLOBTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->blobStmt(); i += 2; } } void ODBCPostgreSQLTest::testFloat() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreateFloatsTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->floats(); i += 2; } } void ODBCPostgreSQLTest::testDouble() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreateFloatsTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->doubles(); i += 2; } } void ODBCPostgreSQLTest::testTuple() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreateTuplesTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->tuples(); i += 2; } } void ODBCPostgreSQLTest::testTupleVector() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreateTuplesTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->tupleVector(); i += 2; } } void ODBCPostgreSQLTest::testInternalExtraction() { if (!_pSession) fail ("Test not available."); for (int i = 0; i < 8;) { recreateVectorsTable(); _pSession->setFeature("autoBind", bindValues[i]); _pSession->setFeature("autoExtract", bindValues[i+1]); _pExecutor->internalExtraction(); i += 2; } } void ODBCPostgreSQLTest::dropTable(const std::string& tableName) { try { *_pSession << format("DROP TABLE %s", tableName), now; } catch (StatementException& ex) { bool ignoreError = false; const StatementDiagnostics::FieldVec& flds = ex.diagnostics().fields(); StatementDiagnostics::Iterator it = flds.begin(); for (; it != flds.end(); ++it) { if (7 == it->_nativeError)//(table does not exist) { ignoreError = true; break; } } if (!ignoreError) throw; } } void ODBCPostgreSQLTest::recreatePersonTable() { dropTable("Person"); try { *_pSession << "CREATE TABLE Person (LastName VARCHAR(30), FirstName VARCHAR(30), Address VARCHAR(30), Age INTEGER)", now; } catch(ConnectionException& ce){ std::cout << ce.toString() << std::endl; fail ("recreatePersonTable()"); } catch(StatementException& se){ std::cout << se.toString() << std::endl; fail ("recreatePersonTable()"); } } void ODBCPostgreSQLTest::recreatePersonBLOBTable() { dropTable("Person"); try { *_pSession << "CREATE TABLE Person (LastName VARCHAR(30), FirstName VARCHAR(30), Address VARCHAR(30), Image BYTEA)", now; } catch(ConnectionException& ce){ std::cout << ce.toString() << std::endl; fail ("recreatePersonBLOBTable()"); } catch(StatementException& se){ std::cout << se.toString() << std::endl; fail ("recreatePersonBLOBTable()"); } } void ODBCPostgreSQLTest::recreateIntsTable() { dropTable("Strings"); try { *_pSession << "CREATE TABLE Strings (str INTEGER)", now; } catch(ConnectionException& ce){ std::cout << ce.toString() << std::endl; fail ("recreateIntsTable()"); } catch(StatementException& se){ std::cout << se.toString() << std::endl; fail ("recreateIntsTable()"); } } void ODBCPostgreSQLTest::recreateStringsTable() { dropTable("Strings"); try { *_pSession << "CREATE TABLE Strings (str VARCHAR(30))", now; } catch(ConnectionException& ce){ std::cout << ce.toString() << std::endl; fail ("recreateStringsTable()"); } catch(StatementException& se){ std::cout << se.toString() << std::endl; fail ("recreateStringsTable()"); } } void ODBCPostgreSQLTest::recreateFloatsTable() { dropTable("Strings"); try { *_pSession << "CREATE TABLE Strings (str FLOAT)", now; } catch(ConnectionException& ce){ std::cout << ce.toString() << std::endl; fail ("recreateFloatsTable()"); } catch(StatementException& se){ std::cout << se.toString() << std::endl; fail ("recreateFloatsTable()"); } } void ODBCPostgreSQLTest::recreateTuplesTable() { dropTable("Tuples"); try { *_pSession << "CREATE TABLE Tuples " "(int0 INTEGER, int1 INTEGER, int2 INTEGER, int3 INTEGER, int4 INTEGER, int5 INTEGER, int6 INTEGER, " "int7 INTEGER, int8 INTEGER, int9 INTEGER, int10 INTEGER, int11 INTEGER, int12 INTEGER, int13 INTEGER," "int14 INTEGER, int15 INTEGER, int16 INTEGER, int17 INTEGER, int18 INTEGER, int19 INTEGER)", now; } catch(ConnectionException& ce){ std::cout << ce.toString() << std::endl; fail ("recreateTuplesTable()"); } catch(StatementException& se){ std::cout << se.toString() << std::endl; fail ("recreateTuplesTable()"); } } void ODBCPostgreSQLTest::recreateVectorsTable() { dropTable("Vectors"); try { *_pSession << "CREATE TABLE Vectors (int0 INTEGER, flt0 FLOAT, str0 VARCHAR(30))", now; } catch(ConnectionException& ce){ std::cout << ce.toString() << std::endl; fail ("recreateVectorsTable()"); } catch(StatementException& se){ std::cout << se.toString() << std::endl; fail ("recreateVectorsTable()"); } } bool ODBCPostgreSQLTest::checkODBCSetup(const std::string& dbName) { Utility::DriverMap::iterator itDrv = _drivers.begin(); for (; itDrv != _drivers.end(); ++itDrv) { if (((itDrv->first).find(dbName) != std::string::npos)) { std::cout << "Driver found: " << itDrv->first << " (" << itDrv->second << ')' << std::endl; break; } } if (_drivers.end() == itDrv) { std::cout << dbName << " driver NOT found, tests not available." << std::endl; return false; } _dbConnString = "DRIVER=PostgreSQL ANSI;" "DATABASE=postgres;" "SERVER=localhost;" "PORT=5432;" "UID=postgres;" "PWD=postgres;" "SSLMODE=prefer;" "LowerCaseIdentifier=0;" "UseServerSidePrepare=0;" "ByteaAsLongVarBinary=1;" "BI=0;" "TrueIsMinus1=0;" "DisallowPremature=0;" "UpdatableCursors=0;" "LFConversion=1;" "CancelAsFreeStmt=0;" "Parse=0;" "BoolsAsChar=1;" "UnknownsAsLongVarchar=0;" "TextAsLongVarchar=1;" "UseDeclareFetch=0;" "Ksqo=1;" "Optimizer=1;" "CommLog=0;" "Debug=0;" "MaxLongVarcharSize=8190;" "MaxVarcharSize=254;" "UnknownSizes=0;" "Socket=8192;" "Fetch=100;" "ConnSettings=;" "ShowSystemTables=0;" "RowVersioning=0;" "ShowOidColumn=0;" "FakeOidIndex=0;" "ReadOnly=0;"; return true; } void ODBCPostgreSQLTest::setUp() { } void ODBCPostgreSQLTest::tearDown() { dropTable("Person"); dropTable("Strings"); } bool ODBCPostgreSQLTest::init(const std::string& dbName) { Utility::drivers(_drivers); if (!checkODBCSetup()) return false; ODBC::Connector::registerConnector(); try { _pSession = new Session(ODBC::Connector::KEY, _dbConnString); }catch (ConnectionException& ex) { std::cout << ex.toString() << std::endl; return false; } if (_pSession && _pSession->isConnected()) std::cout << "*** Connected to " << dbName << " test database." << std::endl; _pExecutor = new SQLExecutor(dbName + " SQL Executor", _pSession); return true; } CppUnit::Test* ODBCPostgreSQLTest::suite() { if (init()) { CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ODBCPostgreSQLTest"); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testBareboneODBC); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testSimpleAccess); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testComplexType); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testSimpleAccessVector); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testComplexTypeVector); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testInsertVector); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testInsertEmptyVector); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testInsertSingleBulk); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testInsertSingleBulkVec); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testLimit); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testLimitOnce); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testLimitPrepare); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testLimitZero); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testPrepare); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testSetSimple); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testSetComplex); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testSetComplexUnique); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testMultiSetSimple); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testMultiSetComplex); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testMapComplex); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testMapComplexUnique); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testMultiMapComplex); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testSelectIntoSingle); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testSelectIntoSingleStep); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testSelectIntoSingleFail); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testLowerLimitOk); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testLowerLimitFail); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testCombinedLimits); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testCombinedIllegalLimits); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testRange); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testIllegalRange); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testSingleSelect); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testEmptyDB); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testBLOB); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testBLOBStmt); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testFloat); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testDouble); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testTuple); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testTupleVector); CppUnit_addTest(pSuite, ODBCPostgreSQLTest, testInternalExtraction); return pSuite; } return 0; }