/* {{{ MySQL_Connection::rollback() -I- */ void MySQL_Connection::rollback() { CPP_ENTER_WL(intern->logger, "MySQL_Connection::rollback"); checkClosed(); proxy->rollback(); }
/* {{{ MySQL_Connection::getClientOption() -I- */ void MySQL_Connection::getClientOption(const sql::SQLString & optionName, void * optionValue) { CPP_ENTER_WL(intern->logger, "MySQL_Connection::getClientOption"); if (!optionName.compare("metadataUseInfoSchema")) { *(static_cast<bool *>(optionValue)) = intern->metadata_use_info_schema; } else if (!optionName.compare("defaultStatementResultType")) { *(static_cast<int *>(optionValue)) = intern->defaultStatementResultType; } else if (!optionName.compare("defaultPreparedStatementResultType")) { *(static_cast<int *>(optionValue)) = intern->defaultPreparedStatementResultType; } else if (!optionName.compare("multiByteMinLength")) { MY_CHARSET_INFO cs; proxy->get_character_set_info(&cs); *(static_cast<int *>(optionValue)) = cs.mbminlen; } else if (!optionName.compare("multiByteMaxLength")) { MY_CHARSET_INFO cs; proxy->get_character_set_info(&cs); *(static_cast<int *>(optionValue)) = cs.mbmaxlen; /* mysql_get_option() was added in mysql 5.7.3 version */ } else if ( proxy->get_server_version() >= 50703 ) { try { if (GET_CONN_OPTION(optionName, optionValue, intOptions)) { return; } else if (GET_CONN_OPTION(optionName, optionValue, booleanOptions)) { return; } else if (GET_CONN_OPTION(optionName, optionValue, stringOptions)) { return; } } catch (sql::SQLUnsupportedOptionException& e) { CPP_ERR_FMT("Unsupported option : %d:(%s) %s", proxy->errNo(), proxy->sqlstate().c_str(), proxy->error().c_str()); throw e; } } }
/* {{{ MySQL_Connection::commit() -I- */ void MySQL_Connection::commit() { CPP_ENTER_WL(intern->logger, "MySQL_Connection::commit"); checkClosed(); proxy->commit(); }
/* {{{ MySQL_Connection::getClientInfo() -I- */ sql::SQLString MySQL_Connection::getClientInfo() { const sql::SQLString clientInfo("cppconn"); CPP_ENTER_WL(intern->logger, "MySQL_Connection::getClientInfo"); return clientInfo; }
/* {{{ MySQL_Connection::getTransactionIsolation() -I- */ enum_transaction_isolation MySQL_Connection::getTransactionIsolation() { CPP_ENTER_WL(intern->logger, "MySQL_Connection::getTransactionIsolation"); checkClosed(); return intern->txIsolationLevel; }
/* {{{ MySQL_Connection::nativeSQL() -I- */ sql::SQLString MySQL_Connection::nativeSQL(const sql::SQLString& sql) { CPP_ENTER_WL(intern->logger, "MySQL_Connection::nativeSQL"); checkClosed(); return sql::SQLString(sql.c_str()); }
/* {{{ MySQL_Connection::getAutoCommit() -I- */ bool MySQL_Connection::getAutoCommit() { CPP_ENTER_WL(intern->logger, "MySQL_Connection::getAutoCommit"); checkClosed(); return intern->autocommit; }
/* {{{ MySQL_Connection::clearWarnings() -I- */ void MySQL_Connection::clearWarnings() { CPP_ENTER_WL(intern->logger, "MySQL_Connection::clearWarnings"); intern->warnings.reset(); }
/* {{{ MySQL_Connection::prepareStatement() -I- */ sql::PreparedStatement * MySQL_Connection::prepareStatement(const sql::SQLString& sql) { CPP_ENTER_WL(intern->logger, "MySQL_Connection::prepareStatement"); CPP_INFO_FMT("query=%s", sql.c_str()); checkClosed(); boost::shared_ptr< NativeAPI::NativeStatementWrapper > stmt; //TODO change - probably no need to catch and throw here. Logging can be done inside proxy try { stmt.reset(&proxy->stmt_init()); } catch (sql::SQLException& e) { CPP_ERR_FMT("No statement : %d:(%s) %s", proxy->errNo(), proxy->sqlstate().c_str(), proxy->error().c_str()); throw e; } if (stmt->prepare(sql)) { CPP_ERR_FMT("Cannot prepare %d:(%s) %s", stmt->errNo(), stmt->sqlstate().c_str(), stmt->error().c_str()); sql::SQLException e(stmt->error(), stmt->sqlstate(), stmt->errNo()); stmt.reset(); throw e; } return new MySQL_Prepared_Statement(stmt, this, intern->defaultPreparedStatementResultType, intern->logger); }
/* {{{ MySQL_Connection::setTransactionIsolation() -I- */ void MySQL_Connection::setTransactionIsolation(enum_transaction_isolation level) { CPP_ENTER_WL(intern->logger, "MySQL_Connection::setTransactionIsolation"); checkClosed(); const char * q; switch (level) { case TRANSACTION_SERIALIZABLE: q = "SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE"; break; case TRANSACTION_REPEATABLE_READ: q = "SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ"; break; case TRANSACTION_READ_COMMITTED: q = "SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED"; break; case TRANSACTION_READ_UNCOMMITTED: q = "SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED"; break; default: throw sql::InvalidArgumentException("MySQL_Connection::setTransactionIsolation()"); } intern->txIsolationLevel = level; service->executeUpdate(q); }
/* {{{ MySQL_Connection::getMetaData() -I- */ DatabaseMetaData * MySQL_Connection::getMetaData() { CPP_ENTER_WL(intern->logger, "MySQL_Connection::getMetaData"); checkClosed(); return intern->meta.get(); }
/* {{{ MySQL_Connection::getCatalog() -I- */ sql::SQLString MySQL_Connection::getCatalog() { CPP_ENTER_WL(intern->logger, "MySQL_Connection::getCatalog"); checkClosed(); return proxy->get_server_version() > 60006 ? "def" : ""; }
/* {{{ MySQL_Connection::prepareStatement() -U- */ sql::PreparedStatement * MySQL_Connection::prepareStatement(const sql::SQLString& /* sql */, int /* resultSetType */, int /* resultSetConcurrency */, int /* resultSetHoldability */) { CPP_ENTER_WL(intern->logger, "MySQL_Connection::prepareStatement"); checkClosed(); throw sql::MethodNotImplementedException("MySQL_Connection::prepareStatement(const sql::SQLString& sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)"); return NULL; // fool compiler }
/* {{{ MySQL_Connection::prepareStatement() -U- */ sql::PreparedStatement * MySQL_Connection::prepareStatement(const sql::SQLString& /* sql */, sql::SQLString /* columnNames*/ []) { CPP_ENTER_WL(intern->logger, "MySQL_Connection::prepareStatement"); checkClosed(); throw sql::MethodNotImplementedException("MySQL_Connection::prepareStatement(const sql::SQLString& sql, sql::SQLString columnNames[])"); return NULL; // fool compiler }
/* {{{ MySQL_Connection::setAutoCommit() -I- */ void MySQL_Connection::setAutoCommit(bool autoCommit) { CPP_ENTER_WL(intern->logger, "MySQL_Connection::setAutoCommit"); checkClosed(); proxy->autocommit(autoCommit); intern->autocommit = autoCommit; }
/* {{{ MySQL_Connection::checkClosed() -I- */ void MySQL_Connection::checkClosed() { CPP_ENTER_WL(intern->logger, "MySQL_Connection::checkClosed"); if (!intern->is_valid) { throw sql::SQLException("Connection has been closed"); } }
/* {{{ MySQL_Connection::getLastStatementInfo() -I- */ sql::SQLString MySQL_Connection::getLastStatementInfo() { CPP_ENTER_WL(intern->logger, "MySQL_Connection::getLastStatementInfo"); checkClosed(); return proxy->info(); }
/* {{{ MySQL_Connection::isReadOnly() -U- */ bool MySQL_Connection::isReadOnly() { CPP_ENTER_WL(intern->logger, "MySQL_Connection::isReadOnly"); checkClosed(); throw sql::MethodNotImplementedException("MySQL_Connection::isReadOnly"); return false; // fool compiler }
/* {{{ MySQL_Connection::setSavepoint() -U- */ Savepoint * MySQL_Connection::setSavepoint() { CPP_ENTER_WL(intern->logger, "MySQL_Connection::setSavepoint"); checkClosed(); throw sql::MethodNotImplementedException("Please use MySQL_Connection::setSavepoint(const sql::SQLString& name)"); return NULL; }
/* {{{ MySQL_Connection::prepareStatement() -U- */ sql::PreparedStatement * MySQL_Connection::prepareStatement(const sql::SQLString& /* sql */, int /* autoGeneratedKeys */) { CPP_ENTER_WL(intern->logger, "MySQL_Connection::prepareStatement"); checkClosed(); throw sql::MethodNotImplementedException("MySQL_Connection::prepareStatement(const sql::SQLString& sql, int autoGeneratedKeys)"); return NULL; // fool compiler }
/* {{{ MySQL_Connection::close() -I- */ void MySQL_Connection::close() { CPP_ENTER_WL(intern->logger, "MySQL_Connection::close"); checkClosed(); proxy.reset(); clearWarnings(); intern->is_valid = false; }
/* {{{ MySQL_Connection::setClientOption() -I- */ sql::Connection * MySQL_Connection::setClientOption(const sql::SQLString & optionName, const sql::SQLString & optionValue) { CPP_ENTER_WL(intern->logger, "MySQL_Connection::setClientOption"); if (!optionName.compare("characterSetResults")) { setSessionVariable("character_set_results", optionValue); } return this; }
/* {{{ MySQL_Connection::isClosed() -I- */ bool MySQL_Connection::isClosed() { CPP_ENTER_WL(intern->logger, "MySQL_Connection::isClosed"); if (intern->is_valid) { return false; } return true; }
/* {{{ MySQL_Connection::getSchema() -I- */ sql::SQLString MySQL_Connection::getSchema() { CPP_ENTER_WL(intern->logger, "MySQL_Connection::getSchema"); checkClosed(); boost::scoped_ptr< sql::Statement > stmt(createStatement()); boost::scoped_ptr< sql::ResultSet > rset(stmt->executeQuery("SELECT DATABASE()")); //SELECT SCHEMA() rset->next(); return rset->getString(1); }
/* {{{ MySQL_Connection::setSchema() -I- (not part of JDBC) */ void MySQL_Connection::setSchema(const sql::SQLString& catalog) { CPP_ENTER_WL(intern->logger, "MySQL_Connection::setCatalog"); checkClosed(); sql::SQLString sql("USE `"); sql.append(catalog).append("`"); boost::scoped_ptr< sql::Statement > stmt(createStatement()); stmt->execute(sql); }
/* {{{ MySQL_Connection::getWarnings() -I- */ const SQLWarning * MySQL_Connection::getWarnings() { CPP_ENTER_WL(intern->logger, "MySQL_Connection::getWarnings"); checkClosed(); clearWarnings(); intern->warnings.reset(loadMysqlWarnings(this)); return intern->warnings.get(); }
/* {{{ MySQL_Connection::isClosed() -I- */ bool MySQL_Connection::isClosed() { CPP_ENTER_WL(intern->logger, "MySQL_Connection::isClosed"); if (intern->is_valid) { if (!proxy->ping()) { return false; } close(); } return true; }
/* {{{ MySQL_Connection::rollback() -I- */ void MySQL_Connection::rollback(Savepoint * savepoint) { CPP_ENTER_WL(intern->logger, "MySQL_Connection::rollback"); checkClosed(); if (getAutoCommit()) { throw sql::InvalidArgumentException("The connection is in autoCommit mode"); } sql::SQLString sql("ROLLBACK TO SAVEPOINT "); sql.append(savepoint->getSavepointName()); boost::scoped_ptr< sql::Statement > stmt(createStatement()); stmt->execute(sql); }
/* {{{ MySQL_Connection::getClientOption() -I- */ void MySQL_Connection::getClientOption(const sql::SQLString & optionName, void * optionValue) { CPP_ENTER_WL(intern->logger, "MySQL_Connection::getClientOption"); if (!optionName.compare("metadataUseInfoSchema")) { *(static_cast<bool *>(optionValue)) = intern->metadata_use_info_schema; } else if (!optionName.compare("defaultStatementResultType")) { *(static_cast<int *>(optionValue)) = intern->defaultStatementResultType; } else if (!optionName.compare("defaultPreparedStatementResultType")) { *(static_cast<int *>(optionValue)) = intern->defaultPreparedStatementResultType; } else if (!optionName.compare("characterSetResults")) { *(static_cast<sql::SQLString **>(optionValue)) = new sql::SQLString(getSessionVariable("characterSetResults")); } }
/* {{{ MySQL_Connection::releaseSavepoint() -I- */ void MySQL_Connection::releaseSavepoint(Savepoint * savepoint) { CPP_ENTER_WL(intern->logger, "MySQL_Connection::releaseSavepoint"); checkClosed(); if (proxy->get_server_version() < 50001) { throw sql::MethodNotImplementedException("releaseSavepoint not available in this server version"); } if (getAutoCommit()) { throw sql::InvalidArgumentException("The connection is in autoCommit mode"); } sql::SQLString sql("RELEASE SAVEPOINT "); sql.append(savepoint->getSavepointName()); boost::scoped_ptr<sql::Statement> stmt(createStatement()); stmt->execute(sql); }