Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File 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, 2005 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                 // Number of options supported.  Never send this to
00105                 // set_option()!
00106                 opt_COUNT
00107         };
00108 
00112         MYSQLPP_EXPORT Connection(bool te = true);
00113 
00140         MYSQLPP_EXPORT Connection(const char* db, const char* host = "",
00141                         const char* user = "", const char* passwd = "",
00142                         uint port = 0, my_bool compress = 0,
00143                         unsigned int connect_timeout = 60, cchar* socket_name = 0,
00144                         unsigned int client_flag = 0);
00145 
00147         MYSQLPP_EXPORT ~Connection();
00148 
00157         MYSQLPP_EXPORT bool connect(cchar* db = "", cchar* host = "",
00158                         cchar* user = "", cchar* passwd = "", uint port = 0,
00159                         my_bool compress = 0, unsigned int connect_timeout = 60,
00160                         cchar* socket_name = 0, unsigned int client_flag = 0);
00161 
00165         void close()
00166         {
00167                 mysql_close(&mysql_);
00168                 is_connected_ = false;
00169         }
00170         
00173         MYSQLPP_EXPORT std::string info();
00174 
00178         bool connected() const
00179         {
00180                 return is_connected_;
00181         }
00182 
00184         bool success() const
00185         {
00186                 return success_;
00187         }
00188 
00190         void purge() { close(); }
00191 
00199         MYSQLPP_EXPORT Query query();
00200 
00216         operator bool() { return success(); }
00217 
00222         const char* error()
00223         {
00224                 return mysql_error(&mysql_);
00225         }
00226 
00231         int errnum() { return mysql_errno(&mysql_); }
00232 
00241         int refresh(unsigned int refresh_options)
00242         {
00243                 return mysql_refresh(&mysql_, refresh_options);
00244         }
00245 
00256         int ping() { return mysql_ping(&mysql_); }
00257 
00263         int kill(unsigned long pid)
00264         {
00265                 return mysql_kill(&mysql_, pid);
00266         }
00267 
00271         std::string client_info()
00272         {
00273                 return std::string(mysql_get_client_info());
00274         }
00275 
00282         std::string host_info()
00283         {
00284                 return std::string(mysql_get_host_info(&mysql_));
00285         }
00286 
00291         int proto_info() 
00292         {
00293                 return mysql_get_proto_info(&mysql_);
00294         }
00295 
00299         std::string server_info()
00300         {
00301                 return std::string(mysql_get_server_info(&mysql_));
00302         }
00303 
00310         std::string stat()
00311         {
00312                 return std::string(mysql_stat(&mysql_));
00313         }
00314 
00320         MYSQLPP_EXPORT bool create_db(const std::string& db);
00321 
00327         MYSQLPP_EXPORT bool drop_db(const std::string& db);
00328 
00330         bool select_db(const std::string& db)
00331         {
00332                 return select_db(db.c_str());
00333         }
00334 
00336         MYSQLPP_EXPORT bool select_db(const char* db);
00337 
00345         MYSQLPP_EXPORT bool reload();
00346         
00352         MYSQLPP_EXPORT bool shutdown();
00353 
00355         st_mysql_options get_options() const
00356         {
00357                 return mysql_.options;
00358         }
00359 
00392         MYSQLPP_EXPORT bool set_option(Option option);
00393 
00395         MYSQLPP_EXPORT bool set_option(Option option, const char* arg);
00396 
00398         MYSQLPP_EXPORT bool set_option(Option option, unsigned int arg);
00399 
00401         MYSQLPP_EXPORT bool set_option(Option option, bool arg);
00402 
00415         MYSQLPP_EXPORT void enable_ssl(const char* key = 0,
00416                         const char* cert = 0, const char* ca = 0,
00417                         const char* capath = 0, const char* cipher = 0);
00418 
00422         my_ulonglong affected_rows()
00423         {
00424                 return mysql_affected_rows(&mysql_);
00425         }
00426 
00433         my_ulonglong insert_id()
00434         {
00435                 return mysql_insert_id(&mysql_);
00436         }
00437 
00442         std::ostream& api_version(std::ostream& os);
00443 
00444 protected:
00450         MYSQLPP_EXPORT void disconnect();
00451 
00457         bool option_pending(Option option, bool arg) const;
00458 
00464         void apply_pending_options();
00465 
00467         bool bad_option(Option option, OptionArgType type);
00468 
00470         bool bad_option_type(Option option);
00471 
00473         bool bad_option_value(Option option);
00474 
00476         OptionArgType option_arg_type(Option option);
00477 
00483         bool set_option_impl(mysql_option moption, const void* arg = 0);
00484 
00485 #if MYSQL_VERSION_ID >= 40101
00491         bool set_option_impl(enum_mysql_set_option msoption);
00492 #endif
00493 
00494 private:
00495         friend class ResNSel;
00496         friend class ResUse;
00497         friend class Query;
00498 
00499         struct OptionInfo {
00500                 Option option;
00501                 OptionArgType arg_type;
00502                 std::string str_arg;
00503                 unsigned int int_arg;
00504                 bool bool_arg;
00505 
00506                 OptionInfo(Option o) :
00507                 option(o),
00508                 arg_type(opt_type_none),
00509                 int_arg(0),
00510                 bool_arg(false)
00511                 {
00512                 }
00513 
00514                 OptionInfo(Option o, const char* a) :
00515                 option(o),
00516                 arg_type(opt_type_string),
00517                 str_arg(a),
00518                 int_arg(0),
00519                 bool_arg(false)
00520                 {
00521                 }
00522 
00523                 OptionInfo(Option o, unsigned int a) :
00524                 option(o),
00525                 arg_type(opt_type_integer),
00526                 int_arg(a),
00527                 bool_arg(false)
00528                 {
00529                 }
00530 
00531                 OptionInfo(Option o, bool a) :
00532                 option(o),
00533                 arg_type(opt_type_boolean),
00534                 int_arg(0),
00535                 bool_arg(a)
00536                 {
00537                 }
00538         };
00539 
00540         MYSQL mysql_;
00541         bool is_connected_;
00542         bool connecting_;
00543         bool success_;
00544         std::deque<OptionInfo> pending_options_;
00545         static OptionArgType legal_opt_arg_types_[];
00546 };
00547 
00548 
00549 } // end namespace mysqlpp
00550 
00551 #endif
00552 

Generated on Wed Sep 28 07:44:06 2005 for MySQL++ by doxygen1.2.18