This example shows how you might obtain a list of the available data types supported by a database system, from a Dict object.
File: main.cc
#include <libgnomedbmm.h>
#include <libgdamm.h>
#include <iostream>
#ifdef GLIBMM_EXCEPTIONS_ENABLED
Glib::RefPtr<Gnome::Gda::Dict> create_dict()
#else
Glib::RefPtr<Gnome::Gda::Dict> create_dict(std::auto_ptr<Glib::Error>& error)
#endif
{
Glib::RefPtr<Gnome::Gda::Dict> dict = Gnome::Gda::Dict::create();
Glib::RefPtr<Gnome::Gda::Client> client = Gnome::Gda::Client::create();
Glib::ustring connection_string = "DB_DIR=" LIBGNOMEDB_DATADIR ";DB_NAME=demo_db";
#ifdef GLIBMM_EXCEPTIONS_ENABLED
Glib::RefPtr<Gnome::Gda::Connection> cnc = client->open_connection_from_string("SQLite", connection_string, "" /* username */, "" /* password */);
dict->set_connection(cnc);
dict->update_dbms_meta_data();
#else
Glib::RefPtr<Gnome::Gda::Connection> cnc = client->open_connection_from_string("SQLite", connection_string, "" /* username */, "" /* password */, Gnome::Gda::ConnectionOptions(0), error);
if(error.get() == NULL)
{
dict->set_connection(cnc);
dict->update_dbms_meta_data(error);
}
#endif
return dict;
}
int main(int argc, char* argv[])
{
Gnome::Db::init("Dicttypes example", "1.0", argc, argv);
Glib::RefPtr<Gnome::Gda::Dict> dict;
#ifdef GLIBMM_EXCEPTIONS_ENABLED
try
{
dict = create_dict();
}
catch(const Glib::Error& err)
{
std::cerr << "Exception caught: " << err.what() << std::endl;
return 1;
}
#else
std::auto_ptr<Glib::Error> error;
dict = create_dict(error);
if(error.get() != NULL)
{
std::cerr << "Exception caught: " << error->what() << std::endl;
return 1;
}
#endif // GLIBMM_EXCEPTIONS_ENABLED
typedef std::vector<Glib::RefPtr<Gnome::Gda::DictType> > DictTypeVector;
DictTypeVector types = dict->get_dict_types();
for(DictTypeVector::iterator iter = types.begin(); iter != types.end(); ++ iter)
{
std::cout << g_type_name((*iter)->get_g_type()) << std::endl;
}
return 0;
}