Main Page Namespace List Class Hierarchy Compound List File List Namespace Members Compound Members

# connection.h

Go to the documentation of this file.

    00001
    00002
    00003
    00004
    00005
    00006
    00007
    00008
    00009
    00010
    00011 /***********************************************************************
    00012  Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by
    00013  MySQL AB, and (c) 2004-2006 by Educational Technology Resources, Inc.
    00014  Others may also hold copyrights on code in this file.  See the CREDITS
    00015  file in the top directory of the distribution for details.
    00016
    00017  This file is part of MySQL++.
    00018
    00019  MySQL++ is free software; you can redistribute it and/or modify it
    00020  under the terms of the GNU Lesser General Public License as published
    00021  by the Free Software Foundation; either version 2.1 of the License, or
    00022  (at your option) any later version.
    00023
    00024  MySQL++ is distributed in the hope that it will be useful, but WITHOUT
    00025  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    00026  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
    00027  License for more details.
    00028
    00029  You should have received a copy of the GNU Lesser General Public
    00030  License along with MySQL++; if not, write to the Free Software
    00031  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
    00032  USA
    00033 ***********************************************************************/
    00034
    00035 #ifndef MYSQLPP_CONNECTION_H
    00036 #define MYSQLPP_CONNECTION_H
    00037
    00038 #include "platform.h"
    00039
    00040 #include "defs.h"
    00041
    00042 #include "lockable.h"
    00043 #include "noexceptions.h"
    00044
    00045 #include <mysql.h>
    00046
    00047 #include <deque>
    00048 #include <string>
    00049
    00050 namespace mysqlpp {
    00051
    00052 class Query;
    00053
    00055
    00056 class Connection : public OptionalExceptions, public Lockable
    00057 {
    00058 public:
    00060         enum OptionArgType {
    00061                 opt_type_none,
    00062                 opt_type_string,
    00063                 opt_type_integer,
    00064                 opt_type_boolean
    00065         };
    00066
    00072         enum Option
    00073         {
    00074                 // Symbolic "first" option, before real options.  Never send
    00075                 // this to set_option()!
    00076                 opt_FIRST = -1,
    00077
    00078                 opt_connect_timeout = 0,
    00079                 opt_compress,
    00080                 opt_named_pipe,
    00081                 opt_init_command,
    00082                 opt_read_default_file,
    00083                 opt_read_default_group,
    00084                 opt_set_charset_dir,
    00085                 opt_set_charset_name,
    00086                 opt_local_infile,
    00087                 opt_protocol,
    00088                 opt_shared_memory_base_name,
    00089                 opt_read_timeout,
    00090                 opt_write_timeout,
    00091                 opt_use_result,
    00092                 opt_use_remote_connection,
    00093                 opt_use_embedded_connection,
    00094                 opt_guess_connection,
    00095                 opt_set_client_ip,
    00096                 opt_secure_auth,
    00097
    00098                 // Set multi-query statement support; no argument
    00099                 opt_multi_statements,
    00100
    00101                 // Set reporting of data truncation errors
    00102                 opt_report_data_truncation,
    00103
    00104                 // Enable or disable automatic reconnection to the server if
    00105                 // the connection is found to have been lost.
    00106                 opt_reconnect,
    00107
    00108                 // Number of options supported.  Never send this to
    00109                 // set_option()!
    00110                 opt_COUNT
    00111         };
    00112
    00116         MYSQLPP_EXPORT Connection(bool te = true);
    00117
    00144         MYSQLPP_EXPORT Connection(const char* db, const char* host = "",
    00145                         const char* user = "", const char* passwd = "",
    00146                         uint port = 0, my_bool compress = 0,
    00147                         unsigned int connect_timeout = 60, cchar* socket_name = 0,
    00148                         unsigned int client_flag = 0);
    00149
    00151         MYSQLPP_EXPORT ~Connection();
    00152
    00161         MYSQLPP_EXPORT bool connect(cchar* db = "", cchar* host = "",
    00162                         cchar* user = "", cchar* passwd = "", uint port = 0,
    00163                         my_bool compress = 0, unsigned int connect_timeout = 60,
    00164                         cchar* socket_name = 0, unsigned int client_flag = 0);
    00165
    00169         void close()
    00170         {
    00171                 mysql_close(&mysql_);
    00172                 is_connected_ = false;
    00173         }
    00174
    00177         MYSQLPP_EXPORT std::string info();
    00178
    00182         bool connected() const
    00183         {
    00184                 return is_connected_;
    00185         }
    00186
    00188         bool success() const
    00189         {
    00190                 return success_;
    00191         }
    00192
    00194         void purge() { close(); }
    00195
    00203         MYSQLPP_EXPORT Query query();
    00204
    00220         operator bool() { return success(); }
    00221
    00226         const char* error()
    00227         {
    00228                 return mysql_error(&mysql_);
    00229         }
    00230
    00235         int errnum() { return mysql_errno(&mysql_); }
    00236
    00245         int refresh(unsigned int refresh_options)
    00246         {
    00247                 return mysql_refresh(&mysql_, refresh_options);
    00248         }
    00249
    00261         int ping();
    00262
    00268         int kill(unsigned long pid)
    00269         {
    00270                 return mysql_kill(&mysql_, pid);
    00271         }
    00272
    00276         std::string client_info()
    00277         {
    00278                 return std::string(mysql_get_client_info());
    00279         }
    00280
    00287         std::string host_info()
    00288         {
    00289                 return std::string(mysql_get_host_info(&mysql_));
    00290         }
    00291
    00296         int proto_info()
    00297         {
    00298                 return mysql_get_proto_info(&mysql_);
    00299         }
    00300
    00304         std::string server_info()
    00305         {
    00306                 return std::string(mysql_get_server_info(&mysql_));
    00307         }
    00308
    00315         std::string stat()
    00316         {
    00317                 return std::string(mysql_stat(&mysql_));
    00318         }
    00319
    00325         MYSQLPP_EXPORT bool create_db(const std::string& db);
    00326
    00332         MYSQLPP_EXPORT bool drop_db(const std::string& db);
    00333
    00335         bool select_db(const std::string& db)
    00336         {
    00337                 return select_db(db.c_str());
    00338         }
    00339
    00341         MYSQLPP_EXPORT bool select_db(const char* db);
    00342
    00350         MYSQLPP_EXPORT bool reload();
    00351
    00357         MYSQLPP_EXPORT bool shutdown();
    00358
    00360         st_mysql_options get_options() const
    00361         {
    00362                 return mysql_.options;
    00363         }
    00364
    00397         MYSQLPP_EXPORT bool set_option(Option option);
    00398
    00400         MYSQLPP_EXPORT bool set_option(Option option, const char* arg);
    00401
    00403         MYSQLPP_EXPORT bool set_option(Option option, unsigned int arg);
    00404
    00406         MYSQLPP_EXPORT bool set_option(Option option, bool arg);
    00407
    00420         MYSQLPP_EXPORT void enable_ssl(const char* key = 0,
    00421                         const char* cert = 0, const char* ca = 0,
    00422                         const char* capath = 0, const char* cipher = 0);
    00423
    00427         my_ulonglong affected_rows()
    00428         {
    00429                 return mysql_affected_rows(&mysql_);
    00430         }
    00431
    00438         my_ulonglong insert_id()
    00439         {
    00440                 return mysql_insert_id(&mysql_);
    00441         }
    00442
    00447         std::ostream& api_version(std::ostream& os);
    00448
    00449 protected:
    00455         MYSQLPP_EXPORT void disconnect();
    00456
    00462         bool option_pending(Option option, bool arg) const;
    00463
    00469         void apply_pending_options();
    00470
    00472         bool bad_option(Option option, OptionArgType type);
    00473
    00475         bool bad_option_type(Option option);
    00476
    00478         bool bad_option_value(Option option);
    00479
    00481         OptionArgType option_arg_type(Option option);
    00482
    00488         bool set_option_impl(mysql_option moption, const void* arg = 0);
    00489
    00490 #if MYSQL_VERSION_ID >= 40101
    00496         bool set_option_impl(enum_mysql_set_option msoption);
    00497 #endif
    00498
    00499 private:
    00500         friend class ResNSel;
    00501         friend class ResUse;
    00502         friend class Query;
    00503
    00504         struct OptionInfo {
    00505                 Option option;
    00506                 OptionArgType arg_type;
    00507                 std::string str_arg;
    00508                 unsigned int int_arg;
    00509                 bool bool_arg;
    00510
    00511                 OptionInfo(Option o) :
    00512                 option(o),
    00513                 arg_type(opt_type_none),
    00514                 int_arg(0),
    00515                 bool_arg(false)
    00516                 {
    00517                 }
    00518
    00519                 OptionInfo(Option o, const char* a) :
    00520                 option(o),
    00521                 arg_type(opt_type_string),
    00522                 str_arg(a),
    00523                 int_arg(0),
    00524                 bool_arg(false)
    00525                 {
    00526                 }
    00527
    00528                 OptionInfo(Option o, unsigned int a) :
    00529                 option(o),
    00530                 arg_type(opt_type_integer),
    00531                 int_arg(a),
    00532                 bool_arg(false)
    00533                 {
    00534                 }
    00535
    00536                 OptionInfo(Option o, bool a) :
    00537                 option(o),
    00538                 arg_type(opt_type_boolean),
    00539                 int_arg(0),
    00540                 bool_arg(a)
    00541                 {
    00542                 }
    00543         };
    00544
    00545         MYSQL mysql_;
    00546         bool is_connected_;
    00547         bool connecting_;
    00548         bool success_;
    00549         std::deque<OptionInfo> pending_options_;
    00550         static OptionArgType legal_opt_arg_types_[];
    00551 };
    00552
    00553
    00554 } // end namespace mysqlpp
    00555
    00556 #endif
    00557