Sophie

Sophie

distrib > Mandriva > 10.0-com > i586 > by-pkgid > a86327fd014dc28b8b792dc8f310a4d6 > files > 106

libhk_classes5-devel-0.6.2a-3mdk.i586.rpm

<HTML>
<HEAD>
<TITLE>Source: hk_classes/hk_classes/hk_connection.h</TITLE>

<META NAME="Generator" CONTENT="KDOC ">
</HEAD>
<BODY bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#000099" alink= "#ffffff">
<TABLE WIDTH="100%" BORDER="0">
<TR>
<TD>
	<TABLE BORDER="0">
		<TR><TD valign="top" align="left" cellspacing="10">
		<h1>Source: hk_classes/hk_classes/hk_connection.h</h1>
		</TD>
		<TD valign="top" align="right" colspan="1"></TD></TR>
	</TABLE>
	<HR>
	<TABLE BORDER="0">
		
	</TABLE>
	</TD>
<TD align="right"><TABLE BORDER="0"><TR><TD><small><A HREF="index-long.html">Annotated List</A></small></TD></TR>
<TR><TD><small><A HREF="header-list.html">Files</A></small></TD></TR>
<TR><TD><small><A HREF="all-globals.html">Globals</A></small></TD></TR>
<TR><TD><small><A HREF="hier.html">Hierarchy</A></small></TD></TR>
<TR><TD><small><A HREF="index.html">Index</A></small></TD></TR>
</TABLE></TD></TR></TABLE>
<pre>
// ****************************************************************************
// copyright (c) 2000-2002 Horst Knorr <hk_classes@knoda.org>
// This file is part of the hk_classes library.
// This file may be distributed and/or modified under the terms of the
// GNU Library Public License version 2 as published by the Free Software
// Foundation and appearing in the file COPYING included in the
// packaging of this file.
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
// ****************************************************************************
#ifndef HK_CONNECTION
#define HK_CONNECTION
#include "hk_class.h"
#include <list>
#include <vector>
#include <algorithm>
using namespace std;
class hk_drivermanager;
class hk_connectionprivate;

class hk_database;
/**
 *@short connects to the SQL Server
 *@version $Revision: 1.2 $
 *@author Horst Knorr (hk_classes@knoda.org)
 *
 *connects to the SQL Server. Set @ref set_host,@ref set_user, @ref set_password ,
 *@ref set_tcp_port if necessary and then call @ref connect.

 */
class hk_connection:public hk_class
{
    friend class hk_database;
    friend class hk_drivermanager;
    public:
/**
 * When the connection will be destroyed, the database created with @ref new_database() and all
 * its children will be destroyed
 **/
        virtual     ~hk_connection();
/**
 * name of the host where the SQL Server is. Default is "localhost".
 */
        void    set_host(const hk_string& h);
        hk_string   host(void);
/**
 * user name for the SQL Server.
 */
        void    set_user(const hk_string& u);
        hk_string   user(void);
/**
 * password for the SQL Server
 */
        void    set_password(const hk_string& p);
        hk_string   password(void);
/**
 *  TCP Port number of the SQL Server. Default is 3306.
 */
        void        set_tcp_port(unsigned int t);
        unsigned int    tcp_port(void);
/**
 * returns the default tcp port of the the database driver;
 */
        virtual unsigned int    default_tcp_port(void) const;
/**
 * tries to connect to the SQL Server. If some information is missing (i.e. password)
 * a dialog will ask for these values. You can set a GUI dependend dialog with @ref set_passworddialog
 * @return true if connecting was successful, else false.
 */
        bool    connect(enum_interaction c=interactive);
/**
 * disconnects from the SQL Server
 * @return true if successful.
 */
        bool    disconnect(void);
/**
 *@return true  if @ref connect was successful
 */
        bool    is_connected(void);
/**
 *if connected it returns a hk_stringlist of all existing databases on the SQL Server.
 *The list will be created new every time you call this function.
 *So be careful. Never use i.e. for_each(dblist()->begin(),dblist()->end(),anyfunction)
 *Use instead:
 *list<hk_string>* mylist=dblist();
 *for_each(mylist->begin(),mylist->end(),anyfunction)

 */
        vector<hk_string>* dblist(void);
/**
 * if you want to use a database on the SQL Server create a hk_database element
 * with this class. For each connection you can define one database. If you define another
 * one the old one will be destroyed.

 */
        hk_database* new_database(const hk_string& name="");

	bool rename_database(const hk_string& originalname, const hk_string& new_name);
/**
 *see also @ref serversupports. Defines what abilities and fieldtypes a database driver supports
 */
        enum support_enum
        {
            SUPPORTS_AUTOINCCOLUMN=1,
            SUPPORTS_BOOLCOLUMN=2,
            SUPPORTS_DATECOLUMN=3,
            SUPPORTS_TIMECOLUMN=4,
            SUPPORTS_DATETIMECOLUMN=5,
            SUPPORTS_BINARYCOLUMN=6,
            SUPPORTS_MEMOCOLUMN=7,
            SUPPORTS_TIMESTAMPCOLUMN=8,

            SUPPORTS_SQL=100,
            SUPPORTS_TRANSACTIONS=101,
            SUPPORTS_REFERENTIALINTEGRITY=102,
            SUPPORTS_NEW_DATABASE=103,
            SUPPORTS_DELETE_DATABASE=104,
            SUPPORTS_NEW_TABLE=105,
            SUPPORTS_ALTER_TABLE=106,
            SUPPORTS_DELETE_TABLE=107,
            SUPPORTS_CREATE_INDEX=108,
            SUPPORTS_DELETE_INDEX=109,
            SUPPORTS_CHANGE_PASSWORD=110,
            SUPPORTS_RENAME_DATABASE=111,
            SUPPORTS_RENAME_TABLE=112
        };

/**
 *give information about the database server. See @ref hk_definitions.h for details
 */
        virtual bool server_supports(support_enum){return false;}
/**
 *see @ref server_needs
 */
        enum need_enum
        {

            NEEDS_NOTHING=0,
            NEEDS_HOST=1,
            NEEDS_USERNAME=2,
            NEEDS_PASSWORD=3,
            NEEDS_SQLDELIMITER=4,
            NEEDS_PORT=5,
            NEEDS_DATABASENAME=6,
	    NEEDS_BOOLEANEMULATION=7,//e.g. Mysql  doesn't have natively a boolean type, so tinyint is used
	    NEEDS_NULL_TERMINATED_SQL=8 //e.g. Postgres needs null terminated strings in PQExec
        };
/**
 *shows what information the database server needs (e.g. password).
 */
        virtual bool server_needs(need_enum){return false;}
/**
 * the passworddialog will be called from @ref connect if necessary. You can define a GUI dependend
 *dialog and set it with this function. What exactly is asked in the dialog is database driver dependend
 *(i.e. the Mysql driver needs user, password, host and tcp_port)
 */
        static  void    set_passworddialog(password_dialogtype*);
/**
 * tries to create a new database. If successful it returns true else false
 */
        bool    create_database(const hk_string& dbase);
/**
 * tries to delete a database.
 *@param dbase name of an existing database
 *@return true if successful else flase
 */
        bool    delete_database(const hk_string& dbase);
/**
 * checks whether a database exists
 */
        bool    database_exists(const hk_string& databasename);
/**
 * sets a new password at the SQL server.
 *@param newpassword the new password
 *@return true if successful else flase

 */
        bool set_newpassword(const hk_string& newpassword);
/**
 *shows a password dialog and sets the new password by calling @ref set_newpassword
 *If no passworddialog is set with @ref set_newpassworddialog the necessary information
 *will be queried at the standard output
 */
        void show_newpassworddialog(void);
/**
 * It is possible to define a newpassworddialog,
 * which will be shown when @ref set_newpassword is called
 */
        static void set_newpassworddialog(newpassword_dialogtype*);
/*
 *shows a password dialog
 *@return false if it has been cancelled else true
 */
        bool show_passworddialog(void);
/**
 *returns the name of the driver (e.g Mysql,Postgres etc.)
 */

        virtual hk_string drivername(void) const;
/**
*If the database does not have a native boolean type(like Mysql),
*but hk_classes should use one datatype to emulate, set this to true (default) else switch it off.
*
*/
	void set_booleanemulation(bool emulate);
        bool booleanemulation(void) const;
        hk_drivermanager* drivermanager(void);
/**
* copies whole databases
*@param fromdatabase the database that should be copied
*@param schema_and_data if true both the table schemas will be created and the data will be copied, if false only the table will be created
*@param copy_local_files if true queries,forms and reports will be also copied
*@param progressdialog if set this function will be regularly called to show the progress
*/
        bool copy_database(hk_database* fromdatabase,bool schema_and_data,bool copy_local_files,progress_dialogtype* progressdialog=NULL);
        hk_string last_servermessage(void){return p_lastservermessage;}

    protected:
        hk_connection(hk_drivermanager* c);
        bool    p_connected;
        virtual bool    driver_specific_connect(void){return false;}
        virtual bool    driver_specific_disconnect(void){return false;}
	virtual bool    driver_specific_rename_database(const hk_string& oldname,const hk_string& newname){return false;}
        virtual  vector<hk_string>* driver_specific_dblist(void){return NULL;}
        virtual hk_database* driver_specific_new_database(void){return NULL;}
        virtual bool    driver_specific_new_password(const hk_string&){return false;}
        void    db_remove(hk_database* d);
        hk_string sqldelimiter(void) ;
        void inform_databases_connect(void);
        void inform_databases_disconnect(void);
        vector<hk_string> p_databaselist;
/**
 *saves the tags <HOST><USER><TCP-PORT><SQLDELIMITER> with the equivalent values
 */
        virtual void savedata(ostream& s);
/**
 *load the tags <HOST><USER><TCP-PORT><SQLDELIMITER> with the equivalent values
 */
        virtual void loaddata(const hk_string& definition);

        void set_last_servermessage(const hk_string& m){p_lastservermessage=m;}
        hk_database* database(void){return p_database;}
    private:
        void load_configuration(void);
        void save_configuration(void);
        bool copy_local_files(hk_database* fromdb,hk_database* todb,filetype f,progress_dialogtype* progressdialog);
        hk_string ask_dbname(void);
        hk_string databasepath(void);
        void make_databasedir(const hk_string& dbname);
        void set_classespath(hk_string& p);
        void delete_databasedirectory(const hk_string& db);
        void delete_directory(const hk_string& d);

        hk_database* p_database;
        unsigned int p_debug_counter;
        static  password_dialogtype* p_passworddialog;
        static  newpassword_dialogtype* p_newpassworddialog;
        hk_drivermanager* p_drivermanager;
        hk_string   p_lastservermessage;
      hk_connectionprivate* p_private;
} ;
#endif
</pre>
<HR>
	<table>
	<tr><td><small>Generated by: horst on horstnotebook on Wed Sep 24 10:38:50 2003, using kdoc 2.0a54.</small></td></tr>
	</table>
</BODY>
</HTML>