Re: Output parameters problem
От | Hiroshi Inoue |
---|---|
Тема | Re: Output parameters problem |
Дата | |
Msg-id | 44ECF0ED.4080508@tpf.co.jp обсуждение исходный текст |
Ответ на | Output parameters problem (Bart Samwel <bart@samwel.tk>) |
Список | pgsql-odbc |
Bart Samwel wrote: > Hi there, > > I've found a problem with psqlodbc and output parameters. The problem is > as follows: if I execute {CALL foobar(?,x,y,z)} where the parameter is > an output parameter, the psqlodbc will execute > "SELECT foobar(,x,y,z)", Oops my oversight. > instead of "SELECT foobar(x,y,z)". Output parameters in the second or > later position are no problem, it's only the first parameter that's > treated incorrectly. This is because even though the output parameter > '?' is ignored, psqlodbc then tries to remove the comma _preceding_ the > parameter from the output. If there is no comma (as is the case with the > first parameter) this doesn't work, of course. > > I've fixed it as follows, by making the following changes in convert.c: > > 1. Pass an optional QueryParse *qp to ResolveOneParam(), i.e.: > > static int > ResolveOneParam(QueryBuild *qb, QueryParse *qp); > > 2. In ResolveOneParam, there is the following segment of code: > > if (outputDiscard) > { > for (npos = qb->npos - 1; npos >= 0 && > isspace(qb->query_statement[npos]) ; npos--) ; > if (npos >= 0 && qb->query_statement[npos] == ',') > { > qb->npos = npos; > qb->query_statement[npos] = '\0'; > } > return SQL_SUCCESS_WITH_INFO; > } > > > Immediately before the return statement, I added: > > else if (npos >= 0 && qb->query_statement[npos] == '(' && qp) > { > for (npos = qp->opos+1; isspace(qp->statement[npos]); npos++) ; > if (qp->statement[npos] == ',') > { > qp->opos = npos; > } > } Thanks a lot. I would take care of it. regards, Hiroshi Inoue
В списке pgsql-odbc по дате отправления: