f1610bcea9db115a9c9e0eb0a2c1e4e063ba9fc2 sbenz Tue Jun 22 13:33:33 2010 -0700 Added hgsqlProfile to support connecting to dbs using the profile name diff --git src/hg/lib/sqlProg.c src/hg/lib/sqlProg.c index ed16caa..2b58876 100644 --- src/hg/lib/sqlProg.c +++ src/hg/lib/sqlProg.c @@ -1,82 +1,115 @@ /* sqlProg - functions for building command line programs to deal with * sql databases.*/ #include "common.h" #include "sqlProg.h" #include "hgConfig.h" static int cntArgv(char **argv) /* count number of elements in a null terminated vector of strings. * NULL is considered empty */ { if (argv == NULL) return 0; else { int i; for (i = 0; argv[i] != NULL; i++) continue; return i; } } void sqlExecProg(char *prog, char **progArgs, int userArgc, char *userArgv[]) /* Exec one of the sql programs using user and password from ~/.hg.conf. * progArgs is NULL-terminate array of program-specific arguments to add, * which maybe NULL. userArgv are arguments passed in from the command line. * The program is execvp-ed, this function does not return. */ { int i, j = 0, nargc=cntArgv(progArgs)+userArgc+6; char **nargv, passArg[128], hostArg[128]; safef(passArg, sizeof(passArg), "-p%s", cfgVal("db.password")); safef(hostArg, sizeof(hostArg), "-h%s", cfgVal("db.host")); AllocArray(nargv, nargc); nargv[j++] = prog; nargv[j++] = "-u"; nargv[j++] = cfgVal("db.user"); nargv[j++] = passArg; nargv[j++] = hostArg; if (progArgs != NULL) { for (i = 0; progArgs[i] != NULL; i++) nargv[j++] = progArgs[i]; } for (i = 0; i < userArgc; i++) nargv[j++] = userArgv[i]; nargv[j++] = NULL; execvp(nargv[0], nargv); errnoAbort("exec of %s failed", nargv[0]); } void sqlExecProgLocal(char *prog, char **progArgs, int userArgc, char *userArgv[]) /* * Exec one of the sql programs using user and password defined in localDb.XXX variables from ~/.hg.conf * progArgs is NULL-terminate array of program-specific arguments to add, * which maybe NULL. userArgv are arguments passed in from the command line. * The program is execvp-ed, this function does not return. */ { int i, j = 0, nargc=cntArgv(progArgs)+userArgc+6; char **nargv, passArg[128], hostArg[128]; safef(passArg, sizeof(passArg), "-p%s", cfgOption("localDb.password")); safef(hostArg, sizeof(hostArg), "-h%s", cfgOption("localDb.host")); AllocArray(nargv, nargc); nargv[j++] = prog; nargv[j++] = "-u"; nargv[j++] = cfgOption("localDb.user"); nargv[j++] = passArg; nargv[j++] = hostArg; if (progArgs != NULL) { for (i = 0; progArgs[i] != NULL; i++) nargv[j++] = progArgs[i]; } for (i = 0; i < userArgc; i++) nargv[j++] = userArgv[i]; nargv[j++] = NULL; execvp(nargv[0], nargv); errnoAbort("exec of %s failed", nargv[0]); } +void sqlExecProgProfile(char *profile, char *prog, char **progArgs, int userArgc, char *userArgv[]) +/* + * Exec one of the sql programs using user and password defined in localDb.XXX variables from ~/.hg.conf + * progArgs is NULL-terminate array of program-specific arguments to add, + * which maybe NULL. userArgv are arguments passed in from the command line. + * The program is execvp-ed, this function does not return. + */ +{ +int i, j = 0, nargc=cntArgv(progArgs)+userArgc+6; +char **nargv, passArg[128], hostArg[128], optionStr[128]; +safef(optionStr, sizeof(optionStr), "%s.password", profile); +safef(passArg, sizeof(passArg), "-p%s", cfgOption(optionStr)); +safef(optionStr, sizeof(optionStr), "%s.host", profile); +safef(hostArg, sizeof(hostArg), "-h%s", cfgOption(optionStr)); +AllocArray(nargv, nargc); + +nargv[j++] = prog; +nargv[j++] = "-u"; +safef(optionStr, sizeof(optionStr), "%s.user", profile); +nargv[j++] = cfgOption(optionStr); +nargv[j++] = passArg; +nargv[j++] = hostArg; +if (progArgs != NULL) + { + for (i = 0; progArgs[i] != NULL; i++) + nargv[j++] = progArgs[i]; + } +for (i = 0; i < userArgc; i++) + nargv[j++] = userArgv[i]; +nargv[j++] = NULL; +execvp(nargv[0], nargv); +errnoAbort("exec of %s failed", nargv[0]); +}