From bbca11bf3bb33d5853ca83b1252d17c9df3ebe6f Mon Sep 17 00:00:00 2001 From: Hiroshi Inoue Date: Wed, 27 Jun 2001 07:38:07 +0000 Subject: Handle Procedure calls. Now the version is 7.01.0006. --- src/interfaces/odbc/statement.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/interfaces/odbc/statement.c') diff --git a/src/interfaces/odbc/statement.c b/src/interfaces/odbc/statement.c index 473d5709880..165700dc09d 100644 --- a/src/interfaces/odbc/statement.c +++ b/src/interfaces/odbc/statement.c @@ -81,6 +81,9 @@ static struct { STMT_TYPE_REVOKE, "REVOKE" }, + { + STMT_TYPE_PROCCALL, "{" + }, { 0, NULL } @@ -1054,6 +1057,31 @@ SC_execute(StatementClass *self) CC_abort(conn); } + if (self->statement_type == STMT_TYPE_PROCCALL && + (self->errornumber == STMT_OK || + self->errornumber == STMT_INFO_ONLY) && + self->parameters && + self->parameters[0].buflen > 0 && + self->parameters[0].paramType == SQL_PARAM_OUTPUT) + { /* get the return value of the procedure call */ + RETCODE ret; + HSTMT hstmt = (HSTMT) self; + ret = SQLBindCol(hstmt, 1, self->parameters[0].CType, self->parameters[0].buffer, self->parameters[0].buflen, self->parameters[0].used); + if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) + SC_fetch(hstmt); + else + { + self->errornumber = STMT_EXEC_ERROR; + self->errormsg = "BindCol to Procedure return failed."; + } + if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) + SQLBindCol(hstmt, 1, self->parameters[0].CType, NULL, 0, NULL); + else + { + self->errornumber = STMT_EXEC_ERROR; + self->errormsg = "SC_fetch to get a Procedure return failed."; + } + } if (self->errornumber == STMT_OK) return SQL_SUCCESS; else if (self->errornumber == STMT_INFO_ONLY) -- cgit v1.2.3