diff --git a/convert.c b/convert.c index 0e7bd37..b8fe0f5 100644 --- a/convert.c +++ b/convert.c @@ -3727,8 +3727,17 @@ inolog("num_p=%d\n", num_p); inolog("%dth parameter type oid is %u\n", i, PIC_dsp_pgtype(conn, parameters[i])); - if (discard_output && SQL_PARAM_OUTPUT == parameters[i].paramType) + if (SQL_PARAM_OUTPUT == parameters[i].paramType) + { + if (discard_output) + continue; + (*paramTypes)[*nParams] = PG_TYPE_VOID; + (*paramValues)[*nParams] = NULL; + (*paramLengths)[*nParams] = 0; + (*paramFormats)[*nParams] = 0; + (*nParams)++; continue; + } qb.npos = 0; retval = ResolveOneParam(&qb, NULL, &isnull, &isbinary, &pgType); @@ -3747,21 +3756,21 @@ inolog("num_p=%d\n", num_p); memcpy(val_copy, qb.query_statement, qb.npos); val_copy[qb.npos] = '\0'; - (*paramTypes)[i] = pgType; - (*paramValues)[i] = val_copy; + (*paramTypes)[*nParams] = pgType; + (*paramValues)[*nParams] = val_copy; if (qb.npos > INT_MAX) goto cleanup; - (*paramLengths)[i] = (int) qb.npos; + (*paramLengths)[*nParams] = (int) qb.npos; } else { - (*paramTypes)[i] = pgType; - (*paramValues)[i] = NULL; - (*paramLengths)[i] = 0; + (*paramTypes)[*nParams] = pgType; + (*paramValues)[*nParams] = NULL; + (*paramLengths)[*nParams] = 0; } if (isbinary) mylog("%dth parameter is of binary format\n", *nParams); - (*paramFormats)[i] = isbinary ? 1 : 0; + (*paramFormats)[*nParams] = isbinary ? 1 : 0; (*nParams)++; }