00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef HK_CONNECTION
00012 #define HK_CONNECTION
00013 #include "hk_class.h"
00014 #include <list>
00015 #include <vector>
00016 #include <algorithm>
00017 using namespace std;
00018 class hk_drivermanager;
00019 class hk_connectionprivate;
00020
00021 class hk_database;
00031 class hk_connection:public hk_class
00032 {
00033 friend class hk_database;
00034 friend class hk_drivermanager;
00035 public:
00040 virtual ~hk_connection();
00044 void set_host(const hk_string& h);
00045 hk_string host(void);
00049 void set_user(const hk_string& u);
00050 hk_string user(void);
00054 void set_password(const hk_string& p);
00055 hk_string password(void);
00059 void set_tcp_port(unsigned int t);
00060 unsigned int tcp_port(void);
00061 void set_defaultdatabase(const hk_string&);
00062 hk_string defaultdatabase(void) const;
00066 virtual unsigned int default_tcp_port(void) const;
00072 bool connect(enum_interaction c=interactive);
00077 bool disconnect(void);
00081 bool is_connected(void);
00091 vector<hk_string>* dblist(void);
00098 hk_database* new_database(const hk_string& name="");
00099
00100 bool rename_database(const hk_string& originalname, const hk_string& new_name);
00104 enum support_enum
00105 {
00106 SUPPORTS_AUTOINCCOLUMN=1,
00107 SUPPORTS_BOOLCOLUMN=2,
00108 SUPPORTS_DATECOLUMN=3,
00109 SUPPORTS_TIMECOLUMN=4,
00110 SUPPORTS_DATETIMECOLUMN=5,
00111 SUPPORTS_BINARYCOLUMN=6,
00112 SUPPORTS_MEMOCOLUMN=7,
00113 SUPPORTS_TIMESTAMPCOLUMN=8,
00114
00115 SUPPORTS_TEXTCOLUMN=9,
00116 SUPPORTS_INTEGERCOLUMN=10,
00117 SUPPORTS_SMALLINTEGERCOLUMN=11,
00118 SUPPORTS_FLOATINGCOLUMN=12,
00119 SUPPORTS_SMALLFLOATINGCOLUMN=13,
00120
00121 SUPPORTS_PROPRIETARYCOLUMN=19,
00122
00123 SUPPORTS_SQL=100,
00124 SUPPORTS_TRANSACTIONS=101,
00125 SUPPORTS_REFERENTIALINTEGRITY=102,
00126 SUPPORTS_NEW_DATABASE=103,
00127 SUPPORTS_DELETE_DATABASE=104,
00128 SUPPORTS_NEW_TABLE=105,
00129 SUPPORTS_ALTER_TABLE=106,
00130 SUPPORTS_DELETE_TABLE=107,
00131 SUPPORTS_CREATE_INDEX=108,
00132 SUPPORTS_DELETE_INDEX=109,
00133 SUPPORTS_CHANGE_PASSWORD=110,
00134 SUPPORTS_RENAME_DATABASE=111,
00135 SUPPORTS_RENAME_TABLE=112,
00136 SUPPORTS_VIEWS=113,
00137 SUPPORTS_NEW_VIEW=114,
00138 SUPPORTS_ALTER_VIEW=115,
00139 SUPPORTS_DELETE_VIEW=116,
00140 SUPPORTS_ADD_COLUMN=117,
00141 SUPPORTS_DELETE_COLUMN=118,
00142 SUPPORTS_CHANGE_COLUMNTYPE=119,
00143 SUPPORTS_CHANGE_COLUMNNAME=120,
00144 SUPPORTS_ALTER_PRIMARY_KEY=121,
00145 SUPPORTS_ALTER_NOT_NULL=122,
00146
00147 SUPPORTS_SQL_GROUP_BY=180,
00148 SUPPORTS_SQL_ORDER_BY=181,
00149 SUPPORTS_SQL_HAVING=182,
00150 SUPPORTS_SQL_WHERE=183,
00151 SUPPORTS_SQL_ALIAS=184,
00152 SUPPORTS_SQL_SUBSELECTS=185,
00153 SUPPORTS_SQL_JOINS=186,
00154 SUPPORTS_SQL_UNION=187,
00155
00156 SUPPORTS_LOCAL_FILEFORMAT=200,
00157 SUPPORTS_NONALPHANUM_FIELDNAMES=201,
00158 SUPPORTS_NONASCII_FIELDNAMES=202,
00159 SUPPORTS_SPACE_FIELDNAMES=203
00160 };
00161
00165 virtual bool server_supports(support_enum) const{return false;}
00169 enum need_enum
00170 {
00171
00172 NEEDS_LOGIN=0,
00173 NEEDS_HOST=1,
00174 NEEDS_USERNAME=2,
00175 NEEDS_PASSWORD=3,
00176 NEEDS_SQLDELIMITER=4,
00177 NEEDS_PORT=5,
00178 NEEDS_DATABASENAME=6,
00179 NEEDS_BOOLEANEMULATION=7,
00180 NEEDS_NULL_TERMINATED_SQL=8,
00181 NEEDS_TABLE_ALIAS_AS=9,
00182 NEEDS_MANUAL_CHARSET=10,
00183 NEEDS_DIRECTORY_AS_DATABASE=11
00184 };
00188 virtual bool server_needs(need_enum) const {return false;}
00194 static void set_passworddialog(password_dialogtype*);
00198 virtual bool create_database(const hk_string& dbase);
00204 virtual bool delete_database(const hk_string& dbase,enum_interaction c=interactive);
00208 bool database_exists(const hk_string& databasename);
00215 bool set_newpassword(const hk_string& newpassword);
00221 void show_newpassworddialog(void);
00226 static void set_newpassworddialog(newpassword_dialogtype*);
00227
00228
00229
00230
00231 bool show_passworddialog(void);
00236 virtual hk_string drivername(void) const;
00242 void set_booleanemulation(bool emulate);
00243 bool booleanemulation(void) const;
00244 hk_drivermanager* drivermanager(void);
00252 bool copy_database(hk_database* fromdatabase,bool schema_and_data,bool copy_local_files,progress_dialogtype* progressdialog=NULL);
00253 hk_string last_servermessage(void){return p_lastservermessage;}
00254 hk_string databasepath(void);
00258 static hk_string check_capabilities(hk_connection* from,hk_connection* to);
00259
00263 virtual hk_string mimetype(void) const {return "";}
00264 virtual unsigned int maxfieldnamesize(void) const {return (unsigned int)-1;}
00265
00269 virtual long int maxcharsize(void) const {return 255;}
00270
00271 virtual hk_string left_join_statement(void) {return " LEFT JOIN ";}
00272 virtual hk_string inner_join_statement(void) {return " INNER JOIN ";}
00273
00274 bool is_sqlstatement(const hk_string&);
00275
00276 protected:
00277 hk_connection(hk_drivermanager* c);
00278 bool p_connected;
00279 virtual bool driver_specific_connect(void){return false;}
00280 virtual bool driver_specific_disconnect(void){return false;}
00281 virtual bool driver_specific_rename_database(const hk_string& ,const hk_string& ){return false;}
00282 virtual vector<hk_string>* driver_specific_dblist(void){return NULL;}
00283 virtual hk_database* driver_specific_new_database(void){return NULL;}
00284 virtual bool driver_specific_new_password(const hk_string&){return false;}
00285 virtual bool driver_specific_delete_database(const hk_string& dbase);
00286
00287 void db_remove(hk_database* d);
00288 hk_string sqldelimiter(void) ;
00289 void inform_databases_connect(void);
00290 void inform_databases_disconnect(void);
00291 vector<hk_string> p_databaselist;
00292 list<hk_string> p_sqlstatements;
00296 virtual void savedata(ostream& s);
00300 virtual void loaddata(xmlNodePtr definition);
00301
00302 void set_last_servermessage(const hk_string& m);
00303 hk_database* database(void) const {return p_database;}
00304 static bool internal_copy_check(hk_connection* from, hk_connection* to,support_enum);
00305 void delete_databasedirectory(const hk_string& db);
00306 void delete_directory(const hk_string& d);
00307 private:
00308 void load_configuration(void);
00309 void save_configuration(void);
00310 bool copy_local_files(hk_database* fromdb,hk_database* todb,objecttype f,progress_dialogtype* progressdialog);
00311 hk_string ask_dbname(void);
00312 void make_databasedir(const hk_string& dbname);
00313 void set_classespath(hk_string& p);
00314
00315 hk_database* p_database;
00316 unsigned int p_debug_counter;
00317 static password_dialogtype* p_passworddialog;
00318 static newpassword_dialogtype* p_newpassworddialog;
00319 hk_drivermanager* p_drivermanager;
00320 hk_string p_lastservermessage;
00321 hk_connectionprivate* p_private;
00322 } ;
00323 #endif