modules/mod_mysql_session.h (102 lines of code) (raw):

/* * Copyright (c) 2015, 2024, Oracle and/or its affiliates. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2.0, * as published by the Free Software Foundation. * * This program is designed to work with certain software (including * but not limited to OpenSSL) that is licensed under separate terms, * as designated in a particular file or component or in included license * documentation. The authors of MySQL hereby grant you an additional * permission to link the program and your derivative works with the * separately licensed software that they have either included with * the program or referenced in the documentation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See * the GNU General Public License, version 2.0, for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ // Interactive session access module // Exposed as "session" in the shell #ifndef _MOD_SESSION_H_ #define _MOD_SESSION_H_ #include <memory> #include "modules/mod_common.h" #include "mysqlshdk/libs/db/connection_options.h" #include "mysqlshdk/libs/db/mysql/session.h" #include "scripting/types.h" #include "scripting/types_cpp.h" #include "shellcore/base_session.h" #include "shellcore/ishell_core.h" namespace shcore { class Shell_core; class Proxy_object; } // namespace shcore namespace mysqlsh { class DatabaseObject; namespace mysql { class ClassicSchema; class ClassicResult; class Connection; /** * \ingroup ShellAPI * $(CLASSICSESSION_BRIEF) * * $(CLASSICSESSION_DETAIL) */ #if DOXYGEN_JS /** * \snippet mysql_session.js ClassicSession: SQL execution example */ #elif DOXYGEN_PY /** * \snippet mysql_session.py ClassicSession: SQL execution example */ #endif class SHCORE_PUBLIC ClassicSession : public ShellBaseSession, public std::enable_shared_from_this<ClassicSession> { public: ClassicSession(); explicit ClassicSession( std::shared_ptr<mysqlshdk::db::mysql::Session> session); ClassicSession(const ClassicSession &session); virtual ~ClassicSession(); // Virtual methods from object bridge std::string class_name() const override { return "ClassicSession"; }; shcore::Value get_member(const std::string &prop) const override; // Virtual methods from ISession void connect(const mysqlshdk::db::Connection_options &data) override; void close() override; void create_schema(const std::string &name) override; void drop_schema(const std::string &name) override; void set_current_schema(const std::string &name) override; void start_transaction() override; void commit() override; void rollback() override; std::string get_current_schema() override; std::shared_ptr<ClassicResult> _start_transaction(); std::shared_ptr<ClassicResult> _commit(); std::shared_ptr<ClassicResult> _rollback(); std::shared_ptr<ClassicResult> query(const std::string &query, const shcore::Array_t &args = {}); std::shared_ptr<ClassicResult> run_sql(const std::string &query, const shcore::Array_t &args = {}); shcore::Value::Map_type_ref get_status() override; std::string db_object_exists(std::string &type, const std::string &name, const std::string &owner) override; static std::shared_ptr<shcore::Object_bridge> create( const mysqlshdk::db::Connection_options &co); std::shared_ptr<mysqlshdk::db::ISession> get_core_session() const override { return _session; } mysqlshdk::db::mysql::Session *session() const; uint64_t get_connection_id() const override; std::string query_one_string(const std::string &query, int field = 0) override; std::string get_ssl_cipher() const override; std::shared_ptr<mysqlshdk::db::IResult> execute_sql( const std::string &query, const shcore::Array_t &args = {}) override; socket_t _get_socket_fd() const; public: SessionType session_type() const override { return SessionType::Classic; } void kill_query() override; #if DOXYGEN_JS String uri; //!< $(CLASSICSESSION_GETURI_BRIEF) String sshUri; //!< $(CLASSICSESSION_GETSSHURI_BRIEF) String getUri(); String getSshUri(); ClassicResult runSql(String query, Array args = []); ClassicResult query(String query, Array args = []); Undefined close(); ClassicResult startTransaction(); ClassicResult commit(); ClassicResult rollback(); Bool isOpen(); #elif DOXYGEN_PY str uri; //!< Same as get_uri() str ssh_uri; //!< Same as get_ssh_uri() str get_uri(); str get_ssh_uri(); ClassicResult run_sql(str query, list args = []); ClassicResult query(str query, list args = []); None close(); ClassicResult start_transaction(); ClassicResult commit(); ClassicResult rollback(); bool is_open(); #endif bool is_open() const override; private: void init(); std::shared_ptr<mysqlshdk::db::mysql::Session> _session; }; } // namespace mysql } // namespace mysqlsh #endif