00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef HK_DATABASE
00012 #define HK_DATABASE
00013 #include <hk_class.h>
00014 #include <list>
00015 #include <vector>
00016 #include <algorithm>
00017 #include "hk_presentation.h"
00018 #include "hk_url.h"
00019 using namespace std;
00020
00021 class hk_connection;
00022 class hk_datasource;
00023 class hk_data;
00024 class hk_dbvisible;
00025 class hk_actionquery;
00026 class hk_form;
00027 class hk_report;
00028 class hk_dsmodevisible;
00029 class hk_databaseprivate;
00030 class hk_dsquery;
00031 class hk_dstable;
00032
00033 typedef hk_form* newform_type(hk_database*,hk_class*);
00034 typedef hk_report* newreport_type(hk_database*,hk_class*);
00035 typedef hk_dstable* newtable_type(hk_class*);
00036 typedef hk_dsquery* newquery_type(hk_class*);
00037
00048 class hk_database:public hk_class
00049 {
00050 friend class hk_datasource;
00051 friend class hk_actionquery;
00052 friend class hk_connection;
00053 friend class hk_dbvisible;
00054 friend class hk_presentation;
00055 public:
00056 virtual ~hk_database();
00057 enum enum_storage{st_overwrite,st_storechanges};
00058
00062 virtual bool set_name(const hk_string& n);
00063 hk_string name(void);
00064
00075 vector<hk_string>* tablelist(bool with_systemtable=false);
00076
00077 vector<hk_string>* viewlist();
00078 vector<hk_string>* tableviewlist(bool with_systemtable=false);
00079
00080
00084 vector<hk_string>* querylist(void);
00088 vector<hk_string>* formlist(void);
00092 vector<hk_string>* reportlist(void);
00097 hk_datasource* new_table(const hk_string& name="",hk_presentation* p=NULL);
00103 hk_datasource* new_resultquery(hk_presentation* p=NULL);
00109 hk_actionquery* new_actionquery(void);
00110
00111
00112 hk_datasource* new_view(const hk_string& name="",hk_presentation* p=NULL);
00113
00122 hk_datasource* load_datasource(const hk_string& name,datasourcetype dt=dt_table,hk_presentation* p=NULL);
00123
00128 virtual bool delete_table(const hk_string& table,enum_interaction x=interactive);
00129 virtual bool delete_view(const hk_string& view, enum_interaction x=interactive);
00133 bool table_exists(const hk_string& tablename);
00134 bool view_exists(const hk_string& viewname);
00135 bool query_exists(const hk_string& queryname);
00136 bool form_exists(const hk_string& formname);
00137 bool report_exists(const hk_string& reportname);
00138
00142 hk_connection* connection(void)const{return p_connection;}
00151 ofstream* savestream(const hk_string&name,filetype type,bool ask_before_overwrite=true );
00152 ofstream* savestream(const hk_string&name,filetype type,bool ask_before_overwrite,bool with_header,bool ask_for_new_name=false );
00153
00154 ofstream* savestream(enum_storage storage,const hk_string&name,filetype type,bool ask_before_overwrite,bool with_header,bool ask_for_new_name);
00155 STRINGSTREAM* savestringstream(filetype type);
00156
00157 STRINGSTREAM* savestringstream(filetype type,bool with_header);
00158
00159
00160
00167 bool delete_file(const hk_string& name,filetype type,enum_interaction x=interactive);
00175 hk_presentation* existing_presentation(const hk_string& name, hk_presentation::enum_presentationtype t);
00176 hk_form* existing_form(const hk_string name);
00177 hk_report* existing_report(const hk_string name);
00178
00185 void save(const hk_string& statement,const hk_string& name,filetype type,bool ask_before_overwrite=true,bool ask_for_new_name=false );
00186
00187 void save(enum_storage storage,const hk_string& statement,const hk_string& name,filetype type,bool ask_before_overwrite=true,bool ask_for_new_name=false );
00194 hk_string load(const hk_string& name,filetype type);
00195
00200 hk_string database_path(void);
00201 hk_string fileendings(filetype e);
00202 hk_string fileendings(objecttype e);
00215 bool copy_table(hk_datasource* fromdatasource,bool schema_and_data,bool replacetable, bool ask,progress_dialogtype* progressdialog=NULL);
00216 bool copy_view(hk_datasource* fromdatasource,progress_dialogtype* progressdialog=NULL,const hk_string& newname="");
00217
00218 hk_form* new_formvisible(void);
00219 hk_form* new_dialogformvisible(void);
00220 hk_report* new_reportvisible(void);
00221 hk_dstable* new_tablevisible(void);
00222 hk_dsquery* new_queryvisible(void);
00223 static void set_new_formvisiblefunction(newform_type*);
00224 static void set_new_dialogformvisiblefunction(newform_type*);
00225 static void set_new_reportvisiblefunction(newreport_type*);
00226 static void set_new_tablevisiblefunction(newtable_type*);
00227 static void set_new_queryvisiblefunction(newquery_type*);
00228 void set_usewidgetparent(hk_class*);
00235 bool rename_table(const hk_string& originalname, const hk_string& newname,enum_interaction x=interactive);
00243 bool rename_file(const hk_string& originalname, const hk_string& newname,filetype type,enum_interaction x=interactive);
00248 void disable(void);
00249
00250 bool store_connectionfile(const hk_url& url, bool store_password=false);
00251
00252
00253 enum enum_storagemode {central,local};
00254 void set_storagemode(filetype, enum_storagemode load,enum_storagemode store);
00255 enum_storagemode storagemode(filetype);
00256 enum_storagemode loadmode(filetype);
00257 bool create_centralstoragetable(void);
00258 bool has_centralstoragetable(void);
00259 hk_string load_local(const hk_string& name,filetype type);
00260 hk_string load_central(const hk_string& name,filetype type);
00261 void save_local(enum_storage storage,const hk_string& statement,const hk_string& name,filetype type,bool ask_before_overwrite,bool ask_for_new_name);
00262 void save_local(const hk_string& statement,const hk_string& name,filetype type,bool ask_before_overwrite,bool ask_for_new_name);
00263 void save_central(const hk_string& statement,const hk_string& name,filetype type,bool ask_before_overwrite,bool ask_for_new_name);
00264 void save_central(enum_storage storage,const hk_string& statement,const hk_string& name,filetype type,bool ask_before_overwrite,bool ask_for_new_name);
00265 bool delete_localfile(const hk_string& name,filetype type,enum_interaction x=interactive);
00266 bool delete_centralfile(const hk_string& name,filetype type,enum_interaction x=interactive);
00267 vector<hk_string>* filelist(filetype type);
00268 vector<hk_string>* local_filelist(filetype type);
00269 vector<hk_string>* central_filelist(filetype type);
00270
00271 void save_configuration(void);
00272 list <hk_presentation*>* presentationlist() const;
00273
00274 void set_databasecharset(const hk_string& charset);
00275 hk_string databasecharset(void) const;
00276 void set_automatic_data_update(bool u);
00277 bool is_automatic_data_update(void);
00278
00279 protected:
00280 hk_database(hk_connection* c);
00281 bool select_db( const hk_string& newname);
00282 void inform_datasources_before_closing(void);
00286 virtual void driver_specific_tablelist(void){}
00287 virtual void driver_specific_viewlist(void){}
00288 virtual hk_datasource* driver_specific_new_table(hk_presentation* p);
00289 virtual hk_datasource* driver_specific_new_view(hk_presentation* p);
00290 virtual hk_datasource* driver_specific_new_resultquery(hk_presentation* p);
00291 virtual hk_actionquery* driver_specific_new_actionquery(void){return NULL;}
00292 virtual bool driver_specific_rename_table(const hk_string& oldname,const hk_string& newname){return false;}
00293 virtual bool driver_specific_select_db(void){return false;}
00294 virtual void driver_specific_set_name(void){}
00295 hk_connection* p_connection;
00296 void ds_remove(hk_data* ds);
00297 virtual void connection_connected(void);
00298 virtual void connection_disconnected(void);
00299
00300 vector<hk_string> p_tablelist;
00301 vector<hk_string> p_viewlist;
00302 vector<hk_string> p_tableviewlist;
00303 void dbvisible_add(hk_dbvisible* v);
00304 void dbvisible_remove(hk_dbvisible* v);
00305 void clear_visiblelist(void);
00306 virtual void before_source_vanishes(void);
00307 void presentation_add(hk_presentation* p);
00308 void presentation_remove(hk_presentation* p);
00309 void load_configuration(void);
00310 virtual void savedata(ostream& s);
00311 virtual void loaddata(const hk_string& definition);
00312 hk_url p_url;
00313 void inform_datasources_filelist_changes(listtype type);
00314 private:
00315 void clear_presentationlist();
00316 bool in_presentationload(void);
00317 void mark_datasources_as_not_handled(void);
00318 void mark_visible_objects_as_not_handled(void);
00319 hk_string savemessage(filetype t,enum_storage s, hk_string name);
00320 hk_databaseprivate* p_private;
00321 static newform_type *p_newformfunction;
00322 static newform_type *p_newdialogformfunction;
00323 static newreport_type *p_newreportfunction;
00324 static newtable_type *p_newtablefunction;
00325 static newquery_type *p_newqueryfunction;
00326 void save_storage(ostream&,filetype);
00327 void load_storage(const hk_string&,filetype);
00328
00329
00330 } ;
00331 #endif