SEXP aRTconn::DeleteDb(SEXP data) { string databasename = GET_STRING_ELEMENT(data, "dbname"); // "checking ...": R code already does. TeDatabase* database = NewTeDatabase(); if( !database -> connect(Host, User, Password, "", Port)) { PrintSilentNo; error("Could not connect\n"); } PrintSilent("Deleting database \'%s\' ... ", databasename.c_str()); stringstream stream; stream << "DROP DATABASE " << databasename << ";"; string sql = StreamToChar(stream); if( !database->execute(sql) ) { delete database; PrintSilentNo; error( database->errorMessage().c_str() ); } delete database; PrintSilentYes; return RNULL; }
SEXP aRTconn::AddPermission(SEXP data) // only works in MySQL! { string user = GET_STRING_ELEMENT(data, "user" ); bool remote = GET_BOOL_ELEMENT (data, "remote" ); string host = GET_STRING_ELEMENT(data, "host" ); string pass = GET_STRING_ELEMENT(data, "pass" ); string database = GET_STRING_ELEMENT(data, "database" ); string privilege = GET_STRING_ELEMENT(data, "privilege"); PrintSilent("Adding permissions to user \'%s\' ... ", user.c_str()); TeDatabase* db = NewTeDatabase(); if( !db -> connect(Host, User, Password, "", Port)) error("Could not connect\n"); stringstream stream; stream << "grant " << privilege << " ON " << database << ".* TO " << user; if(!remote && host == "") stream << "@localhost"; else if(host != "") stream << "@" << host; else stream << "@\'%\'"; if(pass != "") stream << " IDENTIFIED BY \'" << pass << "\'"; stream << ";"; string sql = StreamToChar(stream); // cout << sql << endl; if( !db->execute(sql) ) { string err = db->errorMessage(); delete db; error( err.c_str() ); } delete db; PrintSilentYes; return RNULL; }
SEXP aRTconn::DropUser(SEXP data) { string user = GET_STRING_ELEMENT(data, "user" ); bool remote = GET_BOOL_ELEMENT (data, "remote" ); string host = GET_STRING_ELEMENT(data, "host" ); PrintSilent("Dropping user \'%s\' ... ", user.c_str()); TeDatabase* db = NewTeDatabase(); if( !db -> connect(Host, User, Password, "", Port)) error("Could not connect\n"); stringstream stream; stream << "drop user " << user; if(!remote && host == "") stream << "@localhost"; else if(host != "") stream << "@" << host; else stream << "@\'%\'"; stream << ";"; string sql = StreamToChar(stream); // cout << sql << endl; if( !db->execute(sql) ) { string err = db->errorMessage(); delete db; error( err.c_str() ); } delete db; PrintSilentYes; return RNULL; }