/** * sql interface command * @author Wodan */ #include <config.h> #include <db.h> inherit "/cmds/base"; private mapping fd = ([]), com = ([]); #define FD fd[this_player()] #define COM com[this_player()] void prompt(string db, string user, string pass, object player){ if(!strlen(COM)) { tell_object(player, "sql> "); } else { tell_object(player, " -> "); } input_to("main", 0, db, user, pass); } int cmd(string arg, string user, string passwd){ string err; if(!passwd){ passwd = ""; } if(!user){ user = CONFIG_DB_USER; } if (stringp(err)){ return notify_fail(err); } write("Welcome to the " + mud_name() + " SQL monitor. Commands end with ; .\n\nType 'help' for help." "\n\n"); COM = ""; prompt(arg, user, passwd, this_player()); return 1; } void finish_query(int result, mixed params, string db, string user, string passwd, object player) { mapping row; string *keys; string key; if (result != DB_SUCCESS) { tell_object(player, "Failed: " + params + ".\n"); return ; } foreach (row in params) { if (!keys) { keys = keys(row); foreach (key in keys) { tell_object(player, key + " "); } } foreach (key in keys) { tell_object(player, row[key] + " "); } tell_object(player, "\n"); } prompt(db, user, passwd, player); } /* finish_quer() */ void main(string input, string db, string user, string passwd){ if(strlen(input)) { while(input[<1] == ' ') { input = input[0..<2]; } while(input[0] == ' ') { input = input[1..]; } } switch(input){ case "clear": COM = ""; return prompt(db, user, passwd, this_player()); case "edit": this_player()->do_edit(COM, "edfin", this_object(), 0, ({ db, user, passwd })); return; case "quit": printf("Use 'exit' to quit.\n"); return prompt(db, user, passwd, this_player()); case "exit": //db_close(FD); map_delete(fd, this_player()); map_delete(com, this_player()); return; case "help": printf(@END 'help' prints this help. 'clear' clears the command you are working on. 'edit' enters the editor so you can edit your query. 'exit' quits sql. END); return prompt(db, user, passwd, this_player()); default: if(strlen(input) && input[<1] == ';'){ COM += input[0..<2] + "\n"; // // Do the request. // DB_HANDLER->make_sql_request(db, user, passwd, input, (: finish_query($1, $2, $(db), $(user), $(passwd), $(this_player())) :)); input_to("main", db, user, passwd); COM=""; tell_creator ("drakkos", "Bing %s.\n", input); return ; /* if(stringp(rows)){ printf("%s\n", rows); return prompt(db, user, passwd); } for(i = 0; i <= rows; i++){ printf("%s\n", implode(db_fetch(FD, i), (:$1 + " " + $2:), "")); } */ } else { COM += input + "\n"; } prompt(db, user, passwd, this_player()); } } void edfin(string input, string* args){ COM=input; prompt(args[0], args[1], args[2], this_player()); } mixed *query_patterns() { return ({ "<word'database'>", (:cmd($4[0], CONFIG_DB_USER, 0) :), "<word'database'> -u <word'user'>", (:cmd($4[0], $4[1], 0):), "<word'database'> -u <word'user'> -p <word'password'>", (:cmd($4[0], $4[1], $4[2]):)}); }