/* * See #new. */ static VALUE pgconn_s_connect(argc, argv, pgconn) int argc; VALUE *argv; VALUE pgconn; { VALUE arg[7]; char *pghost, *pgopt, *pgtty, *pgdbname, *pglogin, *pgpwd; int pgport; char port_buffer[20]; PGconn *conn; pghost=pgopt=pgtty=pgdbname=pglogin=pgpwd=NULL; pgport = -1; rb_scan_args(argc,argv,"07", &arg[0], &arg[1], &arg[2], &arg[3], &arg[4], &arg[5], &arg[6]); if (!NIL_P(arg[0])) { Check_Type(arg[0], T_STRING); pghost = STR2CSTR(arg[0]); } if (!NIL_P(arg[1])) { pgport = NUM2INT(arg[1]); } if (!NIL_P(arg[2])) { Check_Type(arg[2], T_STRING); pgopt = STR2CSTR(arg[2]); } if (!NIL_P(arg[3])) { Check_Type(arg[3], T_STRING); pgtty = STR2CSTR(arg[3]); } if (!NIL_P(arg[4])) { Check_Type(arg[4], T_STRING); pgdbname = STR2CSTR(arg[4]); } if (!NIL_P(arg[5])) { Check_Type(arg[5], T_STRING); pglogin = STR2CSTR(arg[5]); } if (!NIL_P(arg[6])) { Check_Type(arg[6], T_STRING); pgpwd = STR2CSTR(arg[6]); } if (pgport!=-1) { sprintf(port_buffer, "%d", pgport); conn = PQsetdbLogin(pghost, port_buffer, pgopt, pgtty, pgdbname, pglogin, pgpwd); } else { conn = PQsetdbLogin(pghost, NULL, pgopt, pgtty, pgdbname, pglogin, pgpwd); } if (PQstatus(conn) == CONNECTION_BAD) { rb_raise(rb_ePGError, PQerrorMessage(conn)); } return Data_Wrap_Struct(pgconn, 0, free_pgconn, conn); }