/*! \brief Sets up database connection settings using GRASS default from dbmi.h \todo DB_OK on success, DB_* error code on fail \return returns DB_OK */ int db_set_default_connection(void) { dbConnection connection; char buf[GPATH_MAX]; G_debug(1, "Creating new default DB params with db_set_default_connection()"); /* is this really needed ? */ db_get_connection(&connection); if (strcmp(DB_DEFAULT_DRIVER, "dbf") == 0) { /* Set default values and create dbf db dir */ connection.driverName = "dbf"; connection.databaseName = "$GISDBASE/$LOCATION_NAME/$MAPSET/dbf/"; db_set_connection(&connection); sprintf(buf, "%s/%s/dbf", G_location_path(), G_mapset()); G__make_mapset_element("dbf"); } else if (strcmp(DB_DEFAULT_DRIVER, "sqlite") == 0) { /* Set default values and create dbf db dir */ connection.driverName = "sqlite"; /* * TODO: Use one DB for entire mapset (LFS problems?) * or per-map DBs in $MASPET/vector/mapname/sqlite.db (how to set that here?) * or $MAPSET/sqlite/mapname.sql as with dbf? */ connection.databaseName = "$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite.db"; db_set_connection(&connection); } else G_fatal_error(_("Programmer error")); return DB_OK; }
int main(int argc, char *argv[]) { dbConnection conn; struct Flag *print, *check_set_default, *def; /* struct Option *driver, *database, *user, *password, *keycol; */ struct Option *driver, *database, *schema, *group; struct GModule *module; /* Initialize the GIS calls */ G_gisinit(argv[0]); /* Set description */ module = G_define_module(); G_add_keyword(_("database")); G_add_keyword(_("attribute table")); G_add_keyword(_("connection settings")); module->description = _("Prints/sets general DB connection for current mapset."); print = G_define_flag(); print->key = 'p'; print->description = _("Print current connection parameters and exit"); print->guisection = _("Print"); check_set_default = G_define_flag(); check_set_default->key = 'c'; check_set_default->description = _("Check connection parameters, set if uninitialized, and exit"); check_set_default->guisection = _("Set"); def = G_define_flag(); def->key = 'd'; def->label = _("Set from default settings and exit"); def->description = _("Overwrite current settings if initialized"); def->guisection = _("Set"); driver = G_define_standard_option(G_OPT_DB_DRIVER); driver->options = db_list_drivers(); driver->answer = (char *) db_get_default_driver_name(); driver->guisection = _("Set"); database = G_define_standard_option(G_OPT_DB_DATABASE); database->answer = (char *) db_get_default_database_name(); database->guisection = _("Set"); schema = G_define_standard_option(G_OPT_DB_SCHEMA); schema->answer = (char *) db_get_default_schema_name(); schema->guisection = _("Set"); group = G_define_option(); group->key = "group"; group->type = TYPE_STRING; group->required = NO; group->multiple = NO; group->answer = (char*) db_get_default_group_name(); group->description = _("Default group of database users to which " "select privilege is granted"); group->guisection = _("Set"); /* commented due to new mechanism: user = G_define_option() ; user->key = "user" ; user->type = TYPE_STRING ; user->required = NO ; user->multiple = NO ; user->description= "User:"******"password" ; password->type = TYPE_STRING ; password->required = NO ; password->multiple = NO ; password->description= "Password:"******"driver:%s\n", conn.driverName ? conn.driverName : ""); fprintf(stdout, "database:%s\n", conn.databaseName ? conn.databaseName : ""); fprintf(stdout, "schema:%s\n", conn.schemaName ? conn.schemaName : ""); fprintf(stdout, "group:%s\n", conn.group ? conn.group : ""); } else G_fatal_error(_("Database connection not defined. " "Run db.connect.")); exit(EXIT_SUCCESS); } if (check_set_default->answer) { /* check connection and set to system-wide default in required */ /* * TODO: improve db_{get,set}_connection() to not return DB_OK on error * (thus currently there is no point in checking for that here) */ db_get_connection(&conn); if (!conn.driverName && !conn.databaseName) { db_set_default_connection(); db_get_connection(&conn); G_important_message(_("Default driver / database set to:\n" "driver: %s\ndatabase: %s"), conn.driverName, conn.databaseName); } /* they must be a matched pair, so if one is set but not the other then give up and let the user figure it out */ else if (!conn.driverName) { G_fatal_error(_("Default driver is not set")); } else if (!conn.databaseName) { G_fatal_error(_("Default database is not set")); } /* connection either already existed or now exists */ exit(EXIT_SUCCESS); } if (def->answer) { db_set_default_connection(); db_get_connection(&conn); G_important_message(_("Default driver / database set to:\n" "driver: %s\ndatabase: %s"), conn.driverName, conn.databaseName); exit(EXIT_SUCCESS); } /* set connection */ db_get_connection(&conn); /* read current */ if (driver->answer) conn.driverName = driver->answer; if (database->answer) conn.databaseName = database->answer; if (schema->answer) conn.schemaName = schema->answer; if (group->answer) conn.group = group->answer; db_set_connection(&conn); exit(EXIT_SUCCESS); }