From 40eb5495c9994359cb99bbe16fc44e01da200b88 Mon Sep 17 00:00:00 2001 From: Hiroshi Inoue Date: Fri, 12 Apr 2002 08:03:12 +0000 Subject: [PATCH] 1) Fix a bug in declare/fetch mode. 2) Suppress some error logs for the request to other drivers. --- src/interfaces/odbc/environ.c | 3 +++ src/interfaces/odbc/options.c | 13 +++++++++++++ src/interfaces/odbc/qresult.h | 1 + src/interfaces/odbc/results.c | 13 +++++++++---- src/interfaces/odbc/statement.h | 1 + 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/interfaces/odbc/environ.c b/src/interfaces/odbc/environ.c index 6de5c50c4e..7c8f80dd8f 100644 --- a/src/interfaces/odbc/environ.c +++ b/src/interfaces/odbc/environ.c @@ -281,6 +281,9 @@ PGAPI_StmtError( HSTMT hstmt, case STMT_INVALID_OPTION_IDENTIFIER: strcpy(szSqlState, "HY092"); break; + case STMT_OPTION_NOT_FOR_THE_DRIVER: + strcpy(szSqlState, "HYC00"); + break; case STMT_EXEC_ERROR: default: strcpy(szSqlState, "S1000"); diff --git a/src/interfaces/odbc/options.c b/src/interfaces/odbc/options.c index d560ff4670..ab974c3cd0 100644 --- a/src/interfaces/odbc/options.c +++ b/src/interfaces/odbc/options.c @@ -209,6 +209,19 @@ set_statement_option(ConnectionClass *conn, conn->stmtOptions.use_bookmarks = vParam; break; + case 1227: + case 1228: + if (stmt) + { + stmt->errornumber = STMT_OPTION_NOT_FOR_THE_DRIVER; + stmt->errormsg = "The option may be for MS SQL Server(Set)"; + } + else if (conn) + { + conn->errornumber = STMT_OPTION_NOT_FOR_THE_DRIVER; + conn->errormsg = "The option may be for MS SQL Server(Set)"; + } + return SQL_ERROR; default: { char option[64]; diff --git a/src/interfaces/odbc/qresult.h b/src/interfaces/odbc/qresult.h index 1bf1ce93b7..b313cbc467 100644 --- a/src/interfaces/odbc/qresult.h +++ b/src/interfaces/odbc/qresult.h @@ -102,6 +102,7 @@ struct QResultClass_ /* status macros */ #define QR_command_successful(self) ( !(self->status == PGRES_BAD_RESPONSE || self->status == PGRES_NONFATAL_ERROR || self->status == PGRES_FATAL_ERROR)) +#define QR_command_maybe_successful(self) ( !(self->status == PGRES_BAD_RESPONSE || self->status == PGRES_FATAL_ERROR)) #define QR_command_nonfatal(self) ( self->status == PGRES_NONFATAL_ERROR) #define QR_end_tuples(self) ( self->status == PGRES_END_TUPLES) #define QR_set_status(self, condition) ( self->status = condition ) diff --git a/src/interfaces/odbc/results.c b/src/interfaces/odbc/results.c index 517d5a234d..5f78ba936a 100644 --- a/src/interfaces/odbc/results.c +++ b/src/interfaces/odbc/results.c @@ -628,7 +628,7 @@ inolog("COLUMN_NULLABLE=%d\n", value); break; case SQL_COLUMN_OWNER_NAME: /* == SQL_DESC_SCHEMA_NAME */ - p = ""; + p = fi && (fi->ti) ? fi->ti->schema : ""; break; case SQL_COLUMN_PRECISION: /* in 2.x */ @@ -744,6 +744,10 @@ inolog("COLUMN_TYPE=%d\n", value); value = (fi && !fi->name[0] && !fi->alias[0]) ? SQL_UNNAMED : SQL_NAMED; break; #endif /* ODBCVER */ + case 1212: + stmt->errornumber = STMT_OPTION_NOT_FOR_THE_DRIVER; + stmt->errormsg = "this request may be for MS SQL Server"; + return SQL_ERROR; default: stmt->errornumber = STMT_INVALID_OPTION_IDENTIFIER; stmt->errormsg = "ColAttribute for this type not implemented yet"; @@ -1293,9 +1297,10 @@ PGAPI_ExtendedFetch( /* increment the base row in the tuple cache */ QR_set_rowset_size(res, opts->rowset_size); - /* QR_inc_base(res, stmt->last_fetch_count); */ - /* Is inc_base right ? */ - res->base = stmt->rowset_start; + if (SC_is_fetchcursor(stmt)) + QR_inc_base(res, stmt->last_fetch_count); + else + res->base = stmt->rowset_start; /* Physical Row advancement occurs for each row fetched below */ diff --git a/src/interfaces/odbc/statement.h b/src/interfaces/odbc/statement.h index 65fa088cb4..e0a01b7eab 100644 --- a/src/interfaces/odbc/statement.h +++ b/src/interfaces/odbc/statement.h @@ -79,6 +79,7 @@ typedef enum #define STMT_RETURN_NULL_WITHOUT_INDICATOR 29 #define STMT_ERROR_IN_ROW 30 #define STMT_INVALID_DESCRIPTOR_IDENTIFIER 31 +#define STMT_OPTION_NOT_FOR_THE_DRIVER 32 /* statement types */ enum -- 2.40.0