diff --git a/catalogue/CreateSchemaCmd.cpp b/catalogue/CreateSchemaCmd.cpp index cdd9e046160ba71f79b6b72524568f27e9899361..0a0aeb68fe26ba6c2be17bb179e0c6303fa13ec0 100644 --- a/catalogue/CreateSchemaCmd.cpp +++ b/catalogue/CreateSchemaCmd.cpp @@ -68,13 +68,13 @@ int CreateSchemaCmd::exceptionThrowingMain(const int argc, char *const *const ar case rdbms::Login::DBTYPE_SQLITE: { SqliteCatalogueSchema schema; - conn.executeNonQueries(schema.sql); + conn.executeNonQueries(schema.sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); } break; case rdbms::Login::DBTYPE_ORACLE: { OracleCatalogueSchema schema; - conn.executeNonQueries(schema.sql); + conn.executeNonQueries(schema.sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); } break; case rdbms::Login::DBTYPE_NONE: diff --git a/catalogue/OracleCatalogue.cpp b/catalogue/OracleCatalogue.cpp index 87ef8f4fec7fc9c2786d595314ae62b5eb01d084..dcf31f2f7fa48a6e1b7b0925fa71ec2463986b61 100644 --- a/catalogue/OracleCatalogue.cpp +++ b/catalogue/OracleCatalogue.cpp @@ -168,8 +168,8 @@ uint64_t OracleCatalogue::getNextArchiveFileId(rdbms::Conn &conn) { "ARCHIVE_FILE_ID_SEQ.NEXTVAL AS ARCHIVE_FILE_ID " "FROM " "DUAL"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); - auto rset = stmt.executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); if (!rset.next()) { throw exception::Exception(std::string("Result set is unexpectedly empty")); } @@ -193,8 +193,8 @@ uint64_t OracleCatalogue::getNextStorageClassId(rdbms::Conn &conn) { "STORAGE_CLASS_ID_SEQ.NEXTVAL AS STORAGE_CLASS_ID " "FROM " "DUAL"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); - auto rset = stmt.executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); if (!rset.next()) { throw exception::Exception(std::string("Result set is unexpectedly empty")); } @@ -249,9 +249,9 @@ common::dataStructures::Tape OracleCatalogue::selectTapeForUpdate(rdbms::Conn &c "WHERE " "VID = :VID " "FOR UPDATE"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":VID", vid); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); if (!rset.next()) { throw exception::Exception(std::string("The tape with VID " + vid + " does not exist")); } @@ -461,7 +461,7 @@ void OracleCatalogue::filesWrittenToTape(const std::set<TapeItemWrittenPointer> ":COPY_NB," ":CREATION_TIME," ":ARCHIVE_FILE_ID)"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); rdbms::wrapper::OcciStmt &occiStmt = dynamic_cast<rdbms::wrapper::OcciStmt &>(stmt.getStmt()); occiStmt.setColumn(tapeFileBatch.vid); occiStmt.setColumn(tapeFileBatch.fSeq); @@ -590,7 +590,7 @@ void OracleCatalogue::idempotentBatchInsertArchiveFiles(rdbms::Conn &conn, "WHERE " "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "STORAGE_CLASS_NAME = :STORAGE_CLASS_NAME"; - auto stmt = conn.createStmt(sql, autocommitMode); + auto stmt = conn.createStmt(sql); rdbms::wrapper::OcciStmt &occiStmt = dynamic_cast<rdbms::wrapper::OcciStmt &>(stmt.getStmt()); occiStmt->setBatchErrorMode(true); @@ -684,9 +684,9 @@ std::map<uint64_t, OracleCatalogue::FileSizeAndChecksum> OracleCatalogue::select "ARCHIVE_FILE " "INNER JOIN TEMP_TAPE_FILE_BATCH ON " "ARCHIVE_FILE.ARCHIVE_FILE_ID = TEMP_TAPE_FILE_BATCH.ARCHIVE_FILE_ID"; - auto stmt = conn.createStmt(sql, autocommitMode); + auto stmt = conn.createStmt(sql); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(autocommitMode); std::map<uint64_t, FileSizeAndChecksum> fileSizesAndChecksums; while (rset.next()) { @@ -744,7 +744,7 @@ void OracleCatalogue::insertTapeFileBatchIntoTempTable(rdbms::Conn &conn, "ARCHIVE_FILE_ID)" "VALUES(" ":ARCHIVE_FILE_ID)"; - auto stmt = conn.createStmt(sql, autocommitMode); + auto stmt = conn.createStmt(sql); rdbms::wrapper::OcciStmt &occiStmt = dynamic_cast<rdbms::wrapper::OcciStmt &>(stmt.getStmt()); occiStmt->setBatchErrorMode(false); diff --git a/catalogue/RdbmsArchiveFileItorImpl.cpp b/catalogue/RdbmsArchiveFileItorImpl.cpp index 8f4d7b34d70c0f2e7e322859650ae6333c6051d0..5460e8a5ec892ddee090ce7a02098ca89c6fee78 100644 --- a/catalogue/RdbmsArchiveFileItorImpl.cpp +++ b/catalogue/RdbmsArchiveFileItorImpl.cpp @@ -202,7 +202,7 @@ RdbmsArchiveFileItorImpl::RdbmsArchiveFileItorImpl( } auto conn = connPool.getConn(); - m_stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + m_stmt = conn.createStmt(sql); if(searchCriteria.archiveFileId) { m_stmt.bindUint64(":ARCHIVE_FILE_ID", searchCriteria.archiveFileId.value()); } @@ -233,7 +233,7 @@ RdbmsArchiveFileItorImpl::RdbmsArchiveFileItorImpl( if(searchCriteria.tapePool) { m_stmt.bindString(":TAPE_POOL_NAME", searchCriteria.tapePool.value()); } - m_rset = m_stmt.executeQuery(); + m_rset = m_stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); m_rsetIsEmpty = !m_rset.next(); } catch(exception::UserError &) { diff --git a/catalogue/RdbmsCatalogue.cpp b/catalogue/RdbmsCatalogue.cpp index 0bc692bc03dff73f9c946e3a55f0bbc7861f1df7..b3493db19748b3ac92d6a0e6f7d7c7634633c59b 100644 --- a/catalogue/RdbmsCatalogue.cpp +++ b/catalogue/RdbmsCatalogue.cpp @@ -123,7 +123,7 @@ void RdbmsCatalogue::createAdminUser( ":LAST_UPDATE_USER_NAME," ":LAST_UPDATE_HOST_NAME," ":LAST_UPDATE_TIME)"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":ADMIN_USER_NAME", username); @@ -137,7 +137,7 @@ void RdbmsCatalogue::createAdminUser( stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); } catch(exception::UserError &) { throw; } catch(exception::Exception &ex) { @@ -158,9 +158,9 @@ bool RdbmsCatalogue::adminUserExists(rdbms::Conn &conn, const std::string adminU "ADMIN_USER " "WHERE " "ADMIN_USER_NAME = :ADMIN_USER_NAME"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":ADMIN_USER_NAME", adminUsername); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); return rset.next(); } catch(exception::UserError &) { throw; @@ -177,9 +177,9 @@ void RdbmsCatalogue::deleteAdminUser(const std::string &username) { try { const char *const sql = "DELETE FROM ADMIN_USER WHERE ADMIN_USER_NAME = :ADMIN_USER_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":ADMIN_USER_NAME", username); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot delete admin-user ") + username + " because they do not exist"); @@ -216,8 +216,8 @@ std::list<common::dataStructures::AdminUser> RdbmsCatalogue::getAdminUsers() con "ORDER BY " "ADMIN_USER_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); - auto rset = stmt.executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); while (rset.next()) { common::dataStructures::AdminUser admin; @@ -266,13 +266,13 @@ void RdbmsCatalogue::modifyAdminUserComment(const common::dataStructures::Securi "WHERE " "ADMIN_USER_NAME = :ADMIN_USER_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":USER_COMMENT", comment); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":ADMIN_USER_NAME", username); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify admin user ") + username + " because they do not exist"); @@ -344,7 +344,7 @@ void RdbmsCatalogue::createStorageClass( ":LAST_UPDATE_USER_NAME," ":LAST_UPDATE_HOST_NAME," ":LAST_UPDATE_TIME)"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindUint64(":STORAGE_CLASS_ID", storageClassId); stmt.bindString(":DISK_INSTANCE_NAME", storageClass.diskInstance); @@ -361,7 +361,7 @@ void RdbmsCatalogue::createStorageClass( stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); } catch(exception::UserError &) { throw; } catch(exception::Exception &ex) { @@ -385,10 +385,10 @@ bool RdbmsCatalogue::storageClassExists(rdbms::Conn &conn, const std::string &di "WHERE " "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "STORAGE_CLASS_NAME = :STORAGE_CLASS_NAME"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":STORAGE_CLASS_NAME", storageClassName); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); return rset.next(); } catch(exception::UserError &) { throw; @@ -410,12 +410,12 @@ void RdbmsCatalogue::deleteStorageClass(const std::string &diskInstanceName, con "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "STORAGE_CLASS_NAME = :STORAGE_CLASS_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql,rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":STORAGE_CLASS_NAME", storageClassName); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot delete storage-class ") + diskInstanceName + ":" + storageClassName + " because it does not exist"); @@ -454,8 +454,8 @@ std::list<common::dataStructures::StorageClass> RdbmsCatalogue::getStorageClasse "ORDER BY " "DISK_INSTANCE_NAME, STORAGE_CLASS_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); - auto rset = stmt.executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); while (rset.next()) { common::dataStructures::StorageClass storageClass; @@ -499,14 +499,14 @@ void RdbmsCatalogue::modifyStorageClassNbCopies(const common::dataStructures::Se "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "STORAGE_CLASS_NAME = :STORAGE_CLASS_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindUint64(":NB_COPIES", nbCopies); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":DISK_INSTANCE_NAME", instanceName); stmt.bindString(":STORAGE_CLASS_NAME", name); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify storage class ") + instanceName + ":" + name + @@ -537,14 +537,14 @@ void RdbmsCatalogue::modifyStorageClassComment(const common::dataStructures::Sec "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "STORAGE_CLASS_NAME = :STORAGE_CLASS_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":USER_COMMENT", comment); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":DISK_INSTANCE_NAME", instanceName); stmt.bindString(":STORAGE_CLASS_NAME", name); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify storage class ") + instanceName + ":" + name + @@ -619,7 +619,7 @@ void RdbmsCatalogue::createTapePool( ":LAST_UPDATE_USER_NAME," ":LAST_UPDATE_HOST_NAME," ":LAST_UPDATE_TIME)"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":TAPE_POOL_NAME", name); stmt.bindString(":VO", vo); @@ -636,7 +636,7 @@ void RdbmsCatalogue::createTapePool( stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); } catch(exception::UserError &) { throw; } catch(exception::Exception &ex) { @@ -672,9 +672,9 @@ bool RdbmsCatalogue::tapePoolExists(rdbms::Conn &conn, const std::string &tapePo "TAPE_POOL " "WHERE " "TAPE_POOL_NAME = :TAPE_POOL_NAME"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":TAPE_POOL_NAME", tapePoolName); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); return rset.next(); } catch(exception::UserError &) { throw; @@ -696,9 +696,9 @@ bool RdbmsCatalogue::archiveFileIdExists(rdbms::Conn &conn, const uint64_t archi "ARCHIVE_FILE " "WHERE " "ARCHIVE_FILE_ID = :ARCHIVE_FILE_ID"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindUint64(":ARCHIVE_FILE_ID", archiveFileId); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); return rset.next(); } catch(exception::UserError &) { throw; @@ -723,10 +723,10 @@ bool RdbmsCatalogue::diskFileIdExists(rdbms::Conn &conn, const std::string &disk "WHERE " "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "DISK_FILE_ID = :DISK_FILE_ID"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":DISK_FILE_ID", diskFileId); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); return rset.next(); } catch(exception::UserError &) { throw; @@ -751,10 +751,10 @@ bool RdbmsCatalogue::diskFilePathExists(rdbms::Conn &conn, const std::string &di "WHERE " "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "DISK_FILE_PATH = :DISK_FILE_PATH"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":DISK_FILE_PATH", diskFilePath); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); return rset.next(); } catch(exception::UserError &) { throw; @@ -779,10 +779,10 @@ bool RdbmsCatalogue::diskFileUserExists(rdbms::Conn &conn, const std::string &di "WHERE " "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "DISK_FILE_USER = :DISK_FILE_USER"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":DISK_FILE_USER", diskFileUser); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); return rset.next(); } catch(exception::UserError &) { throw; @@ -807,10 +807,10 @@ bool RdbmsCatalogue::diskFileGroupExists(rdbms::Conn &conn, const std::string &d "WHERE " "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "DISK_FILE_GROUP = :DISK_FILE_GROUP"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":DISK_FILE_GROUP", diskFileGroup); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); return rset.next(); } catch(exception::UserError &) { throw; @@ -838,11 +838,11 @@ bool RdbmsCatalogue::archiveRouteExists(rdbms::Conn &conn, const std::string &di "STORAGE_CLASS.DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "STORAGE_CLASS.STORAGE_CLASS_NAME = :STORAGE_CLASS_NAME AND " "ARCHIVE_ROUTE.COPY_NB = :COPY_NB"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":STORAGE_CLASS_NAME", storageClassName); stmt.bindUint64(":COPY_NB", copyNb); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); return rset.next(); } catch(exception::UserError &) { throw; @@ -859,9 +859,9 @@ void RdbmsCatalogue::deleteTapePool(const std::string &name) { try { const char *const sql = "DELETE FROM TAPE_POOL WHERE TAPE_POOL_NAME = :TAPE_POOL_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":TAPE_POOL_NAME", name); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot delete tape-pool ") + name + " because it does not exist"); @@ -921,8 +921,8 @@ std::list<TapePool> RdbmsCatalogue::getTapePools() const { "TAPE_POOL_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); - auto rset = stmt.executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); while (rset.next()) { TapePool pool; @@ -979,13 +979,13 @@ void RdbmsCatalogue::modifyTapePoolVo(const common::dataStructures::SecurityIden "WHERE " "TAPE_POOL_NAME = :TAPE_POOL_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":VO", vo); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":TAPE_POOL_NAME", name); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify tape pool ") + name + " because it does not exist"); @@ -1019,13 +1019,13 @@ void RdbmsCatalogue::modifyTapePoolNbPartialTapes(const common::dataStructures:: "WHERE " "TAPE_POOL_NAME = :TAPE_POOL_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindUint64(":NB_PARTIAL_TAPES", nbPartialTapes); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":TAPE_POOL_NAME", name); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify tape pool ") + name + " because it does not exist"); @@ -1063,13 +1063,13 @@ void RdbmsCatalogue::modifyTapePoolComment(const common::dataStructures::Securit "WHERE " "TAPE_POOL_NAME = :TAPE_POOL_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":USER_COMMENT", comment); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":TAPE_POOL_NAME", name); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify tape pool ") + name + " because it does not exist"); @@ -1098,13 +1098,13 @@ void RdbmsCatalogue::setTapePoolEncryption(const common::dataStructures::Securit "WHERE " "TAPE_POOL_NAME = :TAPE_POOL_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindBool(":IS_ENCRYPTED", encryptionValue); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":TAPE_POOL_NAME", name); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify tape pool ") + name + " because it does not exist"); @@ -1203,7 +1203,7 @@ void RdbmsCatalogue::createArchiveRoute( "WHERE " "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "STORAGE_CLASS_NAME = :STORAGE_CLASS_NAME"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":STORAGE_CLASS_NAME", storageClassName); @@ -1220,7 +1220,7 @@ void RdbmsCatalogue::createArchiveRoute( stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); } catch(exception::UserError &) { throw; } catch(exception::Exception &ex) { @@ -1249,11 +1249,11 @@ void RdbmsCatalogue::deleteArchiveRoute(const std::string &diskInstanceName, con "STORAGE_CLASS_NAME = :STORAGE_CLASS_NAME) AND " "COPY_NB = :COPY_NB"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":STORAGE_CLASS_NAME", storageClassName); stmt.bindUint64(":COPY_NB", copyNb); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { exception::UserError ue; @@ -1298,8 +1298,8 @@ std::list<common::dataStructures::ArchiveRoute> RdbmsCatalogue::getArchiveRoutes "ORDER BY " "DISK_INSTANCE_NAME, STORAGE_CLASS_NAME, COPY_NB"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); - auto rset = stmt.executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); while (rset.next()) { common::dataStructures::ArchiveRoute route; @@ -1352,7 +1352,7 @@ void RdbmsCatalogue::modifyArchiveRouteTapePoolName(const common::dataStructures "STORAGE_CLASS_NAME = :STORAGE_CLASS_NAME) AND " "COPY_NB = :COPY_NB"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":TAPE_POOL_NAME", tapePoolName); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); @@ -1360,7 +1360,7 @@ void RdbmsCatalogue::modifyArchiveRouteTapePoolName(const common::dataStructures stmt.bindString(":DISK_INSTANCE_NAME", instanceName); stmt.bindString(":STORAGE_CLASS_NAME", storageClassName); stmt.bindUint64(":COPY_NB", copyNb); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { exception::UserError ue; @@ -1401,7 +1401,7 @@ void RdbmsCatalogue::modifyArchiveRouteComment(const common::dataStructures::Sec "STORAGE_CLASS_NAME = :STORAGE_CLASS_NAME) AND " "COPY_NB = :COPY_NB"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":USER_COMMENT", comment); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); @@ -1409,7 +1409,7 @@ void RdbmsCatalogue::modifyArchiveRouteComment(const common::dataStructures::Sec stmt.bindString(":DISK_INSTANCE_NAME", instanceName); stmt.bindString(":STORAGE_CLASS_NAME", storageClassName); stmt.bindUint64(":COPY_NB", copyNb); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { exception::UserError ue; @@ -1464,7 +1464,7 @@ void RdbmsCatalogue::createLogicalLibrary( ":LAST_UPDATE_USER_NAME," ":LAST_UPDATE_HOST_NAME," ":LAST_UPDATE_TIME)"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":LOGICAL_LIBRARY_NAME", name); @@ -1478,7 +1478,7 @@ void RdbmsCatalogue::createLogicalLibrary( stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); } catch(exception::UserError &) { throw; } catch(exception::Exception &ex) { @@ -1499,9 +1499,9 @@ bool RdbmsCatalogue::logicalLibraryExists(rdbms::Conn &conn, const std::string & "LOGICAL_LIBRARY " "WHERE " "LOGICAL_LIBRARY_NAME = :LOGICAL_LIBRARY_NAME"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":LOGICAL_LIBRARY_NAME", logicalLibraryName); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); return rset.next(); } catch(exception::UserError &) { throw; @@ -1518,9 +1518,9 @@ void RdbmsCatalogue::deleteLogicalLibrary(const std::string &name) { try { const char *const sql = "DELETE FROM LOGICAL_LIBRARY WHERE LOGICAL_LIBRARY_NAME = :LOGICAL_LIBRARY_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":LOGICAL_LIBRARY_NAME", name); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot delete logical-library ") + name + " because it does not exist"); @@ -1557,8 +1557,8 @@ std::list<common::dataStructures::LogicalLibrary> RdbmsCatalogue::getLogicalLibr "ORDER BY " "LOGICAL_LIBRARY_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); - auto rset = stmt.executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); while (rset.next()) { common::dataStructures::LogicalLibrary lib; @@ -1599,13 +1599,13 @@ void RdbmsCatalogue::modifyLogicalLibraryComment(const common::dataStructures::S "WHERE " "LOGICAL_LIBRARY_NAME = :LOGICAL_LIBRARY_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":USER_COMMENT", comment); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":LOGICAL_LIBRARY_NAME", name); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify logical library ") + name + " because it does not exist"); @@ -1705,7 +1705,7 @@ void RdbmsCatalogue::createTape( ":LAST_UPDATE_USER_NAME," ":LAST_UPDATE_HOST_NAME," ":LAST_UPDATE_TIME)"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":VID", vid); stmt.bindString(":LOGICAL_LIBRARY_NAME", logicalLibraryName); @@ -1726,7 +1726,7 @@ void RdbmsCatalogue::createTape( stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); } catch(exception::UserError &) { throw; } catch(exception::Exception &ex) { @@ -1762,9 +1762,9 @@ bool RdbmsCatalogue::tapeExists(rdbms::Conn &conn, const std::string &vid) const "TAPE " "WHERE " "VID = :VID"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":VID", vid); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); return rset.next(); } catch(exception::UserError &) { throw; @@ -1787,10 +1787,10 @@ void RdbmsCatalogue::deleteTape(const std::string &vid) { "VID = :DELETE_VID AND " "NOT EXISTS (SELECT VID FROM TAPE_FILE WHERE VID = :SELECT_VID)"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(delete_sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(delete_sql); stmt.bindString(":DELETE_VID", vid); stmt.bindString(":SELECT_VID", vid); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); // The delete statement will effect no rows and will not raise an error if // either the tape does not exist or if it still has tape files @@ -1913,7 +1913,7 @@ std::list<common::dataStructures::Tape> RdbmsCatalogue::getTapes(rdbms::Conn &co sql += " ORDER BY VID"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); if(searchCriteria.vid) stmt.bindString(":VID", searchCriteria.vid.value()); if(searchCriteria.logicalLibrary) stmt.bindString(":LOGICAL_LIBRARY_NAME", searchCriteria.logicalLibrary.value()); @@ -1923,7 +1923,7 @@ std::list<common::dataStructures::Tape> RdbmsCatalogue::getTapes(rdbms::Conn &co if(searchCriteria.full) stmt.bindBool(":IS_FULL", searchCriteria.full.value()); if(searchCriteria.lbp) stmt.bindBool(":LBP_IS_ON", searchCriteria.lbp.value()); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); while (rset.next()) { common::dataStructures::Tape tape; @@ -2016,7 +2016,7 @@ common::dataStructures::VidToTapeMap RdbmsCatalogue::getTapesByVid(const std::se } auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); { uint64_t vidNb = 1; @@ -2026,7 +2026,7 @@ common::dataStructures::VidToTapeMap RdbmsCatalogue::getTapesByVid(const std::se } } - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); while (rset.next()) { common::dataStructures::Tape tape; @@ -2110,9 +2110,9 @@ common::dataStructures::VidToTapeMap RdbmsCatalogue::getAllTapes() const { "TAPE"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); while (rset.next()) { common::dataStructures::Tape tape; @@ -2170,13 +2170,13 @@ void RdbmsCatalogue::reclaimTape(const common::dataStructures::SecurityIdentity "IS_FULL != 0 AND " "NOT EXISTS (SELECT VID FROM TAPE_FILE WHERE VID = :SELECT_VID)"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":UPDATE_VID", vid); stmt.bindString(":SELECT_VID", vid); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); // If the update failed due to a user error if(0 == stmt.getNbAffectedRows()) { @@ -2262,13 +2262,13 @@ void RdbmsCatalogue::modifyTapeLogicalLibraryName(const common::dataStructures:: "WHERE " "VID = :VID"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":LOGICAL_LIBRARY_NAME", logicalLibraryName); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":VID", vid); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify tape ") + vid + " because it does not exist"); @@ -2297,13 +2297,13 @@ void RdbmsCatalogue::modifyTapeTapePoolName(const common::dataStructures::Securi "WHERE " "VID = :VID"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":TAPE_POOL_NAME", tapePoolName); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":VID", vid); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify tape ") + vid + " because it does not exist"); @@ -2332,13 +2332,13 @@ void RdbmsCatalogue::modifyTapeCapacityInBytes(const common::dataStructures::Sec "WHERE " "VID = :VID"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindUint64(":CAPACITY_IN_BYTES", capacityInBytes); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":VID", vid); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify tape ") + vid + " because it does not exist"); @@ -2367,13 +2367,13 @@ void RdbmsCatalogue::modifyTapeEncryptionKey(const common::dataStructures::Secur "WHERE " "VID = :VID"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":ENCRYPTION_KEY", encryptionKey); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":VID", vid); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify tape ") + vid + " because it does not exist"); @@ -2399,11 +2399,11 @@ void RdbmsCatalogue::tapeMountedForArchive(const std::string &vid, const std::st "WHERE " "VID = :VID"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":LAST_WRITE_DRIVE", drive); stmt.bindUint64(":LAST_WRITE_TIME", now); stmt.bindString(":VID", vid); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if (0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify tape ") + vid + " because it does not exist"); @@ -2429,11 +2429,11 @@ void RdbmsCatalogue::tapeMountedForRetrieve(const std::string &vid, const std::s "WHERE " "VID = :VID"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":LAST_READ_DRIVE", drive); stmt.bindUint64(":LAST_READ_TIME", now); stmt.bindString(":VID", vid); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify tape ") + vid + " because it does not exist"); @@ -2462,13 +2462,13 @@ void RdbmsCatalogue::setTapeFull(const common::dataStructures::SecurityIdentity "WHERE " "VID = :VID"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindBool(":IS_FULL", fullValue); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":VID", vid); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify tape ") + vid + " because it does not exist"); @@ -2492,9 +2492,9 @@ void RdbmsCatalogue::noSpaceLeftOnTape(const std::string &vid) { "WHERE " "VID = :VID"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":VID", vid); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if (0 == stmt.getNbAffectedRows()) { throw exception::Exception(std::string("Tape ") + vid + " does not exist"); @@ -2523,13 +2523,13 @@ void RdbmsCatalogue::setTapeDisabled(const common::dataStructures::SecurityIdent "WHERE " "VID = :VID"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindBool(":IS_DISABLED", disabledValue); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":VID", vid); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify tape ") + vid + " because it does not exist"); @@ -2558,13 +2558,13 @@ void RdbmsCatalogue::modifyTapeComment(const common::dataStructures::SecurityIde "WHERE " "VID = :VID"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":USER_COMMENT", comment); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":VID", vid); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify tape ") + vid + " because it does not exist"); @@ -2594,14 +2594,14 @@ void RdbmsCatalogue::modifyRequesterMountRulePolicy(const common::dataStructures "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "REQUESTER_NAME = :REQUESTER_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":MOUNT_POLICY_NAME", mountPolicy); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":DISK_INSTANCE_NAME", instanceName); stmt.bindString(":REQUESTER_NAME", requesterName); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify requester mount rule ") + instanceName + ":" + @@ -2632,14 +2632,14 @@ void RdbmsCatalogue::modifyRequesteMountRuleComment(const common::dataStructures "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "REQUESTER_NAME = :REQUESTER_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":USER_COMMENT", comment); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":DISK_INSTANCE_NAME", instanceName); stmt.bindString(":REQUESTER_NAME", requesterName); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify requester mount rule ") + instanceName + ":" + @@ -2670,14 +2670,14 @@ void RdbmsCatalogue::modifyRequesterGroupMountRulePolicy(const common::dataStruc "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "REQUESTER_GROUP_NAME = :REQUESTER_GROUP_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":MOUNT_POLICY_NAME", mountPolicy); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":DISK_INSTANCE_NAME", instanceName); stmt.bindString(":REQUESTER_GROUP_NAME", requesterGroupName); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify requester group mount rule ") + instanceName + ":" + @@ -2708,14 +2708,14 @@ void RdbmsCatalogue::modifyRequesterGroupMountRuleComment(const common::dataStru "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "REQUESTER_GROUP_NAME = :REQUESTER_GROUP_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":USER_COMMENT", comment); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":DISK_INSTANCE_NAME", instanceName); stmt.bindString(":REQUESTER_GROUP_NAME", requesterGroupName); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify requester group mount rule ") + instanceName + ":" + @@ -2789,7 +2789,7 @@ void RdbmsCatalogue::createMountPolicy( ":LAST_UPDATE_USER_NAME," ":LAST_UPDATE_HOST_NAME," ":LAST_UPDATE_TIME)"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":MOUNT_POLICY_NAME", name); @@ -2811,7 +2811,7 @@ void RdbmsCatalogue::createMountPolicy( stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); } catch(exception::UserError &) { throw; } catch(exception::Exception &ex) { @@ -2873,7 +2873,7 @@ void RdbmsCatalogue::createRequesterMountRule( ":LAST_UPDATE_USER_NAME," ":LAST_UPDATE_HOST_NAME," ":LAST_UPDATE_TIME)"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":REQUESTER_NAME", requesterName); @@ -2889,7 +2889,7 @@ void RdbmsCatalogue::createRequesterMountRule( stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); } catch(exception::UserError &) { throw; } catch(exception::Exception &ex) { @@ -2924,8 +2924,8 @@ std::list<common::dataStructures::RequesterMountRule> RdbmsCatalogue::getRequest "ORDER BY " "DISK_INSTANCE_NAME, REQUESTER_NAME, MOUNT_POLICY_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); - auto rset = stmt.executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); while(rset.next()) { common::dataStructures::RequesterMountRule rule; @@ -2964,10 +2964,10 @@ void RdbmsCatalogue::deleteRequesterMountRule(const std::string &diskInstanceNam "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "REQUESTER_NAME = :REQUESTER_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":REQUESTER_NAME", requesterName); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot delete mount rule for requester ") + diskInstanceName + ":" + requesterName + @@ -3036,7 +3036,7 @@ void RdbmsCatalogue::createRequesterGroupMountRule( ":LAST_UPDATE_USER_NAME," ":LAST_UPDATE_HOST_NAME," ":LAST_UPDATE_TIME)"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":REQUESTER_GROUP_NAME", requesterGroupName); @@ -3052,7 +3052,7 @@ void RdbmsCatalogue::createRequesterGroupMountRule( stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); } catch(exception::UserError &) { throw; } catch(exception::Exception &ex) { @@ -3116,10 +3116,10 @@ optional<common::dataStructures::MountPolicy> RdbmsCatalogue::getRequesterGroupM "WHERE " "REQUESTER_GROUP_MOUNT_RULE.DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "REQUESTER_GROUP_MOUNT_RULE.REQUESTER_GROUP_NAME = :REQUESTER_GROUP_NAME"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", group.diskInstanceName); stmt.bindString(":REQUESTER_GROUP_NAME", group.groupName); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); if(rset.next()) { common::dataStructures::MountPolicy policy; @@ -3179,8 +3179,8 @@ std::list<common::dataStructures::RequesterGroupMountRule> RdbmsCatalogue::getRe "ORDER BY " "DISK_INSTANCE_NAME, REQUESTER_GROUP_NAME, MOUNT_POLICY_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); - auto rset = stmt.executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); while(rset.next()) { common::dataStructures::RequesterGroupMountRule rule; @@ -3221,10 +3221,10 @@ void RdbmsCatalogue::deleteRequesterGroupMountRule(const std::string &diskInstan "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "REQUESTER_GROUP_NAME = :REQUESTER_GROUP_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":REQUESTER_GROUP_NAME", requesterGroupName); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot delete the mount rule for requester group ") + diskInstanceName + ":" + @@ -3250,9 +3250,9 @@ bool RdbmsCatalogue::mountPolicyExists(rdbms::Conn &conn, const std::string &mou "MOUNT_POLICY " "WHERE " "MOUNT_POLICY_NAME = :MOUNT_POLICY_NAME"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":MOUNT_POLICY_NAME", mountPolicyName); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); return rset.next(); } catch(exception::UserError &) { throw; @@ -3276,10 +3276,10 @@ bool RdbmsCatalogue::requesterMountRuleExists(rdbms::Conn &conn, const std::stri "WHERE " "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "REQUESTER_NAME = :REQUESTER_NAME"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":REQUESTER_NAME", requesterName); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); return rset.next(); } catch(exception::UserError &) { throw; @@ -3343,10 +3343,10 @@ optional<common::dataStructures::MountPolicy> RdbmsCatalogue::getRequesterMountP "WHERE " "REQUESTER_MOUNT_RULE.DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "REQUESTER_MOUNT_RULE.REQUESTER_NAME = :REQUESTER_NAME"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", user.diskInstanceName); stmt.bindString(":REQUESTER_NAME", user.username); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); if(rset.next()) { common::dataStructures::MountPolicy policy; @@ -3398,10 +3398,10 @@ bool RdbmsCatalogue::requesterGroupMountRuleExists(rdbms::Conn &conn, const std: "WHERE " "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "REQUESTER_GROUP_NAME = :REQUESTER_GROUP_NAME"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":REQUESTER_GROUP_NAME", requesterGroupName); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); return rset.next(); } catch(exception::UserError &) { throw; @@ -3418,9 +3418,9 @@ void RdbmsCatalogue::deleteMountPolicy(const std::string &name) { try { const char *const sql = "DELETE FROM MOUNT_POLICY WHERE MOUNT_POLICY_NAME = :MOUNT_POLICY_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":MOUNT_POLICY_NAME", name); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot delete mount policy ") + name + " because it does not exist"); @@ -3465,8 +3465,8 @@ std::list<common::dataStructures::MountPolicy> RdbmsCatalogue::getMountPolicies( "ORDER BY " "MOUNT_POLICY_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); - auto rset = stmt.executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); while (rset.next()) { common::dataStructures::MountPolicy policy; @@ -3518,13 +3518,13 @@ void RdbmsCatalogue::modifyMountPolicyArchivePriority(const common::dataStructur "WHERE " "MOUNT_POLICY_NAME = :MOUNT_POLICY_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindUint64(":ARCHIVE_PRIORITY", archivePriority); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":MOUNT_POLICY_NAME", name); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify mount policy ") + name + " because they do not exist"); @@ -3553,13 +3553,13 @@ void RdbmsCatalogue::modifyMountPolicyArchiveMinRequestAge(const common::dataStr "WHERE " "MOUNT_POLICY_NAME = :MOUNT_POLICY_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindUint64(":ARCHIVE_MIN_REQUEST_AGE", minArchiveRequestAge); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":MOUNT_POLICY_NAME", name); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify mount policy ") + name + " because they do not exist"); @@ -3588,13 +3588,13 @@ void RdbmsCatalogue::modifyMountPolicyRetrievePriority(const common::dataStructu "WHERE " "MOUNT_POLICY_NAME = :MOUNT_POLICY_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindUint64(":RETRIEVE_PRIORITY", retrievePriority); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":MOUNT_POLICY_NAME", name); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify mount policy ") + name + " because they do not exist"); @@ -3623,13 +3623,13 @@ void RdbmsCatalogue::modifyMountPolicyRetrieveMinRequestAge(const common::dataSt "WHERE " "MOUNT_POLICY_NAME = :MOUNT_POLICY_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindUint64(":RETRIEVE_MIN_REQUEST_AGE", minRetrieveRequestAge); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":MOUNT_POLICY_NAME", name); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify mount policy ") + name + " because they do not exist"); @@ -3658,13 +3658,13 @@ void RdbmsCatalogue::modifyMountPolicyMaxDrivesAllowed(const common::dataStructu "WHERE " "MOUNT_POLICY_NAME = :MOUNT_POLICY_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindUint64(":MAX_DRIVES_ALLOWED", maxDrivesAllowed); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":MOUNT_POLICY_NAME", name); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify mount policy ") + name + " because they do not exist"); @@ -3693,13 +3693,13 @@ void RdbmsCatalogue::modifyMountPolicyComment(const common::dataStructures::Secu "WHERE " "MOUNT_POLICY_NAME = :MOUNT_POLICY_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":USER_COMMENT", comment); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host); stmt.bindUint64(":LAST_UPDATE_TIME", now); stmt.bindString(":MOUNT_POLICY_NAME", name); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify mount policy ") + name + " because they do not exist"); @@ -3758,7 +3758,7 @@ void RdbmsCatalogue::insertArchiveFile(rdbms::Conn &conn, const rdbms::Autocommi "WHERE " "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "STORAGE_CLASS_NAME = :STORAGE_CLASS_NAME"; - auto stmt = conn.createStmt(sql, autocommitMode); + auto stmt = conn.createStmt(sql); stmt.bindUint64(":ARCHIVE_FILE_ID", row.archiveFileId); stmt.bindString(":DISK_INSTANCE_NAME", row.diskInstance); @@ -3774,7 +3774,7 @@ void RdbmsCatalogue::insertArchiveFile(rdbms::Conn &conn, const rdbms::Autocommi stmt.bindUint64(":CREATION_TIME", now); stmt.bindUint64(":RECONCILIATION_TIME", now); - stmt.executeNonQuery(); + stmt.executeNonQuery(autocommitMode); } catch (exception::UserError &) { throw; } catch (exception::Exception &ex) { @@ -3974,7 +3974,7 @@ common::dataStructures::ArchiveFileSummary RdbmsCatalogue::getTapeFileSummary( } auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); if(searchCriteria.archiveFileId) { stmt.bindUint64(":ARCHIVE_FILE_ID", searchCriteria.archiveFileId.value()); } @@ -4005,7 +4005,7 @@ common::dataStructures::ArchiveFileSummary RdbmsCatalogue::getTapeFileSummary( if(searchCriteria.tapePool) { stmt.bindString(":TAPE_POOL_NAME", searchCriteria.tapePool.value()); } - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); if(!rset.next()) { throw exception::Exception("SELECT COUNT statement did not returned a row"); } @@ -4061,12 +4061,12 @@ void RdbmsCatalogue::tapeLabelled(const std::string &vid, const std::string &dri "WHERE " "VID = :VID"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":LABEL_DRIVE", drive); stmt.bindUint64(":LABEL_TIME", now); stmt.bindBool(":LBP_IS_ON", lbpIsOn); stmt.bindString(":VID", vid); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); if(0 == stmt.getNbAffectedRows()) { throw exception::UserError(std::string("Cannot modify tape ") + vid + " because it does not exist"); @@ -4215,10 +4215,10 @@ common::dataStructures::TapeCopyToPoolMap RdbmsCatalogue::getTapeCopyToPoolMap(r "WHERE " "STORAGE_CLASS.DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "STORAGE_CLASS.STORAGE_CLASS_NAME = :STORAGE_CLASS_NAME"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", storageClass.diskInstanceName); stmt.bindString(":STORAGE_CLASS_NAME", storageClass.storageClassName); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); while (rset.next()) { const uint64_t copyNb = rset.columnUint64("COPY_NB"); const std::string tapePoolName = rset.columnString("TAPE_POOL_NAME"); @@ -4269,10 +4269,10 @@ uint64_t RdbmsCatalogue::getExpectedNbArchiveRoutes(rdbms::Conn &conn, const Sto "WHERE " "STORAGE_CLASS.DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME AND " "STORAGE_CLASS.STORAGE_CLASS_NAME = :STORAGE_CLASS_NAME"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", storageClass.diskInstanceName); stmt.bindString(":STORAGE_CLASS_NAME", storageClass.storageClassName); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); if(!rset.next()) { throw exception::Exception("Result set of SELECT COUNT(*) is empty"); } @@ -4305,13 +4305,13 @@ void RdbmsCatalogue::updateTape( "LAST_WRITE_TIME = :LAST_WRITE_TIME " "WHERE " "VID = :VID"; - auto stmt = conn.createStmt(sql, autocommitMode); + auto stmt = conn.createStmt(sql); stmt.bindString(":VID", vid); stmt.bindUint64(":LAST_FSEQ", lastFSeq); stmt.bindUint64(":DATA_IN_BYTES", compressedBytesWritten); stmt.bindString(":LAST_WRITE_DRIVE", tapeDrive); stmt.bindUint64(":LAST_WRITE_TIME", now); - stmt.executeNonQuery(); + stmt.executeNonQuery(autocommitMode); } catch(exception::UserError &) { throw; } catch(exception::Exception &ex) { @@ -4449,12 +4449,12 @@ RequesterAndGroupMountPolicies RdbmsCatalogue::getMountPolicies( "REQUESTER_GROUP_MOUNT_RULE.DISK_INSTANCE_NAME = :GROUP_DISK_INSTANCE_NAME AND " "REQUESTER_GROUP_MOUNT_RULE.REQUESTER_GROUP_NAME = :REQUESTER_GROUP_NAME"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":REQUESTER_DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":GROUP_DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":REQUESTER_NAME", requesterName); stmt.bindString(":REQUESTER_GROUP_NAME", requesterGroupName); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); RequesterAndGroupMountPolicies policies; while(rset.next()) { @@ -4530,11 +4530,11 @@ void RdbmsCatalogue::deleteArchiveFile(const std::string &diskInstanceName, cons auto conn = m_connPool.getConn(); rdbms::AutoRollback autoRollback(conn); const auto getConnTime = t.secs(utils::Timer::resetCounter); - auto selectStmt = conn.createStmt(selectSql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto selectStmt = conn.createStmt(selectSql); const auto createStmtTime = t.secs(); selectStmt.bindUint64(":ARCHIVE_FILE_ID", archiveFileId); t.reset(); - rdbms::Rset selectRset = selectStmt.executeQuery(); + rdbms::Rset selectRset = selectStmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); const auto selectFromArchiveFileTime = t.secs(); std::unique_ptr<common::dataStructures::ArchiveFile> archiveFile; while(selectRset.next()) { @@ -4625,17 +4625,17 @@ void RdbmsCatalogue::deleteArchiveFile(const std::string &diskInstanceName, cons t.reset(); { const char *const sql = "DELETE FROM TAPE_FILE WHERE ARCHIVE_FILE_ID = :ARCHIVE_FILE_ID"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindUint64(":ARCHIVE_FILE_ID", archiveFileId); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); } const auto deleteFromTapeFileTime = t.secs(utils::Timer::resetCounter); { const char *const sql = "DELETE FROM ARCHIVE_FILE WHERE ARCHIVE_FILE_ID = :ARCHIVE_FILE_ID"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindUint64(":ARCHIVE_FILE_ID", archiveFileId); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); } const auto deleteFromArchiveFileTime = t.secs(utils::Timer::resetCounter); @@ -4728,9 +4728,9 @@ bool RdbmsCatalogue::isNonCachedAdmin(const common::dataStructures::SecurityIden "WHERE " "ADMIN_USER_NAME = :ADMIN_USER_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":ADMIN_USER_NAME", admin.username); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); return rset.next(); } catch(exception::UserError &) { throw; @@ -4764,9 +4764,9 @@ std::list<TapeForWriting> RdbmsCatalogue::getTapesForWriting(const std::string & "LOGICAL_LIBRARY_NAME = :LOGICAL_LIBRARY_NAME"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":LOGICAL_LIBRARY_NAME", logicalLibraryName); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); while (rset.next()) { TapeForWriting tape; tape.vid = rset.columnString("VID"); @@ -4813,7 +4813,7 @@ void RdbmsCatalogue::insertTapeFile( ":COPY_NB," ":CREATION_TIME," ":ARCHIVE_FILE_ID)"; - auto stmt = conn.createStmt(sql, autocommitMode); + auto stmt = conn.createStmt(sql); stmt.bindString(":VID", tapeFile.vid); stmt.bindUint64(":FSEQ", tapeFile.fSeq); @@ -4823,7 +4823,7 @@ void RdbmsCatalogue::insertTapeFile( stmt.bindUint64(":CREATION_TIME", now); stmt.bindUint64(":ARCHIVE_FILE_ID", archiveFileId); - stmt.executeNonQuery(); + stmt.executeNonQuery(autocommitMode); } catch(exception::UserError &) { throw; } catch(exception::Exception &ex) { @@ -4851,10 +4851,10 @@ void RdbmsCatalogue::setTapeLastFSeq(rdbms::Conn &conn, const std::string &vid, "LAST_FSEQ = :LAST_FSEQ " "WHERE " "VID=:VID"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt.bindString(":VID", vid); stmt.bindUint64(":LAST_FSEQ", lastFSeq); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); } catch(exception::UserError &) { throw; } catch(exception::Exception &ex) { @@ -4875,9 +4875,9 @@ uint64_t RdbmsCatalogue::getTapeLastFSeq(rdbms::Conn &conn, const std::string &v "TAPE " "WHERE " "VID = :VID"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":VID", vid); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); if(rset.next()) { return rset.columnUint64("LAST_FSEQ"); } else { @@ -4929,9 +4929,9 @@ std::unique_ptr<common::dataStructures::ArchiveFile> RdbmsCatalogue::getArchiveF "ARCHIVE_FILE.ARCHIVE_FILE_ID = :ARCHIVE_FILE_ID " "ORDER BY " "TAPE_FILE.CREATION_TIME ASC"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindUint64(":ARCHIVE_FILE_ID", archiveFileId); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); std::unique_ptr<common::dataStructures::ArchiveFile> archiveFile; while (rset.next()) { if(nullptr == archiveFile.get()) { @@ -5018,9 +5018,9 @@ std::unique_ptr<common::dataStructures::ArchiveFile> RdbmsCatalogue::getArchiveF "TAPE.IS_DISABLED = 0 " "ORDER BY " "TAPE_FILE.CREATION_TIME ASC"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindUint64(":ARCHIVE_FILE_ID", archiveFileId); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); std::unique_ptr<common::dataStructures::ArchiveFile> archiveFile; while (rset.next()) { if(nullptr == archiveFile.get()) { @@ -5107,10 +5107,10 @@ std::unique_ptr<common::dataStructures::ArchiveFile> RdbmsCatalogue::getArchiveF "ARCHIVE_FILE.DISK_FILE_ID = :DISK_FILE_ID " "ORDER BY " "TAPE_FILE.CREATION_TIME ASC"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":DISK_FILE_ID", diskFileId); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); std::unique_ptr<common::dataStructures::ArchiveFile> archiveFile; while (rset.next()) { if(nullptr == archiveFile.get()) { @@ -5200,10 +5200,10 @@ std::unique_ptr<common::dataStructures::ArchiveFile> RdbmsCatalogue::getArchiveF "TAPE.IS_DISABLED = 0 " "ORDER BY " "TAPE_FILE.CREATION_TIME ASC"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindString(":DISK_INSTANCE_NAME", diskInstanceName); stmt.bindString(":DISK_FILE_ID", diskFileId); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); std::unique_ptr<common::dataStructures::ArchiveFile> archiveFile; while (rset.next()) { if(nullptr == archiveFile.get()) { @@ -5257,8 +5257,8 @@ void RdbmsCatalogue::ping() { try { const char *const sql = "SELECT COUNT(*) FROM CTA_CATALOGUE"; auto conn = m_connPool.getConn(); - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); - auto rset = stmt.executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); } catch(exception::UserError &) { throw; } catch(exception::Exception &ex) { diff --git a/catalogue/SchemaCreatingSqliteCatalogue.cpp b/catalogue/SchemaCreatingSqliteCatalogue.cpp index dd236e42d373c2a62657a325dd3cbe84dc2a291d..3a1e8232a13e1cbc1024d735e799e5b138344e50 100644 --- a/catalogue/SchemaCreatingSqliteCatalogue.cpp +++ b/catalogue/SchemaCreatingSqliteCatalogue.cpp @@ -46,7 +46,7 @@ void SchemaCreatingSqliteCatalogue::createCatalogueSchema() { try { const SqliteCatalogueSchema schema; auto conn = m_connPool.getConn(); - conn.executeNonQueries(schema.sql); + conn.executeNonQueries(schema.sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); } catch(exception::Exception &ex) { throw exception::Exception(std::string(__FUNCTION__) + " failed: " + ex.getMessage().str()); } diff --git a/catalogue/SqliteCatalogue.cpp b/catalogue/SqliteCatalogue.cpp index bcad8a2167379be8a29d0ef0c70241fe9794298f..0ccaa5836e1df0bc91ca6b07d3005c61f1552cdf 100644 --- a/catalogue/SqliteCatalogue.cpp +++ b/catalogue/SqliteCatalogue.cpp @@ -123,17 +123,17 @@ void SqliteCatalogue::deleteArchiveFile(const std::string &diskInstanceName, con t.reset(); { const char *const sql = "DELETE FROM TAPE_FILE WHERE ARCHIVE_FILE_ID = :ARCHIVE_FILE_ID;"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindUint64(":ARCHIVE_FILE_ID", archiveFileId); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); } const auto deleteFromTapeFileTime = t.secs(utils::Timer::resetCounter); { const char *const sql = "DELETE FROM ARCHIVE_FILE WHERE ARCHIVE_FILE_ID = :ARCHIVE_FILE_ID;"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); + auto stmt = conn.createStmt(sql); stmt.bindUint64(":ARCHIVE_FILE_ID", archiveFileId); - stmt.executeNonQuery(); + stmt.executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); } const auto deleteFromArchiveFileTime = t.secs(utils::Timer::resetCounter); @@ -199,8 +199,8 @@ uint64_t SqliteCatalogue::getNextArchiveFileId(rdbms::Conn &conn) { "ID AS ID " "FROM " "ARCHIVE_FILE_ID"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); - auto rset = stmt.executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); if(!rset.next()) { throw exception::Exception("ARCHIVE_FILE_ID table is empty"); } @@ -238,8 +238,8 @@ uint64_t SqliteCatalogue::getNextStorageClassId(rdbms::Conn &conn) { "ID AS ID " "FROM " "STORAGE_CLASS_ID"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_OFF); - auto rset = stmt.executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt.executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); if(!rset.next()) { throw exception::Exception("STORAGE_CLASS_ID table is empty"); } @@ -295,9 +295,9 @@ common::dataStructures::Tape SqliteCatalogue::selectTape(const rdbms::Autocommit "WHERE " "VID = :VID;"; - auto stmt = conn.createStmt(sql, autocommitMode); + auto stmt = conn.createStmt(sql); stmt.bindString(":VID", vid); - auto rset = stmt.executeQuery(); + auto rset = stmt.executeQuery(autocommitMode); if (!rset.next()) { throw exception::Exception(std::string("The tape with VID " + vid + " does not exist")); } diff --git a/rdbms/Conn.cpp b/rdbms/Conn.cpp index d80e66aae36c8b5b65cb519b063083b1149e9e43..7e0953a13bc95c52e98b28e54281483358278151 100644 --- a/rdbms/Conn.cpp +++ b/rdbms/Conn.cpp @@ -77,9 +77,9 @@ Conn &Conn::operator=(Conn &&rhs) { //------------------------------------------------------------------------------ // createStmt //------------------------------------------------------------------------------ -Stmt Conn::createStmt(const std::string &sql, const AutocommitMode autocommitMode) { +Stmt Conn::createStmt(const std::string &sql) { if(nullptr != m_connAndStmts && nullptr != m_connAndStmts->conn) { - return m_connAndStmts->stmtPool->getStmt(*m_connAndStmts->conn, sql, autocommitMode); + return m_connAndStmts->stmtPool->getStmt(*m_connAndStmts->conn, sql); } else { throw exception::Exception(std::string(__FUNCTION__) + " failed: Conn does not contain a connection"); } @@ -88,7 +88,7 @@ Stmt Conn::createStmt(const std::string &sql, const AutocommitMode autocommitMod //------------------------------------------------------------------------------ // executeNonQueries //------------------------------------------------------------------------------ -void Conn::executeNonQueries(const std::string &sqlStmts) { +void Conn::executeNonQueries(const std::string &sqlStmts, const AutocommitMode autocommitMode) { try { std::string::size_type searchPos = 0; std::string::size_type findResult = std::string::npos; @@ -100,7 +100,7 @@ void Conn::executeNonQueries(const std::string &sqlStmts) { searchPos = findResult + 1; if(0 < sqlStmt.size()) { // Ignore empty statements - executeNonQuery(sqlStmt, AutocommitMode::AUTOCOMMIT_ON); + executeNonQuery(sqlStmt, autocommitMode); } } @@ -114,8 +114,8 @@ void Conn::executeNonQueries(const std::string &sqlStmts) { //------------------------------------------------------------------------------ void Conn::executeNonQuery(const std::string &sql, const AutocommitMode autocommitMode) { try { - auto stmt = createStmt(sql, autocommitMode); - stmt.executeNonQuery(); + auto stmt = createStmt(sql); + stmt.executeNonQuery(autocommitMode); } catch(exception::Exception &ex) { throw exception::Exception(std::string(__FUNCTION__) + " failed: " + ex.what()); } diff --git a/rdbms/Conn.hpp b/rdbms/Conn.hpp index 53947b82616cf841d96311d1214c914597f554ec..5246749c9c1695d0418b81ea7495ee95b5ca69b8 100644 --- a/rdbms/Conn.hpp +++ b/rdbms/Conn.hpp @@ -82,10 +82,9 @@ public: * Creates a prepared statement. * * @param sql The SQL statement. - * @param autocommitMode The autocommit mode of the statement. * @return The prepared statement. */ - Stmt createStmt(const std::string &sql, const AutocommitMode autocommitMode); + Stmt createStmt(const std::string &sql); /** * Convenience method that parses the specified string of multiple SQL @@ -96,16 +95,16 @@ public: * autocommit ON. * * @param sqlStmts The SQL statements to be executed. - * @param autocommitMode The autocommit mode of the statement. + * @param autocommitMode The autocommit mode of the statements. */ - void executeNonQueries(const std::string &sqlStmts); + void executeNonQueries(const std::string &sqlStmts, const AutocommitMode autocommitMode); /** * Convenience method that wraps Conn::createStmt() followed by * Stmt::executeNonQuery(). * * @param sql The SQL statement. - * @param autocommitMode The autocommit mode of the statement. + * @param autocommitMode The autocommit mode of the statements. */ void executeNonQuery(const std::string &sql, const AutocommitMode autocommitMode); diff --git a/rdbms/ConnTest.cpp b/rdbms/ConnTest.cpp index 1988d24c7ff1c548bdc37915432d6debea6925ff..bd3b34f1d791ac8176a5d2240e82cd9c46234bc9 100644 --- a/rdbms/ConnTest.cpp +++ b/rdbms/ConnTest.cpp @@ -67,7 +67,7 @@ TEST_F(cta_rdbms_ConnTest, createTableInMemoryDatabase_executeNonQueries) { ASSERT_TRUE(conn.getTableNames().empty()); - conn.executeNonQueries(sql); + conn.executeNonQueries(sql, AutocommitMode::AUTOCOMMIT_ON); ASSERT_EQ(1, conn.getTableNames().size()); } @@ -121,7 +121,7 @@ TEST_F(cta_rdbms_ConnTest, createSameTableInTwoSeparateInMemoryDatabases_execute ASSERT_TRUE(conn.getTableNames().empty()); - conn.executeNonQueries(sql); + conn.executeNonQueries(sql, AutocommitMode::AUTOCOMMIT_ON); ASSERT_EQ(1, conn.getTableNames().size()); } @@ -135,7 +135,7 @@ TEST_F(cta_rdbms_ConnTest, createSameTableInTwoSeparateInMemoryDatabases_execute ASSERT_TRUE(conn.getTableNames().empty()); - conn.executeNonQueries(sql); + conn.executeNonQueries(sql, AutocommitMode::AUTOCOMMIT_ON); ASSERT_EQ(1, conn.getTableNames().size()); } diff --git a/rdbms/Stmt.cpp b/rdbms/Stmt.cpp index 34eac226fb333327990dc6024344896c9c576410..186f9a1a35220728b72e114baf346278fc82eb20 100644 --- a/rdbms/Stmt.cpp +++ b/rdbms/Stmt.cpp @@ -175,9 +175,9 @@ void Stmt::bindOptionalString(const std::string ¶mName, const optional<std:: //----------------------------------------------------------------------------- // executeQuery //----------------------------------------------------------------------------- -Rset Stmt::executeQuery() { +Rset Stmt::executeQuery(const AutocommitMode autocommitMode) { if(nullptr != m_stmt) { - return Rset(m_stmt->executeQuery()); + return Rset(m_stmt->executeQuery(autocommitMode)); } else { throw exception::Exception(std::string(__FUNCTION__) + " failed: Stmt does not contain a cached statement"); } @@ -186,9 +186,9 @@ Rset Stmt::executeQuery() { //----------------------------------------------------------------------------- // executeNonQuery //----------------------------------------------------------------------------- -void Stmt::executeNonQuery() { +void Stmt::executeNonQuery(const AutocommitMode autocommitMode) { if(nullptr != m_stmt) { - return m_stmt->executeNonQuery(); + return m_stmt->executeNonQuery(autocommitMode); } else { throw exception::Exception(std::string(__FUNCTION__) + " failed: Stmt does not contain a cached statement"); } diff --git a/rdbms/Stmt.hpp b/rdbms/Stmt.hpp index 899e2f83e6b88ec0df9ca9ec1435a02f73e188c6..ae5c62ca6e52615eb602dd2f05effaa5a09ea26b 100644 --- a/rdbms/Stmt.hpp +++ b/rdbms/Stmt.hpp @@ -18,6 +18,7 @@ #pragma once +#include "rdbms/AutocommitMode.hpp" #include "rdbms/Rset.hpp" #include "common/optional.hpp" @@ -161,14 +162,17 @@ public: /** * Executes the statement and returns the result set. * + * @param autocommitMode The autocommit mode of the statement. * @return The result set. */ - Rset executeQuery(); + Rset executeQuery(const AutocommitMode autocommitMode); /** * Executes the statement. + * + * @param autocommitMode The autocommit mode of the statement. */ - void executeNonQuery(); + void executeNonQuery(const AutocommitMode autocommitMode); /** * Returns the number of rows affected by the last execution of this diff --git a/rdbms/StmtPool.cpp b/rdbms/StmtPool.cpp index 537efae8d32cadf20ec58c7f8fd24fc640306c6c..5e0795580afbc277897c74fba7cd3bede5d4eb8b 100644 --- a/rdbms/StmtPool.cpp +++ b/rdbms/StmtPool.cpp @@ -27,16 +27,14 @@ namespace rdbms { //------------------------------------------------------------------------------ // getStmt //------------------------------------------------------------------------------ -Stmt StmtPool::getStmt(wrapper::Conn &conn, const std::string &sql, const AutocommitMode autocommitMode) { - const CachedStmtKey key(sql, autocommitMode); - +Stmt StmtPool::getStmt(wrapper::Conn &conn, const std::string &sql) { threading::MutexLocker locker(m_stmtsMutex); - auto itor = m_stmts.find(key); + auto itor = m_stmts.find(sql); // If there is no prepared statement in the cache if(itor == m_stmts.end()) { - auto stmt = conn.createStmt(sql, autocommitMode); + auto stmt = conn.createStmt(sql); return Stmt(std::move(stmt), *this); } else { auto &stmtList = itor->second; @@ -75,11 +73,9 @@ uint64_t StmtPool::getNbStmts() const { void StmtPool::returnStmt(std::unique_ptr<wrapper::Stmt> stmt) { threading::MutexLocker locker(m_stmtsMutex); - const CachedStmtKey key(stmt->getSql(), stmt->getAutocommitMode()); - stmt->clear(); - m_stmts[key].push_back(std::move(stmt)); + m_stmts[stmt->getSql()].push_back(std::move(stmt)); } //------------------------------------------------------------------------------ diff --git a/rdbms/StmtPool.hpp b/rdbms/StmtPool.hpp index 04c8ce6cd53a1226df5f8077e764dc5f96a87d7f..1cdcadf233a3fde7793bc632cb132176f394e3fc 100644 --- a/rdbms/StmtPool.hpp +++ b/rdbms/StmtPool.hpp @@ -49,10 +49,9 @@ public: * * @param conn The database connection to which the database statements * @param sql The SQL statement. - * @param autocommitMode The autocommit mode of the statement. * @return The prepared statement. */ - Stmt getStmt(wrapper::Conn &conn, const std::string &sql, const AutocommitMode autocommitMode); + Stmt getStmt(wrapper::Conn &conn, const std::string &sql); /** * Returns the number of cached statements currently in the pool. @@ -83,48 +82,13 @@ private: */ mutable threading::Mutex m_stmtsMutex; - /** - * Key used to lookup prepares statements within the cache. - */ - struct CachedStmtKey { - /** - * The SQL of the cached statement. - */ - std::string sql; - - /** - * The autocommit mode of the cached statement. - */ - const AutocommitMode autocommitMode; - - /** - * Constructor. - * - * @param s The SQL of the cached statement. - * @param a The autocommit mode of the cached statement. - */ - CachedStmtKey(const std::string &s, const AutocommitMode a): sql(s), autocommitMode(a) { - } - - /** - * Less than operator. - */ - bool operator<(const CachedStmtKey &rhs) const { - if(sql != rhs.sql) { - return sql < rhs.sql; - } else { - return autocommitMode < rhs.autocommitMode; - } - } - }; - /** * The cached database statements. * * Please note that for a single key there maybe more than one cached * statement, hence the map to list of statements. */ - std::map<CachedStmtKey, std::list< std::unique_ptr<wrapper::Stmt> > > m_stmts; + std::map<std::string, std::list< std::unique_ptr<wrapper::Stmt> > > m_stmts; }; // class StmtPool diff --git a/rdbms/StmtPoolTest.cpp b/rdbms/StmtPoolTest.cpp index 3924118b6d0c5b6838a0a8bf97f27f96fbcc13e2..9a0246e3d106c8320f468322852f2fdf78ddc2bf 100644 --- a/rdbms/StmtPoolTest.cpp +++ b/rdbms/StmtPoolTest.cpp @@ -45,7 +45,7 @@ TEST_F(cta_rdbms_StmtPoolTest, getStmt) { StmtPool pool; ASSERT_EQ(0, pool.getNbStmts()); { - auto stmt = pool.getStmt(*conn, sql, AutocommitMode::AUTOCOMMIT_ON); + auto stmt = pool.getStmt(*conn, sql); ASSERT_EQ(0, pool.getNbStmts()); } ASSERT_EQ(1, pool.getNbStmts()); @@ -61,7 +61,7 @@ TEST_F(cta_rdbms_StmtPoolTest, moveAssignment) { StmtPool pool; ASSERT_EQ(0, pool.getNbStmts()); { - Stmt stmt1 = pool.getStmt(*conn, sql, AutocommitMode::AUTOCOMMIT_ON); + Stmt stmt1 = pool.getStmt(*conn, sql); Stmt stmt2; stmt2 = std::move(stmt1); ASSERT_EQ(0, pool.getNbStmts()); @@ -79,7 +79,7 @@ TEST_F(cta_rdbms_StmtPoolTest, moveConstructor) { StmtPool pool; ASSERT_EQ(0, pool.getNbStmts()); { - Stmt stmt1 = pool.getStmt(*conn, sql, AutocommitMode::AUTOCOMMIT_ON); + Stmt stmt1 = pool.getStmt(*conn, sql); Stmt stmt2(std::move(stmt1)); ASSERT_EQ(0, pool.getNbStmts()); } @@ -109,8 +109,8 @@ TEST_F(cta_rdbms_StmtPoolTest, createSameTableInTwoSeparateInMemoryDatabases) { StmtPool pool; { - Stmt stmt = pool.getStmt(*conn, selectTableNamesSql, AutocommitMode::AUTOCOMMIT_ON); - auto rset = stmt.executeQuery(); + Stmt stmt = pool.getStmt(*conn, selectTableNamesSql); + auto rset = stmt.executeQuery(AutocommitMode::AUTOCOMMIT_ON); std::list<std::string> names; while(rset.next()) { names.push_back(rset.columnString("NAME")); @@ -119,13 +119,13 @@ TEST_F(cta_rdbms_StmtPoolTest, createSameTableInTwoSeparateInMemoryDatabases) { } { - Stmt stmt = pool.getStmt(*conn, createTableSql, AutocommitMode::AUTOCOMMIT_ON); - stmt.executeNonQuery(); + Stmt stmt = pool.getStmt(*conn, createTableSql); + stmt.executeNonQuery(AutocommitMode::AUTOCOMMIT_ON); } { - Stmt stmt = pool.getStmt(*conn, selectTableNamesSql, AutocommitMode::AUTOCOMMIT_ON); - auto rset = stmt.executeQuery(); + Stmt stmt = pool.getStmt(*conn, selectTableNamesSql); + auto rset = stmt.executeQuery(AutocommitMode::AUTOCOMMIT_ON); std::list<std::string> names; while(rset.next()) { names.push_back(rset.columnString("NAME")); @@ -143,8 +143,8 @@ TEST_F(cta_rdbms_StmtPoolTest, createSameTableInTwoSeparateInMemoryDatabases) { StmtPool pool; { - Stmt stmt = pool.getStmt(*conn, selectTableNamesSql, AutocommitMode::AUTOCOMMIT_ON); - auto rset = stmt.executeQuery(); + Stmt stmt = pool.getStmt(*conn, selectTableNamesSql); + auto rset = stmt.executeQuery(AutocommitMode::AUTOCOMMIT_ON); std::list<std::string> names; while(rset.next()) { names.push_back(rset.columnString("NAME")); @@ -153,13 +153,13 @@ TEST_F(cta_rdbms_StmtPoolTest, createSameTableInTwoSeparateInMemoryDatabases) { } { - Stmt stmt = pool.getStmt(*conn, createTableSql, AutocommitMode::AUTOCOMMIT_ON); - stmt.executeNonQuery(); + Stmt stmt = pool.getStmt(*conn, createTableSql); + stmt.executeNonQuery(AutocommitMode::AUTOCOMMIT_ON); } { - Stmt stmt = pool.getStmt(*conn, selectTableNamesSql, AutocommitMode::AUTOCOMMIT_ON); - auto rset = stmt.executeQuery(); + Stmt stmt = pool.getStmt(*conn, selectTableNamesSql); + auto rset = stmt.executeQuery(AutocommitMode::AUTOCOMMIT_ON); std::list<std::string> names; while(rset.next()) { names.push_back(rset.columnString("NAME")); @@ -186,8 +186,8 @@ TEST_F(cta_rdbms_StmtPoolTest, createSameTableInTwoSeparateInMemoryDatabases_get ASSERT_TRUE(conn->getTableNames().empty()); { - Stmt stmt = pool.getStmt(*conn, createTableSql, AutocommitMode::AUTOCOMMIT_ON); - stmt.executeNonQuery(); + Stmt stmt = pool.getStmt(*conn, createTableSql); + stmt.executeNonQuery(AutocommitMode::AUTOCOMMIT_ON); } ASSERT_EQ(1, conn->getTableNames().size()); @@ -204,8 +204,8 @@ TEST_F(cta_rdbms_StmtPoolTest, createSameTableInTwoSeparateInMemoryDatabases_get ASSERT_TRUE(conn->getTableNames().empty()); { - Stmt stmt = pool.getStmt(*conn, createTableSql, AutocommitMode::AUTOCOMMIT_ON); - stmt.executeNonQuery(); + Stmt stmt = pool.getStmt(*conn, createTableSql); + stmt.executeNonQuery(AutocommitMode::AUTOCOMMIT_ON); } ASSERT_EQ(1, conn->getTableNames().size()); @@ -222,8 +222,8 @@ TEST_F(cta_rdbms_StmtPoolTest, sameSqlTwoCachedStmts) { StmtPool pool; ASSERT_EQ(0, pool.getNbStmts()); { - Stmt stmt1 = pool.getStmt(*conn, sql, AutocommitMode::AUTOCOMMIT_ON); - Stmt stmt2 = pool.getStmt(*conn, sql, AutocommitMode::AUTOCOMMIT_ON); + Stmt stmt1 = pool.getStmt(*conn, sql); + Stmt stmt2 = pool.getStmt(*conn, sql); ASSERT_EQ(0, pool.getNbStmts()); } ASSERT_EQ(2, pool.getNbStmts()); diff --git a/rdbms/wrapper/Conn.hpp b/rdbms/wrapper/Conn.hpp index 8b90734f59aae71a27f9ee5115d078aadf342cd3..05c7b2aec811728d8bcf9a366384d0276d0c56d9 100644 --- a/rdbms/wrapper/Conn.hpp +++ b/rdbms/wrapper/Conn.hpp @@ -49,10 +49,9 @@ public: * Creates a prepared statement. * * @param sql The SQL statement. - * @param autocommitMode The autocommit mode of the statement. * @return The prepared statement. */ - virtual std::unique_ptr<Stmt> createStmt(const std::string &sql, const AutocommitMode autocommitMode) = 0; + virtual std::unique_ptr<Stmt> createStmt(const std::string &sql) = 0; /** * Commits the current transaction. diff --git a/rdbms/wrapper/ConnTest.cpp b/rdbms/wrapper/ConnTest.cpp index cfea5c20d85d646dc7dbe145a6883e21c129c5d4..2b7758be52540a74e6ef54509ba04466eb3af29f 100644 --- a/rdbms/wrapper/ConnTest.cpp +++ b/rdbms/wrapper/ConnTest.cpp @@ -48,8 +48,8 @@ TEST_F(cta_rdbms_wrapper_ConnTest, createSameTableInTwoSeparateInMemoryDatabases ASSERT_TRUE(conn->getTableNames().empty()); - auto stmt = conn->createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - stmt->executeNonQuery(); + auto stmt = conn->createStmt(sql); + stmt->executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); ASSERT_EQ(1, conn->getTableNames().size()); } @@ -62,8 +62,8 @@ TEST_F(cta_rdbms_wrapper_ConnTest, createSameTableInTwoSeparateInMemoryDatabases ASSERT_TRUE(conn->getTableNames().empty()); - auto stmt = conn->createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - stmt->executeNonQuery(); + auto stmt = conn->createStmt(sql); + stmt->executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); ASSERT_EQ(1, conn->getTableNames().size()); } diff --git a/rdbms/wrapper/OcciConn.cpp b/rdbms/wrapper/OcciConn.cpp index dacb83e309c771ecaaf4d427f64e783752d0cc97..916449dd3b732e5130f5dfee46a6f42fa7d4cb8c 100644 --- a/rdbms/wrapper/OcciConn.cpp +++ b/rdbms/wrapper/OcciConn.cpp @@ -68,7 +68,7 @@ void OcciConn::close() { //------------------------------------------------------------------------------ // createStmt //------------------------------------------------------------------------------ -std::unique_ptr<Stmt> OcciConn::createStmt(const std::string &sql, AutocommitMode autocommitMode) { +std::unique_ptr<Stmt> OcciConn::createStmt(const std::string &sql) { try { threading::MutexLocker locker(m_mutex); @@ -80,7 +80,7 @@ std::unique_ptr<Stmt> OcciConn::createStmt(const std::string &sql, AutocommitMod if (nullptr == stmt) { throw exception::Exception("oracle::occi::createStatement() returned a nullptr pointer"); } - return cta::make_unique<OcciStmt>(autocommitMode, sql, *this, stmt); + return cta::make_unique<OcciStmt>(sql, *this, stmt); } catch(exception::Exception &ex) { throw exception::Exception(std::string(__FUNCTION__) + " failed for SQL statement " + sql + ": " + ex.getMessage().str()); @@ -140,8 +140,8 @@ std::list<std::string> OcciConn::getTableNames() { "USER_TABLES " "ORDER BY " "TABLE_NAME"; - auto stmt = createStmt(sql, AutocommitMode::AUTOCOMMIT_OFF); - auto rset = stmt->executeQuery(); + auto stmt = createStmt(sql); + auto rset = stmt->executeQuery(AutocommitMode::AUTOCOMMIT_OFF); while (rset->next()) { auto name = rset->columnOptionalString("TABLE_NAME"); if(name) { @@ -168,8 +168,8 @@ std::list<std::string> OcciConn::getSequenceNames() { "USER_SEQUENCES " "ORDER BY " "SEQUENCE_NAME"; - auto stmt = createStmt(sql, AutocommitMode::AUTOCOMMIT_OFF); - auto rset = stmt->executeQuery(); + auto stmt = createStmt(sql); + auto rset = stmt->executeQuery(AutocommitMode::AUTOCOMMIT_OFF); while (rset->next()) { auto name = rset->columnOptionalString("SEQUENCE_NAME"); names.push_back(name.value()); diff --git a/rdbms/wrapper/OcciConn.hpp b/rdbms/wrapper/OcciConn.hpp index dff34745b27d6082b87ecddede74241b2bef1b7b..f814868db6032724e3d2889129e62012ec513810 100644 --- a/rdbms/wrapper/OcciConn.hpp +++ b/rdbms/wrapper/OcciConn.hpp @@ -64,10 +64,9 @@ public: * Creates a prepared statement. * * @param sql The SQL statement. - * @param autocommitMode The autocommit mode of the statement. * @return The prepared statement. */ - std::unique_ptr<Stmt> createStmt(const std::string &sql, const AutocommitMode autocommitMode) override; + std::unique_ptr<Stmt> createStmt(const std::string &sql) override; /** * Commits the current transaction. diff --git a/rdbms/wrapper/OcciStmt.cpp b/rdbms/wrapper/OcciStmt.cpp index 38059fd503c1e837f65b5b1a0aa9075c8b8d7eaf..30ed9c6ce5243b015ada3eeae051abfaab0ae985 100644 --- a/rdbms/wrapper/OcciStmt.cpp +++ b/rdbms/wrapper/OcciStmt.cpp @@ -38,36 +38,12 @@ namespace wrapper { // constructor //------------------------------------------------------------------------------ OcciStmt::OcciStmt( - const AutocommitMode autocommitMode, const std::string &sql, OcciConn &conn, oracle::occi::Statement *const stmt) : - Stmt(sql, autocommitMode), + Stmt(sql), m_conn(conn), m_stmt(stmt) { - - // m_occiConn and m_stmt have been set and m_stmt is not nullptr so it is safe to - // call close() from now on - try { - switch(autocommitMode) { - case AutocommitMode::AUTOCOMMIT_ON: - m_stmt->setAutoCommit(true); - break; - case AutocommitMode::AUTOCOMMIT_OFF: - // Do nothing because an occi::Statement has autocommit turned off by default - break; - default: - throw exception::Exception("Unknown autocommit mode"); - } - } catch(exception::Exception &ex) { - close(); - throw exception::Exception(std::string(__FUNCTION__) + " failed for SQL statement " + - getSqlForException() + ": " + ex.getMessage().str()); - } catch(std::exception &se) { - close(); - throw exception::Exception(std::string(__FUNCTION__) + " failed for SQL statement " + - getSqlForException() + ": " + se.what()); - } } //------------------------------------------------------------------------------ @@ -178,10 +154,21 @@ void OcciStmt::bindOptionalString(const std::string ¶mName, const optional<s //------------------------------------------------------------------------------ // executeQuery //------------------------------------------------------------------------------ -std::unique_ptr<Rset> OcciStmt::executeQuery() { +std::unique_ptr<Rset> OcciStmt::executeQuery(const AutocommitMode autocommitMode) { using namespace oracle; try { + switch(autocommitMode) { + case AutocommitMode::AUTOCOMMIT_ON: + m_stmt->setAutoCommit(true); + break; + case AutocommitMode::AUTOCOMMIT_OFF: + m_stmt->setAutoCommit(false); + break; + default: + throw exception::Exception("Unknown autocommit mode"); + } + return cta::make_unique<OcciRset>(*this, m_stmt->executeQuery()); } catch(occi::SQLException &ex) { std::ostringstream msg; @@ -207,10 +194,21 @@ std::unique_ptr<Rset> OcciStmt::executeQuery() { //------------------------------------------------------------------------------ // executeNonQuery //------------------------------------------------------------------------------ -void OcciStmt::executeNonQuery() { +void OcciStmt::executeNonQuery(const AutocommitMode autocommitMode) { using namespace oracle; try { + switch(autocommitMode) { + case AutocommitMode::AUTOCOMMIT_ON: + m_stmt->setAutoCommit(true); + break; + case AutocommitMode::AUTOCOMMIT_OFF: + m_stmt->setAutoCommit(false); + break; + default: + throw exception::Exception("Unknown autocommit mode"); + } + m_stmt->executeUpdate(); } catch(occi::SQLException &ex) { std::ostringstream msg; diff --git a/rdbms/wrapper/OcciStmt.hpp b/rdbms/wrapper/OcciStmt.hpp index 5b0df16e926ce819d9e3deb5c26e37fde1dbb17f..b1d68d50cbef53ae103d1e5c9d598396e37103d0 100644 --- a/rdbms/wrapper/OcciStmt.hpp +++ b/rdbms/wrapper/OcciStmt.hpp @@ -52,13 +52,11 @@ public: /** * Constructor. * - * @param autocommitMode The autocommit mode of the statement. * @param sql The SQL statement. * @param conn The database connection. * @param stmt The OCCI statement. */ OcciStmt( - const AutocommitMode autocommitMode, const std::string &sql, OcciConn &conn, oracle::occi::Statement *const stmt); @@ -124,16 +122,19 @@ public: void bindOptionalString(const std::string ¶mName, const optional<std::string> ¶mValue) override; /** - * Executes the statement and returns the result set. + * Executes the statement and returns the result set. * - * @return The result set. + * @param autocommitMode The autocommit mode of the statement. + * @return The result set. */ - std::unique_ptr<Rset> executeQuery() override; + std::unique_ptr<Rset> executeQuery(const AutocommitMode autocommitMode) override; /** * Executes the statement. + * + * @param autocommitMode The autocommit mode of the statement. */ - void executeNonQuery() override; + void executeNonQuery(const AutocommitMode autocommitMode) override; /** * Returns the number of rows affected by the last execution of this diff --git a/rdbms/wrapper/SqliteConn.cpp b/rdbms/wrapper/SqliteConn.cpp index c19a5702fcaa6c6a812c3947f3b21a03a0b565ae..cf2ba0291dc230cb8e8cfda671ccbd54f899e6b5 100644 --- a/rdbms/wrapper/SqliteConn.cpp +++ b/rdbms/wrapper/SqliteConn.cpp @@ -99,7 +99,7 @@ void SqliteConn::close() { //------------------------------------------------------------------------------ // createStmt //------------------------------------------------------------------------------ -std::unique_ptr<Stmt> SqliteConn::createStmt(const std::string &sql, const AutocommitMode autocommitMode) { +std::unique_ptr<Stmt> SqliteConn::createStmt(const std::string &sql) { try { threading::MutexLocker locker(m_mutex); @@ -107,7 +107,7 @@ std::unique_ptr<Stmt> SqliteConn::createStmt(const std::string &sql, const Autoc throw exception::Exception("Connection is closed"); } - return cta::make_unique<SqliteStmt>(autocommitMode , *this, sql); + return cta::make_unique<SqliteStmt>(*this, sql); } catch(exception::Exception &ex) { throw exception::Exception(std::string(__FUNCTION__) + " failed: " + ex.getMessage().str()); } @@ -185,8 +185,8 @@ void SqliteConn::printSchema(std::ostream &os) { "ORDER BY " "TYPE, " "NAME;"; - auto stmt = createStmt(sql, AutocommitMode::AUTOCOMMIT_ON); - auto rset = stmt->executeQuery(); + auto stmt = createStmt(sql); + auto rset = stmt->executeQuery(AutocommitMode::AUTOCOMMIT_ON); os << "NAME, TYPE" << std::endl; os << "==========" << std::endl; while (rset->next()) { @@ -213,8 +213,8 @@ std::list<std::string> SqliteConn::getTableNames() { "TYPE = 'table' " "ORDER BY " "NAME;"; - auto stmt = createStmt(sql, AutocommitMode::AUTOCOMMIT_ON); - auto rset = stmt->executeQuery(); + auto stmt = createStmt(sql); + auto rset = stmt->executeQuery(AutocommitMode::AUTOCOMMIT_ON); std::list<std::string> names; while (rset->next()) { auto name = rset->columnOptionalString("NAME"); diff --git a/rdbms/wrapper/SqliteConn.hpp b/rdbms/wrapper/SqliteConn.hpp index b726f7d2e9d8065a949f8e2f957d843a4ddf7a45..05bac8b4e46cdced80823623952a5e392e05a6bc 100644 --- a/rdbms/wrapper/SqliteConn.hpp +++ b/rdbms/wrapper/SqliteConn.hpp @@ -66,10 +66,9 @@ public: * Creates a prepared statement. * * @param sql The SQL statement. - * @param autocommitMode The autocommit mode of the statement. * @return The prepared statement. */ - std::unique_ptr<Stmt> createStmt(const std::string &sql, const AutocommitMode autocommitMode) override; + std::unique_ptr<Stmt> createStmt(const std::string &sql) override; /** * Commits the current transaction. diff --git a/rdbms/wrapper/SqliteStmt.cpp b/rdbms/wrapper/SqliteStmt.cpp index 4576179e186936c574ffafd4b087391404b20a54..ed59d3d15d0564cfb3df4f468977e39123f4098e 100644 --- a/rdbms/wrapper/SqliteStmt.cpp +++ b/rdbms/wrapper/SqliteStmt.cpp @@ -42,10 +42,9 @@ namespace wrapper { // constructor //------------------------------------------------------------------------------ SqliteStmt::SqliteStmt( - const AutocommitMode autocommitMode, SqliteConn &conn, const std::string &sql): - Stmt(sql, autocommitMode), + Stmt(sql), m_conn(conn), m_nbAffectedRows(0) { m_stmt = nullptr; @@ -80,32 +79,6 @@ SqliteStmt::SqliteStmt( throw exception::Exception(std::string(__FUNCTION__) + " failed for SQL statement " + getSqlForException() + ": sqlite3_prepare_v2 failed: " + msg); } - - // m_stmt has been set so it is safe to call close() from now on - try { - switch(autocommitMode) { - case AutocommitMode::AUTOCOMMIT_ON: - // Do nothing because SQLite statements autocommit be default - break; - case AutocommitMode::AUTOCOMMIT_OFF: { - if(!m_conn.m_transactionInProgress) { - beginDeferredTransaction(); - m_conn.m_transactionInProgress = true; - } - break; - } - default: - throw exception::Exception("Unknown autocommit mode"); - } - } catch(exception::Exception &ex) { - close(); - throw exception::Exception(std::string(__FUNCTION__) + " failed for SQL statement " + getSqlForException() + ": " + - ex.getMessage().str()); - } catch(std::exception &se) { - close(); - throw exception::Exception(std::string(__FUNCTION__) + " failed for SQL statement " + getSqlForException() + ": " + - se.what()); - } } //------------------------------------------------------------------------------ @@ -250,16 +223,22 @@ void SqliteStmt::bindOptionalString(const std::string ¶mName, const optional //------------------------------------------------------------------------------ // executeQuery //------------------------------------------------------------------------------ -std::unique_ptr<Rset> SqliteStmt::executeQuery() { +std::unique_ptr<Rset> SqliteStmt::executeQuery(const AutocommitMode autocommitMode) { + threading::MutexLocker connLocker(m_conn.m_mutex); + + startDeferredTransactionIfNecessary(autocommitMode); + return cta::make_unique<SqliteRset>(*this); } //------------------------------------------------------------------------------ // executeNonQuery //------------------------------------------------------------------------------ -void SqliteStmt::executeNonQuery() { +void SqliteStmt::executeNonQuery(const AutocommitMode autocommitMode) { threading::MutexLocker connLocker(m_conn.m_mutex); + startDeferredTransactionIfNecessary(autocommitMode); + const int stepRc = sqlite3_step(m_stmt); // Throw an exception if the call to sqlite3_step() failed @@ -296,6 +275,35 @@ uint64_t SqliteStmt::getNbAffectedRows() const { return m_nbAffectedRows; } +//------------------------------------------------------------------------------ +// startDeferredTransactionIfNecessary +//------------------------------------------------------------------------------ +void SqliteStmt::startDeferredTransactionIfNecessary(const AutocommitMode autocommitMode) { + // PLEASE NOTE this method assumes a lock has been taken on m_conn.m_mutex + const bool autocommit = autocommitModeToBool(autocommitMode); + + if(m_conn.m_transactionInProgress && autocommit) { + throw exception::Exception("SqliteStmt does not support the execution of an AUTOCOMMIT_OFF statement followed an" + " AUTOCOMMIT_ON statement. Use commit() between the statements instead"); + } + + if(m_conn.m_transactionInProgress && !autocommit) { + beginDeferredTransaction(); + m_conn.m_transactionInProgress = true; + } +} + +//------------------------------------------------------------------------------ +// autoCommitModeToBool +//------------------------------------------------------------------------------ +bool SqliteStmt::autocommitModeToBool(const AutocommitMode autocommitMode) { + switch(autocommitMode) { + case AutocommitMode::AUTOCOMMIT_ON: return true; + case AutocommitMode::AUTOCOMMIT_OFF: return false; + default: throw exception::Exception("Unknown autocommit mode"); + } +} + //------------------------------------------------------------------------------ // beginDeferredTransaction //------------------------------------------------------------------------------ diff --git a/rdbms/wrapper/SqliteStmt.hpp b/rdbms/wrapper/SqliteStmt.hpp index 2dc3a3268874f216431dc9c2fd72ed7f5d23c6b8..be48bdd3f0b0d47bbddaa3999347be534fcda10c 100644 --- a/rdbms/wrapper/SqliteStmt.hpp +++ b/rdbms/wrapper/SqliteStmt.hpp @@ -45,11 +45,10 @@ public: * This method is called by the SqliteStmt::createStmt() method and assumes * that a lock has already been taken on SqliteStmt::m_mutex; * - * @param autocommitMode The autocommit mode of the statement. * @param conn The database connection. * @param sql The SQL statement. */ - SqliteStmt(const AutocommitMode autocommitMode, SqliteConn &conn, const std::string &sql); + SqliteStmt(SqliteConn &conn, const std::string &sql); /** * Destructor. @@ -119,14 +118,17 @@ public: /** * Executes the statement and returns the result set. * + * @param autocommitMode The autocommit mode of the statement. * @return The result set. */ - std::unique_ptr<Rset> executeQuery() override; + std::unique_ptr<Rset> executeQuery(const AutocommitMode autocommitMode) override; /** * Executes the statement. + * + * @param autocommitMode The autocommit mode of the statement. */ - void executeNonQuery() override; + void executeNonQuery(const AutocommitMode autocommitMode) override; /** * Returns the number of rows affected by the last execution of this @@ -158,6 +160,25 @@ private: */ uint64_t m_nbAffectedRows; + /** + * Starts a deferred transaction if necessary. + * + * PLEASE NOTE this method assumes a lock has been taken on m_conn.m_mutex. + * + * @param autocommitMode The autocommit mode of the statement. + */ + void startDeferredTransactionIfNecessary(const AutocommitMode autocommitMode); + + /** + * @param autocommitMode The autocommit mode of the statement. + * + * @return true if autocommitMode is AUTOCOMMIT_ON, false if autocommitMode + * is AUTOCOMMIT_OFF, else throws an exception. + * @throw exception::Exception if autocommitMode is neither AUTOCOMMIT_ON + * nor AUTOCOMMIT_OFF. + */ + static bool autocommitModeToBool(const AutocommitMode autocommitMode); + /** * Begins an SQLite deferred transaction. * diff --git a/rdbms/wrapper/SqliteStmtTest.cpp b/rdbms/wrapper/SqliteStmtTest.cpp index 6cd4182727de42382be7aa68c72519d18e4c4639..52b774689ca546c68b002b1f6264747749a559c8 100644 --- a/rdbms/wrapper/SqliteStmtTest.cpp +++ b/rdbms/wrapper/SqliteStmtTest.cpp @@ -43,7 +43,7 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, create_table) { // Create a connection a memory resident database SqliteConn conn(":memory:"); - // Assert that there are currently noi tables in the database + // Assert that there are currently no tables in the database { const char *const sql = "SELECT " @@ -52,8 +52,8 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, create_table) { "SQLITE_MASTER " "WHERE " "TYPE = 'table';"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - auto rset = stmt->executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt->executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); ASSERT_TRUE(rset->next()); const auto nbTables = rset->columnOptionalUint64("NB_TABLES"); ASSERT_TRUE((bool)nbTables); @@ -69,8 +69,8 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, create_table) { "COL1 TEXT," "COL2 TEXT," "COL3 INTEGER);"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - stmt->executeNonQuery(); + auto stmt = conn.createStmt(sql); + stmt->executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); } // Test for the existence of the test table @@ -82,8 +82,8 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, create_table) { "WHERE " "NAME = 'TEST1' AND " "TYPE = 'table';"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - auto rset = stmt->executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt->executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); ASSERT_TRUE(rset->next()); const auto nbTables = rset->columnOptionalUint64("NB_TABLES"); ASSERT_TRUE((bool)nbTables); @@ -100,8 +100,8 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, create_table) { "COL1 TEXT," "COL2 TEXT," "COL3 INTEGER);"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - stmt->executeNonQuery(); + auto stmt = conn.createStmt(sql); + stmt->executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); } // Test for the existence of the second test table @@ -113,8 +113,8 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, create_table) { "WHERE " "NAME = 'TEST2' AND " "TYPE = 'table';"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - auto rset = stmt->executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt->executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); ASSERT_TRUE(rset->next()); const auto nbTables = rset->columnOptionalUint64("NB_TABLES"); ASSERT_TRUE((bool)nbTables); @@ -146,8 +146,8 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, select_from_empty_table) { "COL1 TEXT," "COL2 TEXT," "COL3 INTEGER);"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - stmt->executeNonQuery(); + auto stmt = conn.createStmt(sql); + stmt->executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); ASSERT_EQ(1, conn.getTableNames().size()); ASSERT_EQ("TEST", conn.getTableNames().front()); } @@ -161,8 +161,8 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, select_from_empty_table) { "COL3 " "FROM " "TEST;"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - auto rset = stmt->executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt->executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); ASSERT_FALSE(rset->next()); } } @@ -182,8 +182,8 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, insert_without_bind) { "COL1 TEXT," "COL2 TEXT," "COL3 INTEGER);"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - stmt->executeNonQuery(); + auto stmt = conn.createStmt(sql); + stmt->executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); ASSERT_EQ(1, conn.getTableNames().size()); ASSERT_EQ("TEST", conn.getTableNames().front()); } @@ -199,8 +199,8 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, insert_without_bind) { "'one'," "'two'," "3);"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - stmt->executeNonQuery(); + auto stmt = conn.createStmt(sql); + stmt->executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); } // Select the row back from the table @@ -212,8 +212,8 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, insert_without_bind) { "COL3 AS COL3 " "FROM " "TEST;"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - auto rset = stmt->executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt->executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); ASSERT_TRUE(rset->next()); const auto col1 = rset->columnOptionalString("COL1"); @@ -248,8 +248,8 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, insert_with_bind) { "COL1 TEXT," "COL2 TEXT," "COL3 INTEGER);"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - stmt->executeNonQuery(); + auto stmt = conn.createStmt(sql); + stmt->executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); ASSERT_EQ(1, conn.getTableNames().size()); ASSERT_EQ("TEST", conn.getTableNames().front()); } @@ -265,11 +265,11 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, insert_with_bind) { ":COL1," ":COL2," ":COL3);"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt->bindString(":COL1", "one"); stmt->bindString(":COL2", "two"); stmt->bindUint64(":COL3", 3); - stmt->executeNonQuery(); + stmt->executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); } // Select the row back from the table @@ -281,8 +281,8 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, insert_with_bind) { "COL3 AS COL3 " "FROM " "TEST;"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - auto rset = stmt->executeQuery(); + auto stmt = conn.createStmt(sql); + auto rset = stmt->executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); ASSERT_TRUE(rset->next()); const auto col1 = rset->columnOptionalString("COL1"); @@ -316,8 +316,8 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, isolated_transaction) { "COL1 TEXT," "COL2 TEXT," "COL3 INTEGER);"; - auto stmt = connForCreate.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - stmt->executeNonQuery(); + auto stmt = connForCreate.createStmt(sql); + stmt->executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); ASSERT_EQ(1, connForCreate.getTableNames().size()); ASSERT_EQ("TEST", connForCreate.getTableNames().front()); } @@ -334,8 +334,8 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, isolated_transaction) { "'one'," "'two'," "3);"; - auto stmt = connForInsert.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - stmt->executeNonQuery(); + auto stmt = connForInsert.createStmt(sql); + stmt->executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); } // Count the number of rows in the table from within another connection @@ -348,8 +348,8 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, isolated_transaction) { "COUNT(*) AS NB_ROWS " "FROM " "TEST;"; - auto stmt = connForSelect.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - auto rset = stmt->executeQuery(); + auto stmt = connForSelect.createStmt(sql); + auto rset = stmt->executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_OFF); ASSERT_TRUE(rset->next()); const auto nbRows = rset->columnOptionalUint64("NB_ROWS"); @@ -375,8 +375,8 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, executeNonQuery_insert_violating_primar "CREATE TABLE TEST(" "COL1 INTEGER," "CONSTRAINT TEST_COL1_PK PRIMARY KEY(COL1));"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - stmt->executeNonQuery(); + auto stmt = conn.createStmt(sql); + stmt->executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); ASSERT_EQ(1, conn.getTableNames().size()); ASSERT_EQ("TEST", conn.getTableNames().front()); } @@ -388,9 +388,9 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, executeNonQuery_insert_violating_primar "COL1)" "VALUES(" ":COL1);"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt->bindUint64(":COL1", 1); - stmt->executeNonQuery(); + stmt->executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); } // Try to insert an identical row into the test table @@ -400,9 +400,9 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, executeNonQuery_insert_violating_primar "COL1)" "VALUES(" ":COL1);"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt->bindUint64(":COL1", 1); - ASSERT_THROW(stmt->executeNonQuery(), exception::DatabasePrimaryKeyError); + ASSERT_THROW(stmt->executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON), exception::DatabasePrimaryKeyError); } } @@ -421,8 +421,8 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, executeQuery_insert_violating_primary_k "CREATE TABLE TEST(" "COL1 INTEGER," "CONSTRAINT TEST_COL1_PK PRIMARY KEY(COL1));"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); - stmt->executeNonQuery(); + auto stmt = conn.createStmt(sql); + stmt->executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); ASSERT_EQ(1, conn.getTableNames().size()); ASSERT_EQ("TEST", conn.getTableNames().front()); } @@ -434,9 +434,9 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, executeQuery_insert_violating_primary_k "COL1)" "VALUES(" ":COL1);"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt->bindUint64(":COL1", 1); - stmt->executeNonQuery(); + stmt->executeNonQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); } // Try to insert an identical row into the test table @@ -446,9 +446,9 @@ TEST_F(cta_rdbms_wrapper_SqliteStmtTest, executeQuery_insert_violating_primary_k "COL1)" "VALUES(" ":COL1);"; - auto stmt = conn.createStmt(sql, rdbms::AutocommitMode::AUTOCOMMIT_ON); + auto stmt = conn.createStmt(sql); stmt->bindUint64(":COL1", 1); - auto rset = stmt->executeQuery(); + auto rset = stmt->executeQuery(rdbms::AutocommitMode::AUTOCOMMIT_ON); ASSERT_THROW(rset->next(), exception::DatabasePrimaryKeyError); } } diff --git a/rdbms/wrapper/Stmt.cpp b/rdbms/wrapper/Stmt.cpp index e6cd95dcff437d76a0f48256a30f92d1f309ac7c..33f73b81e4eeb637d5d022ac0c553e53c0caa1cb 100644 --- a/rdbms/wrapper/Stmt.cpp +++ b/rdbms/wrapper/Stmt.cpp @@ -26,9 +26,8 @@ namespace wrapper { //------------------------------------------------------------------------------ // constructor //------------------------------------------------------------------------------ -Stmt::Stmt(const std::string &sql, const AutocommitMode autocommitMode): +Stmt::Stmt(const std::string &sql): m_sql(sql), - m_autocommitMode(autocommitMode), m_paramNameToIdx(sql) { } @@ -45,13 +44,6 @@ const std::string &Stmt::getSql() const { return m_sql; } -//------------------------------------------------------------------------------ -// getAutocommitMode -//------------------------------------------------------------------------------ -AutocommitMode Stmt::getAutocommitMode() const noexcept { - return m_autocommitMode; -} - //------------------------------------------------------------------------------ // getParamIdx //------------------------------------------------------------------------------ diff --git a/rdbms/wrapper/Stmt.hpp b/rdbms/wrapper/Stmt.hpp index c4acf62b74a46859dd5669c7897f682cf49c213a..00b36a9f1a7db0d9ddc95b0ac6fe3bc4a82352a5 100644 --- a/rdbms/wrapper/Stmt.hpp +++ b/rdbms/wrapper/Stmt.hpp @@ -42,16 +42,8 @@ public: * Constructor. * * @param sql The SQL statement. - * @param autocommitMode The autocommit mode of the statement. */ - Stmt(const std::string &sql, const AutocommitMode autocommitMode); - - /** - * Returns the autocommit mode of teh statement. - * - * @return The autocommit mode of teh statement. - */ - AutocommitMode getAutocommitMode() const noexcept; + Stmt(const std::string &sql); /** * Destructor. @@ -162,14 +154,17 @@ public: /** * Executes the statement and returns the result set. * + * @param autocommitMode The autocommit mode of the statement. * @return The result set. */ - virtual std::unique_ptr<Rset> executeQuery() = 0; + virtual std::unique_ptr<Rset> executeQuery(const AutocommitMode autocommitMode) = 0; /** * Executes the statement. + * + * @param autocommitMode The autocommit mode of the statement. */ - virtual void executeNonQuery() = 0; + virtual void executeNonQuery(const AutocommitMode autocommitMode) = 0; /** * Returns the number of rows affected by the last execution of this @@ -200,11 +195,6 @@ private: */ std::string m_sql; - /** - * The autocommit mode of the statement. - */ - AutocommitMode m_autocommitMode; - /** * Map from SQL parameter name to parameter index. */